调优工具
- java自带的监控工具 jvisualvm
阿里开源的 arthas 工具
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
arthas 操作调优
等待启动之后 可以输入 dashboard进行 线程状态的一个检测
- 查看是否有线程占用cpu很高或者其他情况 可以在dashboard面板中输入 Thread _ 线程id查看问题
也可以使用arthas直接反编译线上环境的类进行查看代码情况
调优的目的
减少GC
在堆内存老年代内存装满之后 继续新建对象暂时不会发送堆内存溢出,此时会发送full GC进行整体堆内存进行垃圾升级,如果此时还没能整理空闲的区域 则会抛出OOM ps(普通的GC叫做 minorGC)
Why 减少GC
因为在GC的时候会停止用户线程 (STOP THE WORK STW)
为什么会有stw 是因为如果不停止用户线程 当fullGC的时候 用户线程已经结束 GC还没能结束 之前判定为非垃圾的对象 会在用户执行完成之后变成垃圾 然而GC 没能检测到,同时也不可能再次循环检测 否则GC一直停不下来
两种GC的回收区域
mintorGC 一般回收的是年轻代
- full GC 一般是老年代填充满了然后开始 整体GC