乐趣区

关于java:Java程序性能分析内存

一、前言

  • 开发 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/,其余平台须要审核更新慢一些。

退出移动版