目录
1、堆诊断
step 1: 查询pid
命令: jps -lmv | grep homework
step 2: 观察实时堆使用
命令:
jmap -heap {JVM进程号}
2、GC日志诊断
2.1 在线实时诊断
step 1: 查询pid
jps -lmv | grep homework
step 2: 观察实时gc情况(因为没有gc日志)
jstat -gc -h10 {进程号} 200ms 10 > temp_gc.txt
sed -i 's/S0C/S0容量(KB)/g' temp_gc.txt
sed -i 's/S1C/S1容量(KB) /g' temp_gc.txt
sed -i 's/S0U/S0使用(KB) /g' temp_gc.txt
sed -i 's/S1U/S1使用(KB) /g' temp_gc.txt
sed -i 's/EC/Eden使用(KB) /g' temp_gc.txt
sed -i 's/EU/Eden容量(KB)/g' temp_gc.txt
sed -i 's/OC/Old容量(KB)/g' temp_gc.txt
sed -i 's/OU/Old使用(KB)/g' temp_gc.txt
sed -i 's/MC/Metaspace容量(KB) /g' temp_gc.txt
sed -i 's/MU/Metaspace使用(KB)/g' temp_gc.txt
sed -i 's/YGC/YoungGC次数/g' temp_gc.txt
sed -i 's/YGCT/FullGC耗时/g' temp_gc.txt
sed -i 's/FGC/FullGC次数/g' temp_gc.txt
sed -i 's/FGCT/YoungGC耗时/g' temp_gc.txt
sed -i 's/GCT/总GC耗时/g' temp_gc.txt
cat temp_gc.txt
2.2 离线诊断
Step 1: jvm配置gc日志输出(示例JDK1.8)
-Xloggc:logs/gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps
Step 2:选择合理的工具分析gc.log日志文件
人工读取文本文件: 人肉
在线分析-GCEasy(推荐使用):https://www.gceasy.io/
GCViewer工具 :GCViewer没有GCEasy好用
GCPlot:更不好用