一、前言
- 开发 Java 我的项目过程中,难免会碰到一些 性能 问题,这时候就须要一些工具,帮忙排查
- 本文次要介绍 JDK 自带的上古神器 jstat、jmap,用于剖析内存问题,另简略介绍 MAT、gceasy、HeapDump 等
- 以 openjdk 11.0.13、G1 垃圾收集器、Linux 零碎 为例
二、GC 剖析:jstat
1. jstat 简介
- jstat 全称“Java Virtual Machine statistics monitoring tool”,位于 JDK 的 bin 目录下,用于对 Java 程序的资源和性能进行监控,包含 Heap size、垃圾回收情况 等。
- jstat –help:查看命令帮忙
- jstat -options:返回有哪些命令选项,如 -gcutil、-gc、-gccapacity、-gccause,另有 -class、-compiler、-printcompilation 等
jstat 上一步输入的命令选项 [-t] [- h 每几行输入题目行] 过程号 [继续输入距离时长 [ 输入次数]]
- 继续输入距离时长 默认毫秒,数字前面加
s
单位改为秒,-t
示意每行结尾输入 绝对利用启动工夫的 Timestamp 工夫戳
2. jstat -gcutil
- 常用命令格局:jstat -gcutil 过程号 继续输入距离毫秒数,下图每隔 1000 毫秒输入一次
- 前 6 列 输入各个内存区域应用百分比 (没有容量大小),顺次是 幸存区 survivor0、1、新生代 Eden、老年代 Old、元数据 Metaspace、Compressed class space
- GC 结尾的列 示意 GC 次数,GCT 结尾的 示意 GC 耗时,顺次是 Young GC 次数和耗时、Full GC、Compressed class space GC,最初一列 GCT 是 Total 总 GC 耗时
- 2 次相邻的 GC,能够疾速判断那一次 GC 的耗时;GCT / GC = 均匀每次 GC 耗时
- GC 是否频繁规范参考:Young GC 执行迅速 (50 毫秒以内)、Young GC 执行不频繁 (距离 10 秒左右一次)、Full GC 执行迅速 (1 秒以内)、Full GC 执行不频繁 (距离 10 分钟左右一次)
3. jstat -gc
- 列出 各区域的容量 Capacity、应用大小 Utilization,单位是 KB, 有容量大小,没有百分比
- YGC 开始,是各区域 GC 次数、耗时
4. jstat -gccapacity
- 次要关注 各区域 最小 (Min,MN 结尾)、最大 (Max,MX 结尾)、以后 (Capacity,C 结尾) 容量 capacity
- 最初 3 列 YGC、FGC、CGC 别离是 Young、Full、Compressed class space 区域 GC 次数
- NGCMN 是 新生代最小容量 new generation capacity min
- 各个分区的容量,单位是 KB
三、内存剖析:jmap
1. jmap 简介
jmap 能够 疾速剖析简略的内存占用,生成 dump 文件 便于后续剖析
2. jmap -histo
- 疾速检测显著的内存问题 (看不出来问题,能够下一步 jmap -dump)
- 命令格局:jmap -histo 过程号, 倡议前面加
| head - 行数
,不然就等着刷屏吧
3. jmap -dump
- 生成的文件,用于深层次剖析内存问题
- 命令格局:
jmap -dump:format=b,file=heap.bin <pid>
- GC 当前再 dump,能够确定是不是还没有触发 GC,内存占用才高,格局是在
-dump:
前面减少live,
- dump 文件如果在服务器,倡议压缩当前在传输,如下图 文件大小升高 70%
- 如果是在近程容器外面,下载到本地可能报错,压缩 + 重试 大概率能解决
四、其余内存剖析工具
1. MAT:收费经典的 dump 剖析工具
- MAT 全称 Eclipse Memory Analysis Tools,是一个剖析 Java 堆数据的业余工具,能够计算出内存中对象的实例数量、占用空间大小、援用关系等,看看是谁阻止了垃圾收集器的回收工作,从而定位内存透露的起因。
-
倡议配置略大于 dump 文件大小的内存,否则可能报错,编辑 MemoryAnalyzer.ini 增加 -vmargs – Xmx4g
2. gceasy.io:国外的在线剖析工具
3. HeapDump 社区
阿里大神守业的产品,除了工具,还有不少性能方面的案例
五、总结
- jstat 能够看到 容量、使用量、最小最大容量、使用率、GC 耗时、GC 是否频繁
- jmap 能够 疾速剖析简略的内存占用,生成 dump 文件 便于后续剖析
- 另列举了 MAT、gceasy.io、HeapDump 社区 等,鉴于篇幅起因,临时不细说了
本文恪守【CC BY-NC】协定,转载请保留原文出处及本版权申明,否则将查究法律责任。
本文首先公布于 https://www.890808.xyz/,其余平台须要审核更新慢一些。