1、查看垃圾回收器



运行

【jvm】案例分析


java -version

【jvm】案例分析


32位jvm分server和client,64位jvm只有server


查看gc日志
【jvm】案例分析


cms 是为了gc时减少停顿时间。cpu到100%


【jvm】案例分析


2、JDK自带的监控工具

JDK自带的 监控工具

https://docs.oracle.com/javase/8/docs/technotes/tools/windows/toc.html

jmap -heap pid 堆使用情况

jstat -gcutil pid 1000

jstack 线程dump

jvisualvm

jconsole


MAT

http://help.eclipse.org/oxygen/index.jsp?topic=/org.eclipse.mat.ui.help/welcome.html

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=/home/administrator/james/error.hprof


怀疑:

1.看GC日志 126719K->126719K(126720K)

2.dump

3.MAT

1.占用Retained Heap

2.看有没有GC Root指向


jmap


jmap -heap 【jar ID】


【jvm】案例分析


先查deadlock,再blocked

【jvm】案例分析

下图对上图的解释

【jvm】案例分析


3、优化

【jvm】案例分析


什么条件触发STW的Full GC呢?

1、Perm空间不足;永久带不足

2、CMS GC时出现promotion failed和concurrent mode failure(concurrent mode failure发生的原因一般是CMS正在进行,但是由于老年代空间不足,需要尽快回收老年代里面的不再被使用的对象,这时停止所有的线程,同时终止CMS,直接进行Serial Old GC);

(promontion faild产生的原因是EDEN空间不足的情况下将EDEN与From survivor中的存活对象存入To survivor区时,To survivor区的空间不足,再次晋升到old gen区,而old gen区内存也不够的情况下产生了promontion faild从而导致full gc )

3、统计得到的Young GC晋升到老年代的平均大小大于老年代的剩余空间;

4、主动触发Full GC(执行jmap -histo:live [pid])来避免碎片问题。谨慎使用,卡死时用的。


解决思路:

【jvm】案例分析

相关文章:

猜你喜欢
  • 2022-01-23
  • 2021-09-13
  • 2021-11-05
  • 2021-07-16
  • 2021-12-29
相关资源
相似解决方案