java性能调优指令_Java性能调优相关命令摘要

1 查看JVM参数

jps -v

598 xxx.jar -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.login.config=xxxConfig -Djava.security.auth.login.config=xxxx -Dcom.sun.management.jmxremote.ssl=false -Xms10g -Xmx10g -Xloggc:/home/shared/log/gc.log.2018-11-15-14-07 -XX:+PrintGCDateStamps -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:MetaspaceSize=256m -XX:-OmitStackTraceInFastThrow -XX:+PrintGCDetails -verbose:gc

2 查看JVM启动时命令行参数

598 xxx.jar --spring.profiles.active=xxxx

3 快速诊断gc性能

jstat -gc -t pid 1s

Timestamp S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT

2556.3 0.0 57344.0 0.0 57344.0 495616.0 147456.0 9932800.0 4523270.2 120064.0 114879.9 13312.0 12364.5 481 100.840 0 0.000 100.840

2557.4 0.0 57344.0 0.0 57344.0 495616.0 385024.0 9932800.0 4523270.2 120064.0 114879.9 13312.0 12364.5 481 100.840 0 0.000 100.840

2558.4 0.0 53248.0 0.0 53248.0 499712.0 147456.0 9932800.0 4564299.0 120064.0 114879.9 13312.0 12364.5 482 100.932 0 0.000 100.932

第1列Timestamp是进程已经运行的时间(秒)

接下来S0/1C/U这4列分别两个Survivor区容量(Capcity)、已使用量(Usage)。不过我这里用的是G1,所以总有一组是0,另一组是全满,对于G1这个参考意义不大。

还有一个重要数据是OU,表示老年代已使用的时间。可以没隔一段时间执行一次,如果OU的最小值(最小想对于每组之内)一直在增长,那么可能发生了内存泄漏。

4 堆分析利器jmap

jmap有多种运行模式,常用的有

-clstats 打印被加载的类信息

-finalizerinfo 打印所有待finalize的对象

-histo(:live) 统计各个类的数目以及占用内存,带live是只统计存活的。

-dump(:live) 导出Java虚拟机的堆快照,同样live是只存活的。

jmap -dump:live,file=dump.bin PID 导出存活对象供分析

5 线程CPU分析

jstack,可以打印各个线程id以及对应的运行情况,除了RUN和BLOCK外,有的会提示死锁,此时就是有问题的了。

另外结合top -H -p pid可以查看每个线程的CPU占用率,再结合jstack中运行状态,就能大致得知哪里是运行瓶颈(判断死循环很有用)。

转化线程号到16进制

printf '%x\n' 8148

然后用jstack pid查询这个线程。

6 强制gc

jcmd GC.run

上面这些摘录自Oracle研究院郑博士的专栏,感兴趣的话,可以扫码购买。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值