jdk 命令行工具: jps, jstat, jmap

jps 命令(JavaVirtualMachineProcessStatusTool)

jstat 命令(jvm Statistics Monitor Tool)

jstack 命令(jvm stack trace)

jmap 命令(jvm Memory Map)

统计指定进程的GC收集情况

jstat -gcutil 14063 2000 10

命令详解:

14063 : 进程ID

2000:收集周期

10:收集次数

img

S0 :幸存区0 使用比例,百分比

S1 :幸存区1使用比例,百分比

E :eden区使用比例,百分比

O :Old区使用比例,百分比

P :持久代 (老版本JVM)使用比例,百分比

M :元数据区(新版本JVM)使用比例,百分比

YGC(单位.次):年轻代垃圾回收总次数。从启动到现在。

YGCT(单位.秒):年轻代垃圾回收总耗时。从启动到现在。

FGC:老年代垃圾回收总次数。从启动到现在。

FGCT(单位.秒):老年代垃圾回收总耗时。从启动到现在。

GCT(单位.秒):垃圾回收总耗时

延伸阅读:jstat命令使用(有这一篇就够了)https://blog.csdn.net/li396864285/article/details/94380718

排查JVM 内CPU使用过高线程

top 查看CPU使用率最高进程:top

jstack 打印jvm线程栈:jstack 8424 > /tmp/jstack.txt

top -H 找到进程内线程CPU使用率排名:top -H -p8424

将CPU使用率高的线程PID转换为十六进制:printf "%x\n” 14065 输出得到:36f1

在线程栈文件内查找线程栈详情 grep -C 20 “36f1” /tmp/jstack.txt

延伸阅读:https://my.oschina.net/liangxiao/blog/1523467

其他

jdk 提供的内存监控工具: jConsole, jVisualVM

eclipse 提供的内存分析工具: mat

google 的监控堆外内存工具: gperftools

性能压测工具: jmeter

查看进程内存: smaps, pmap, gdb

sun 推出的针对 java 的动态追踪工具: btrace