系统内存飙高,JVM如何查找问题?
1、找出哪个进程cpu高: top (jps)
2、该进程中的哪个线程cpu高:top -Hp +线程号
3、查看线程堆内存对象情况(某对象数量一般都有问题):
方式一:直接查看对象情况 :jmap - histo 线程号 | head -20。
方式二:导出堆内存查看对象情况:map -dump:format=b,file=xxx pid
注意:不要直接在线上系统Linux,直接使用map -dump 会出现卡顿现象,电商系统不适合。
解决方案:
1:设定了参数-XX:+HeapDumpOnOutOfMemoryError,OOM的时候会自动产生堆转储文件
2:很多服务器备份(高可用),停掉这台服务器对其他服务器不影响
3:在线定位(一般小点儿公司用不到)