一、自动生成Dump(JMX的MBean)
JVM启动参数配置:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/home/app/dumps/
二、手动生成Dump
jmap -dump:format=b,file=../dump/testdump0329.hprof 9018
三、内存泄漏分析
1、查看大对象,并梳理调用关系(VisualVM、JProfile、MAT)
2、查看
崩溃前垃圾回收的时间越来越长
四、性能调优
1、线程池:
2、连接池:程序逻辑算法优化(95%的场景通过此方法解决)
3、JVM启动参数:调整各代内存比率和垃圾回收算法、提高吞吐
a、GC时间足够小
b、GC次数足够少
c、FullGC频率足够低
a和b有一定冲突,一般为避免最大最小之间收缩产品额外gc,最大最小设置相同,yong与old比率1:2,NewRadio调整比率,为防止年轻代堆收缩,-XX:newSize -XX:MaxNewSize一样大小,
更大年轻代,更小老年代,大的年轻代会延长普通GC周期,但会增加每次GC的时间;小的年老代会导致更频繁的FullGC;
更小的年轻,更大老年代,小的年轻代会导致普通GC频繁,每次GC时间短,大的年老代减少FullGC频率;
如何选择应该依赖应用程序对象生命周期的分布情况:如果应用存在