传统的Java诊断工具:
1、jconsole
控制台输入 :jconsole
在jvm启动参数中加入 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimestamps -XX:+PrintGCApplicationStopedTime -Xloggc:文件路径
用法: jconsole [ -interval=n ] [ -notile ] [ -pluginpath <path> ] [ -version ] [ connection ... ]
-interval 将更新间隔设置为 n 秒 (默认值为 4 秒)
-notile 初始不平铺窗口 (对于两个或多个连接)
-pluginpath 指定 jconsole 用于查找插件的路径
-version 输出程序版本
connection = pid || host:port || JMX URL (service:jmx:<协议>://...)
pid 目标进程的进程 ID
host 远程主机名或 IP 地址
port 远程连接的端口号
-J 指定运行 jconsole 的 Java 虚拟机
的输入参数
2、jmap
控制台输入:jmap dump 进程号
示例:
jmap -dump:live,format=b,file=heap.bin 32765
Dumping heap to /home/app/heap.bin ...
Heap dump file created
根据 ps -ef | grep java
查出相应进程号
UID PID PPID C STIME TTY TIME CMD
zzw 14124 13991 0 00:38 pts/0 00:00:00 grep --color=auto dae
强烈推荐,先用jmap导出服务器端的jvm的堆dump文件,然后再用jhat,或者jvisualvm,或者eclipse内存分析器来分析内存状况。
jhat用法:
jhat -J -Xmx512m [file] ,file就是dump文件路径
jmap -dump:live,format=b,file=heap.bin 32765
Dumping heap to /home/app/heap.bin ...
Heap dump file created
jvisualvm用法:
jstat用法:
jstat -gc 进程号 刷新间隔(毫秒)
jstat -gc 32765 10000
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
6144.0 6144.0 721.7 0.0 161280.0 38634.0 349696.0 80956.7 99160.0 95515.4 11392.0 10728.2 3916 31.250 7 1.959 33.208
6144.0 6144.0 721.7 0.0 161280.0 40814.6 349696.0 80956.7 99160.0 95515.4 11392.0 10728.2 3916 31.250 7 1.959 33.208
6144.0 6144.0 721.7 0.0 161280.0 55392.7 349696.0 80956.7 99160.0 95515.4 11392.0 10728.2 3916 31.250 7 1.959 33.208
6144.0 6144.0 721.7 0.0 161280.0 56871.1 349696.0 80956.7 99160.0 95515.4 11392.0 10728.2 3916 31.250 7 1.959 33.208
6144.0 6144.0 721.7 0.0 161280.0 58650.5 349696.0 80956.7 99160.0 95515.4 11392.0 10728.2 3916 31.250 7 1.959 33.208
jstat -gcutil 进程号
jstat -gcutil 32765
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
11.75 0.00 64.75 23.15 96.32 94.17 3916 31.250 7 1.959 33.208
分析GC情况