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