小蔡学Java

JVM调优实践

2024-03-02 09:55 1400 0 JVM / JUC JVM调优

JVM 调优的参数可以在哪里设置参数值

war包部署在tomcat中设置

修改TOMCAT_HOME/bin/catalina.sh文件

jar包部署在启动参数设置

通常在linux系统下直接加参数启动springboot项目

nohup  :  用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行
参数 &  :让命令在后台执行,终端退出后命令仍旧执行。

用的 JVM 调优的参数都有哪些?

对于JVM调优,主要就是调整 年轻代老年代元空间的内存空间大小及使用的垃圾回收器类型

  • 设置堆空间大小
  • 虚拟机栈的设置
  • 年轻代中Eden区两个Survivor区的大小比例
  • 年轻代晋升老年代阈值
  • 设置垃圾回收收集器

设置堆空间大小

设置堆的初始大小和最大大小,为了防止垃圾收集器在初始大小、最大大小之间收缩堆而产生额外的时间,通常把最大、初始大小设置为相同的值

堆空间设置多少合适?

  • 最大大小的默认值是物理内存的1/4初始大小是物理内存的1/64
  • 堆太小,可能会频繁的导致年轻代和老年代的垃圾回收,会产生stw,暂停用户线程
  • 内存大肯定是好的,存在风险,假如发生了fullgc,它会 扫描整个堆空间,暂停用户线程的时间长
  • 设置参考推荐:尽量大,也要考察一下当前计算机其他程序的内存使用情况

虚拟机栈的设置

虚拟机栈的设置:每个线程默认会开启1M的内存,用于存放栈帧调用参数局部变量等,但一般256K就够用。通常减少每个线程的堆栈,可以产生更多的线程,但这实际上还受限于操作系统。

年轻代中Eden区和两个Survivor区的大小比例

设置年轻代中Eden区和两个Survivor区的大小比例。该值如果不设置,则默认比例为 8 : 1 : 1。通过增大Eden区的大小,来减少YGC发生的次数,但有时我们发现,虽然次数减少了,但Eden区满的时候,由于占用的空间较大,导致释放缓慢,此时STW的时间较长,因此需要按照程序情况去调优。

年轻代晋升老年代阈值

  • 默认为15
  • 取值范围0-15

设置垃圾回收收集器

通过增大吞吐量提高系统性能,可以通过设置并行垃圾回收收集器

评论( 0 )

  • 博主 Mr Cai
  • 坐标 河南 信阳
  • 标签 Java、SpringBoot、消息中间件、Web、Code爱好者

文章目录