更新 初识JFR.md
This commit is contained in:
parent
276a6f20f3
commit
6e05a47610
41
初识JFR.md
41
初识JFR.md
@ -1,6 +1,8 @@
|
||||
### 出处
|
||||
### 写在前面
|
||||
|
||||
[文章出处](https://zhuanlan.zhihu.com/c_1264859821121355776) [关注大佬](https://www.zhihu.com/people/zhxhash) 我只是对大佬的文章内容做一个笔记,加深记忆和理解。
|
||||
我只是对大佬的文章内容做一个笔记,加深记忆和理解。
|
||||
|
||||
[文章出处](https://zhuanlan.zhihu.com/p/122247741) [关注大佬](https://www.zhihu.com/people/zhxhash)
|
||||
|
||||
### 什么是JFR?
|
||||
JFR是**Java Flight Record**(Java飞行记录)的缩写,是JVM内置的基于事件的监控记录框架。这个起名参考了黑匣子对于飞机的作用,将Java进程比喻成飞机飞行。顾名思义,JFR主要用于问题定位和持续监控。
|
||||
@ -120,3 +122,38 @@ Event 是多线程产生的,如果 Event 记录要保证全局有序,那么
|
||||
|threadbuffersize | 8KB | Thread Buffer 大小,增加会带来更多内存开销,减小会增加刷入 global buffer 的次数,8KB 是一个经验值|
|
||||
|
||||
### 配置项的联系和区别
|
||||
|
||||
#### disk=true
|
||||
|
||||
当 global buffer 满了,写入 repository 配置的目录,这个临时目录是**对用户不可见的**,临时目录地址是-Djava.io.tmpdir指定的,默认为:
|
||||
|
||||
- linux: /tmp
|
||||
- windows: C:\Users\用户名\AppData\Temp
|
||||
|
||||
目录结构的命名格式:时间_pid,例如:
|
||||
|
||||
```
|
||||
--/2020_03_12_08_04_45_10916
|
||||
|----2020_03_12_08_04_45.jfr
|
||||
|----2020_03_12_08_05_12.jfr
|
||||
|----2020_03_12_08_05_55.jfr
|
||||
|----2020_03_12_08_06_08.jfr
|
||||
|----2020_03_12_08_06_08.part
|
||||
```
|
||||
每个.jfr就是一个 Data trunk,最新的文件就是`.part`,每个jfr文件的大小=Data trunk的大小。
|
||||
|
||||
#### dumponexit=true
|
||||
|
||||
程序退出的时候,强制dump一次将数据输出到 filename 配置的文件。用户手动dump也会存储到这个文件,**输出到这个文件目录的.jfr文件才对用户可见。**
|
||||
|
||||
> 输出这个文件是不慢的,就是把内存里的buffer以及临时目录中的.jfr文件合并后输出。⚠️注意不能把内存里的buffer配的过大,否则可能会导致内存不足,引发FullGC。
|
||||
|
||||
### JFR的内存占用?
|
||||
|
||||
- thread buffer:线程数量 * thread buffer 大小(默认8kb)
|
||||
- global buffer:总大小由【memorysize】自动计算得出
|
||||
|
||||
相加就是JFR的总内存占用。
|
||||
|
||||
|
||||
### jcmd 命令启用JFR
|
||||
|
Loading…
Reference in New Issue
Block a user