Java深入 - Java虚拟机性能问题监控和排查

时间:2022-12-27 19:26:37

1. jps 查看Java进程ID

$ jps
9788 Jps
7504 Bootstrap
3820 org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar

2. jstat 查看Java状态

查看Java gc状态

$sudo jstat -gc 18963
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
218432.0 218432.0 0.0 3648.1 2184576.0 1130415.9 1572864.0 62074.9 154388.0 103149.4 127 3.047 2 0.623 3.670

S0C:年轻代中第一个survivor(幸存区)的容量 (字节)

S1C:年轻代中第二个survivor(幸存区)的容量 (字节)

S0U :年轻代中第一个survivor(幸存区)目前已使用空间 (字节)

S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)

EC :年轻代中Eden(伊甸园)的容量 (字节)

EU :年轻代中Eden(伊甸园)目前已使用空间 (字节)

OC :Old代的容量 (字节)

OU :Old代目前已使用空间 (字节)

PC:Perm(持久代)的容量 (字节)

PU:Perm(持久代)目前已使用空间 (字节)

YGC  :从应用程序启动到采样时年轻代中gc次数

YGCT :从应用程序启动到采样时年轻代中gc所用时间(s)

FGC :从应用程序启动到采样时old代(全gc)gc次数

FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)

GCT:从应用程序启动到采样时gc用的总时间(s)


查看Java 内存空间使用情况,主要查看交换区、Eden、老生代、常量池的使用百分比

sudo jstat -gcutil 18963
S0 S1 E O P YGC YGCT FGC FGCT GCT
1.45 0.00 86.09 4.00 66.82 168 3.650 2 0.623 4.273

查看加载的class的数量

$sudo jstat -class 18963
Loaded Bytes Unloaded Bytes Time
16850 33388.9 0 0.0 26.21

查看编译的数量

$sudo jstat -compiler 18963
Compiled Failed Invalid Time FailedType FailedMethod
5857 0 0 92.43 0

3. jinfo 打印java进程的配置信息

sudo jinfo 18963

4. jmap 生成虚拟机的内存快照

sudo jmap 18963

5. jstack 显示虚拟机的线程快照

jstack 14298     #查看线程 -F 强制查看
top -p 14292 -H 查看线程占用CPU
sudo jstack -F 4284 | grep -A 10 5017 #查看进程中某一个线程,显示10行