Java内存泄漏排查或者JVM内存调优
1)通过jps查看当前系统运行的java进程的ID或者通过ps -ef | grep “指定服务名,例如tomcat等”
(2)通过使用top -p [pid]的命令来查看指定进程占用系统资源的情况,主要是看内存
(3)通过使用jstat -gcutil [pid] 60000的命令,来查看GC的情况,每隔1分钟输出一次
(4)通过观察上面的输出结果,不难看出,是否存在FULL GC的情况,如果发现是因为大量FULL GC造成程序执行缓慢的话,就要接着查看到底是程序的哪些部分占用的
(5)通过使用jmap -histo:live [pid]来查看进程下各种类型的对象创建了多少个,以及每种对象占用内存的情况
(6)通过仔细观察上面的输出结果,不难看出,哪一种类型的对象占用内存较多,结合业务应用系统,不难排查出问题出处
(7)也可以通过jmap命令生成dump文件,使用eclipse的分析插件来分析此文件,查看更多详情信息,也可以通过jhat命令来创建一个http服务,通过浏览器来访问服务器查看dump文件详情。
JVM参数调优
(1)设置堆内存最大最小值相同,-Xmx与-Xms值相同,这样可以避免堆收缩提升效率
(2)设置年轻代与老年代的内存占用比例-PremRadio参数为1:2,也可以针对年轻代设置,比如将-Newsize与-MaxNewsize设置相同的值,也是为了避免堆收缩
(3)如果服务器物理内存资源充足,可以尝试设置回收方式,默认是Serio,可以设置为-UseParalleOldGC,提升回收并行度