1,检查机器上面服务的JVM参数配置
XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/data/jvmLog/mdm/heapdump_pid%p.hprof 用来自动生成堆内存转储文件的。
参数说明:
- -XX:+HeapDumpOnOutOfMemoryError
作用:当发生OutOfMemoryError时,自动生成堆内存转储文件
触发条件:Java堆内存不足,抛出OutOfMemoryError异常
默认值:false(不自动生成) - -XX:HeapDumpPath=/data/jvmLog/mdm/heapdump_pid%p.hprof
作用:指定堆转储文件的保存路径和文件名
路径:/data/jvmLog/mdm/ 目录
文件名:heapdump_pid%p.hprof(%p会被替换为进程ID)
2,进入机器使用命令查看服务进程
ps aux | grep java
上面的24601是mdm服务的进程id,下面31530是ESS服务的进程id。
3,GC日志目录 :
/data/jvmLog/mdm/
查看gc.log日志
gc日志记录了youngGC和fullGC
内存溢出会生成hprof文件,
下载文件使用sz命令:sz -e 文件名
文件太大使用gzip压缩一下
使用sz命令下载压缩文件到本地:
解压后用idea打开该文件:
打开后长这样:
手动生成堆转储(这会触发GC并生成.hprof文件)
jmap -dump:format=b,file=/data/jvmLog/ess/test_heapdump.hprof