JVM常用命令

1 jps

jps -ml

2 jstack

top -Hp 31951 # 以线程模式查看进程的所有线程情况

printf '%x' 31998 # 值为7cfe 打印某个线程的16进制

jstack 31951 | grep 7cfe -A 20

jstack -l pid

3 jstat

jstat -gc PID

GCT 6.964
FGCT 0.000
FGC 0
YGCT 6.964
YGC 364
CCSU 16223.4
CCSC 17152.0
MU 147422.0
MC 152576.0
OU 435654.0
OC 1677312.0
EU 430988.7
EC 838912.0
S1U 0.0
S0U 3113.9
S1C 104832.0
S0C 104832.0

4 如何查看新生代对象增长的速度

jstat -gc 436 1000 10 每秒一次,共10次
根据young gc的时间去做统一,看每次young gc时老年代的内存占用情况

5 jmap

jmap -heap PID 没啥用,不如jstat
jmap -histo PID

jmap -dump:live,format=b,file=dump.hprof PID
jhat dump.hprof -port 7000

6 预估性优化

  • 尽量让每次YoungGC后的存活对象小于Survivor空间的50%,都留存在年轻代里面
  • 尽量不让对象进入老年代
  • 尽量降低FullGC频率,避免FullGC对JVM性能的影响
上一篇:JAVA线上问题排查命令


下一篇:java内存溢出(OutOfMemoryError)问题排查