JVM调优
# Arthas
1. Arthas安装
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
1
2
2
2. 启动成功后会显示如下
3. dashboard (显示线程、堆,gc所有信息)
输入命令之后可显示当前进程的所有线程信息,堆信息,gc信息以及运行程序的底层java版本等信息,这个结果还是动态的,每几秒刷新一下,详情如下图所示:
4. thread 线程号 (打印某个线程的堆栈信息)
在上图中我们发现有一个线程占用CPU特别高,我们可以通过这条命令看到这个线程的堆栈信息,以查找问题所在,通过图中红框中的信息,可以看到问题代码的所在,详情如下图所示:
# jvm调优案例
java -Xms3G -Xmx3G -Xss1M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M -jar ***.jar
1
优化重点:JVM优化主要优化的是Full gc,因为一次Full gc的STW时间比较长,容易造成卡顿,使用户的体验相当不好 在jvm中大部分的对象都是朝生夕逝的,尽量别让这些对象进入老年代,主要看点就是让minor gc时,存活的对象总大小不要超过Survivor区域的S0或者S1区域的一半,如果超过一半,就会直接进入老年代,但是这些对象可能在几秒之后就变成了垃圾,所以,进入老年代只会占用过多空间,发生full gc而已
从上面的图可以看出60M对象已经超出S0或者S1的一半了,那么这60M对象就会直接进入到老年代,然后发生full GC,等老年代被占满后,新的对象写不进去就发生OOM了
通过调优,让full GC几乎不再发生,通过下面参数调优
java -Xms3G -Xmx3G -Xnn2G -Xss1M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M -jar ***.jar
1