【jvm】案例分析

23 篇文章 0 订阅

1、查看垃圾回收器



运行

屏幕快照 2019-06-05 下午8.38.56.png


java -version

屏幕快照 2019-06-05 下午8.33.51.png


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


查看gc日志
屏幕快照 2019-06-05 下午9.26.52.png


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


屏幕快照 2019-06-05 下午9.30.14.png


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】


屏幕快照 2019-06-05 下午11.32.56.png


先查deadlock,再blocked

屏幕快照 2019-06-05 下午11.44.23.png

下图对上图的解释

屏幕快照 2019-06-05 下午11.50.05.png


3、优化

屏幕快照 2019-06-06 上午9.24.03.png


什么条件触发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])来避免碎片问题。谨慎使用,卡死时用的。


解决思路:

屏幕快照 2019-06-06 上午9.38.11.png

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值