jvm排查的jump日志

[TOC]

1 linux上查看jvm GC详情并获取jvm当前dump文件

通过命令行:

jstat -gc [pid] [刷新频率ms]

其中pid为要查看的java进程的id,刷新频率为每个多少毫秒刷新一次GC情况。显示内如如下图:


上图中是查看进程id为12711的Java项目,每隔1秒即1000毫秒刷新一次。
参数说明:

  • 1、S0C 和 S1C:Survivor(幸存区) 0/1区的容量(单位为KB);
  • 2、S0U 和 S1U:Survivor(幸存区) 0/1区目前已使用的空间(单位为KB);
  • 3、EC:年轻代中Eden(伊甸园)的容量(单位为KB);
  • 4、EU:年轻代中Eden(伊甸园)目前已使用空间(单位为KB);
  • 5、OC:年老代的容量(单位为KB);
  • 6、OU:年老代目前已使用的空间(单位为KB);
  • 7、MC:元空间(方法区)的容量(单位为KB);
  • 8、MU:元空间(方法区)目前已使用空间(单位为KB);
  • 9、CCSC:压缩类空间的容量(单位为KB);
  • 10、CCSU:压缩类空间目前已使用空间大小(单位为KB);
  • 11、YGC:年轻代垃圾回收次数;
  • 12、YGCT:年轻代垃圾回收消耗时间(单位为秒);
  • 13、FGC:年老代垃圾回收次数;
  • 14、FGCT:年老代垃圾回收消耗时间(单位为秒);
  • 15、GCT:垃圾回收消耗总时间(单位为秒)。

1.1 linux获取jvm当前dump文件

命令行为:

jmap -dump:file=[文件名] [pid]

然后等待生成dump文件,生成的dump文件就在当前目录下。如下图:


然后就可以下载到本地,用本地jdk里自带的jvisualvm来解析文件。
在用本地的jvisualvm解析之前,先双击打开jvisualvm.exe,然后点击【工具】,选择【插件】,安装所需插件,如下图:

然后在可用插件里找到Visual GC插件,进行安装,如下图(这里我事先已经安装好了):

安装完后,重新打开jvisualvm.exe,然后点击左上角的【文件】,选择【装入】,装入刚才下载到本地的dump文件,这里的装入类型选择【堆 Dump】类型,如下图所示:

2 Linux服务器下JVM堆栈信息dump及问题排查

2.1 dump 方法栈信息

jstack $pid > /home/$pid/jstack.txt

2.2 dump jvm内存使用情况

jmap -heap $pid > /home/$pid/jmapheap.txt

2.3 dump jvm二进制的内存详细使用情况

(效果同在Tomcat的catalina.sh中添加 set JAVA_OPTS=%JAVA_OPTS% -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/heapdump 此文件需要借用内存分析工具如:Memory Analyzer (MAT)来分析)

jmap -dump:format=b,file=/home/$pid/jmapdump.txt $pid