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应用启动之后才能用)
小,指定机器开启
不一定能抓到问题现场,只能抓一些时机进行分析
评论