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性能的影响