JVM性能分析与故障排查
原创
©著作权归作者所有:来自51CTO博客作者黑衣侠客的原创作品,请联系作者获取转载授权,否则将追究法律责任
JVM调优
程序在上线前的测试或运行中有时会出现一些大大小小的JVM问题,比如cpu load过高、请求延迟、tps降低等,甚至出现内存泄漏(每次垃圾收集使用的时间越来越长,垃圾收集频率越来越高,每次垃圾收集清理掉的垃圾数据越来越低)、内存溢出导致系统奔溃,因此需要对JVM进行调优,使得程序在正常运行的前提下,获得更高的用户体验和运行效率。
故障排查
在java应用中,系统内存通常会被分为几块不同的空间,了解这些不同内存区域的作用有助于更好的编写Java应用,构建更加稳定的系统。而堆空间更是Java内存中最为重要的区域,几乎所有的应用程序对象都在堆中分配,当系统出现故障时,具备Java堆的内存分析能力,也可以更加方便地诊断系统的故障。
常用分析工具
查看Java进程
jps jcmd 或linux 系统命令ps -ef|grep java
查看进程详细信息 jinfo pid
查看启动参数 jinfo -flag pid
查看指定参数值 jinfo -flag InitialHeapSize pid
查看系统属性 jinfo -sysprops pid
查看进程GC情况
查看进程pid的情况 jstat -gc pid
每5秒输出一次 jstat -gc pid 5000
每5秒输出一次,输出3次 jstat -gc pid 5000 3
最近一次gc原因 jstat -fccause pid
查看gc容量 jstat -gccapacity pid
查看内存堆使用情况
堆内存区域使用情况 jmap -heap 23335
转存堆文件 jmap -dump:format=b,file=heapdump.hprof pid