我们做压测的时候希望知道服务端 Java 进程的内存和 CPU 情况,JVM 提供了 jconsole、jvisualvm 等工具可以远程连接 Java 进程进行实时监控和数据采集。
由于很多时候环境都在云上,远程连接比较麻烦,这个时候就要考虑通过命令进行采集统计,目前 JVM 提供了 jcmd 命令,可以采集飞行记录数据,采集完成后通过 JMC 工具进行加载。
jcmd 命令运行格式:
$JAVA_HOME/jcmd <pid> JFR.start duration=3600s filename=myrecording.jfr
(注意使用 jcmd 命令,对应的 jvm 程序需要增加启动属性:-XX:+UnlockCommercialFeatures -XX:+FlightRecorder)
指定时间运行完成后拿到 jfr 文件,通过 jmc 工具进行加载:
jcmd 命令具体可以参考官方说明:https://docs.oracle.com/javacomponents/jmc-5-4/jfr-runtime-guide/run.htm#JFRUH177