1、top 命令查看 java 进程
top
2、根据进程号找到CPU占用高的线程
top -H -p pid
3、将需要的线程ID转换为16进制格式
printf "%x\n" tid
4、打印线程的堆栈信息
# 把结果输出文件
jstack -l pid > jstack.log
# 把 tid 转成16进制
jstack pid | grep $(printf "%x\n" tid) -A 30
5、垃圾回收
# 要查看一个java进程的垃圾收集器信息,可使用jstat -gc 进程id 每隔多少毫秒 一共输出多少次
jstat -gc 16430 1000 3
# 显示
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
27136.0 28160.0 10035.9 0.0 1296896.0 315562.0 1615872.0 254809.4 173312.0 156322.4 19200.0 16586.9 852 26.639 23 20.432 47.071
27136.0 28160.0 10035.9 0.0 1296896.0 338106.9 1615872.0 254809.4 173312.0 156322.4 19200.0 16586.9 852 26.639 23 20.432 47.071
27136.0 28160.0 10035.9 0.0 1296896.0 343821.8 1615872.0 254809.4 173312.0 156322.4 19200.0 16586.9 852 26.639 23 20.432 47.071
S0C 年轻代中第一个survivor(幸存区)的容量 (字节)
S0U 年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
EC、EU:Eden区容量和使用量
OC、OU:年老代容量和使用量
MC、MU:元空间容量和使用量
YGC、YGT:年轻代GC次数和GC耗时(秒)
FGC、FGCT:Full GC次数和Full GC耗时(秒)
GCT:GC总耗时(秒)