更新 JFR_1_查看JFR事件的工具JMC.md
This commit is contained in:
parent
2247d77af4
commit
91868846e8
@ -14,4 +14,22 @@
|
||||
|
||||
### 使用方式
|
||||
|
||||
先 dump 一份jfr记录文件,<a href='./JFR_0_初识Java%20Flight%20Record.md' target='_blank'>上一篇文章</a>有介绍具体的操作方法,建议利用 begin 还有 end 参数截取你感兴趣的时间段,控制一下jfr文件的大小。然后再回到jmc里通过【文件】/【打开文件】/【选择dump的jfr文件】打开。由于jfr文件里的数据要导入内存,然后生成索引和报表,实际内存占用大概是原始文件的4~6倍左右。如果你的系统内存不足,JMC会提示你只截取一部分查看。
|
||||
先 dump 一份jfr记录文件,<a href='./JFR_0_初识Java%20Flight%20Record.md' target='_blank'>上一篇文章</a>有介绍具体的操作方法,建议利用 begin 还有 end 参数截取你感兴趣的时间段,控制一下jfr文件的大小。然后再回到jmc里通过【文件】/【打开文件】/【选择dump的jfr文件】打开。由于jfr文件里的数据要导入内存,然后生成索引和报表,实际内存占用大概是原始文件的4~6倍左右。如果你的系统内存不足,JMC会提示你只截取一部分查看。
|
||||
|
||||
### JVM调优简单示例
|
||||
|
||||
线上某个实例,dump出了 jfr 文件。下载到本地,按照持续时间倒序查看 GC Event:
|
||||
|
||||
<img width='80%' src='https://picx.zhimg.com/v2-85908b178dbd3adc1a420ddc4f43683f_1440w.jpg'>
|
||||
|
||||
有一些耗时比较高的**GC 事件(Old GC)**原因是**G1 Humongous Allocation**。
|
||||
|
||||
在G1中**大于 region 50%**的对象视为大对象,频繁分配大对象会导致性能问题。如果 region 里面包含大量的大型对象,则该 region 中**最后一个具有巨型对象的区域**与**区域末端之间的空间**将不会使用,导致堆内存空间碎片化。调整的方法一般是**修改 region 的大小 > 这类大对象的 2 倍以上**。那么这个大对象有多大呢?我们可以通过*Old Object Sample*来查看老对象采样,一般随着你的程序运行时间增长,这个采集会更加准确地命中到你最关注的对象。
|
||||
|
||||
<img width='80%' src='https://pica.zhimg.com/v2-19dc5e1d4e9fd1f249f736c7aed0e94a_r.jpg'>
|
||||
|
||||
注意 **heap used 是当前所有对象占用的内存大小**。这个对象大小,可以通过数组大小计算而出,这里最大就是 3.31 * 10^6 字节。我们再来看一下当前*G1HeapRegionSize*的配置,通过查看*Unsiged Long Flag Event*
|
||||
|
||||
<img width='80%' src='https://pic3.zhimg.com/v2-be449976acc125243d2b57f1946365cc_r.jpg'>
|
||||
|
||||
发现大小是:4.19 * 10^6 字节,不足最大对象的两倍。所以我们需要将*G1HeapRegionSize*至少调整到 6.62 * 10^6 字节,调整之后,不再出现 G1 Old GC。
|
Loading…
Reference in New Issue
Block a user