diff --git a/JFR参数详解.md b/初识JFR.md similarity index 71% rename from JFR参数详解.md rename to 初识JFR.md index 9e1a047..c6223fd 100644 --- a/JFR参数详解.md +++ b/初识JFR.md @@ -74,4 +74,33 @@ Event 是多线程产生的,如果 Event 记录要保证全局有序,那么 ⚠️数据在从 Thread Buffer 刷入 Global Bufeer 的时候, 去 dump JFR 的数据,可能这部分数据会被忽略而导致看不到。 -⚠️从 Global Buffer 刷入磁盘不够快的时候,这时候要刷入磁盘的数据可能被丢弃。此时会记录下 Data Loss Event 包含了哪块时间的数据丢了,通过 JFR 日志也能看到这个信息。 \ No newline at end of file +⚠️从 Global Buffer 刷入磁盘不够快的时候,这时候要刷入磁盘的数据可能被丢弃。此时会记录下 Data Loss Event 包含了哪块时间的数据丢了,通过 JFR 日志也能看到这个信息。 + +### 开启JFR +有2种方式开启,通过启动参数在启动的时候开启、jcmd在运行时启用/关闭。 + +#### 启动参数 + +在JDK11以后,启动参数简化了。 + +- 启动JFR记录的参数:`-XX:StartFlightRecording` +- 用于配置JFR的参数:`-XX:FlightRecorderOptions` + +*JDK8中的`-XX:+FlightRecorder`状态位不再需要了* + +#### StartFlightRecording + +|配置项|默认值|说明| +|:-----|:------|:-----| +|delay|0|延迟多久后启动 JFR 记录,支持带单位,例如:delay=60s、delay=20m、delay=1h、 delay=1d| +|disk |true|是否写入磁盘,控制 global buffer 满了之后,是丢弃还是写入磁盘| +|dumponexit |false |程序退出时,是否要dump出 .jfr文件| +|duration | 0 | JFR 记录持续时间,支持单位配置,0代表一直记录| +|filename |- | dump的输出文件,例如:启动目录/hotspot-pid-26732-id-1-2020_03_12_10_07_22.jfr,pid是进程id,id后面的1代表第1个jfr文件| +|name | - | 由于可以启动多个 JFR 记录,这个名称用于区分,否则只能看到一个记录 id,不好区分| +|maxage | 0 | disk=true生效,global buffer 刷入的文件保留时间,支持单位配置,0代表一直保存| +|maxsize | - | disk=true生效,global buffer 刷入的文件最大值,支持单位配置(MB、GB)例如:250MB,这个配置不能小于**maxchunksize**参数| +|path-to-gc-roots| false | 是否记录GC根节点到活动对象的路径,一般不打开这个,性能损耗比较大,会导致FullGC。一般是在怀疑有内存泄漏、通过对象堆栈无法定位的时候动态打开。例如 ThreadLocal 没有释放这样的,可以在 dump 的时候采集 gc roots| +|settings | default.jfc| 采集 Event 的详细配置,可选值:default.jfc、profile.jfc| + +#### FlightRecorderOptions