JFR可以基于命令行和jcmd两种方式进行开启

1.基于JVM启动参数开启JFR

配置方式和jcmd基本上完全一致,区别在于jcmd当中,指定多个参数是使用空格分割的自定义参数,命令行启动参数的方式启动是使用的,分隔多个自定义参数。

参考命令如下:

-XX:StartFlightRecording=name=jfr_profiler,maxage=1d,maxsize=1GB,filename=/home/q/www/default.qunar.com/logs/profiler.jfr,duration=600s,dumponexit=true

2.对比JCMD启动JFR

启动方式

动态性

能否采集启动时数据

对线上性能影响

能否方便排查线上问题

JVM参数

JVM启动时指定

比较大,对一个环境当中的每台机器均生效,会占用机器一些CPU和内存

可以,JFR随时在线上跑着,对于一些特殊的线上问题很方便排查

JCMD

JVM运行时动态开启

不能(JCMD一般在Java应用启动之后才能用)

小,指定机器开启

不一定能抓到问题现场,只能抓一些时机进行分析