目录
堆太大?
堆内存分析工具
MAT
JProfiler
ZProfiler - 线上的mat - 已进化为Grace
EagleEye-MProf - 命令行
jhat
jvisual
问题
w使用JProfiler和MAT打开内存超大的hprof文件时报错的解决方案_hprof太大_CoderBruis的博客-CSDN博客 很简单,把jvm参数调整下,设置小一点, 复现下.
命令行
线程池排查
jstack
jmap -dump
jmap -heap
jstat
堆太大?
方法1: 重新设置堆后,重启,复现.
方法2: 切割
split -b 1M heap.bin smallfile
scp smallfile* username@mac-host:/Users/username/
cat smallfile* > heap.bin
堆内存分析工具
MAT
eclipse官方推出的本地内存分析工具,运行需要大量内存,从使用角度来讲,并不方便。我现在已经很少使用。
JProfiler
用jprofiler来分析内存泄露,fullgc from fei33423
ZProfiler - 线上的mat - 已进化为Grace
阿里中间件出品的在线堆内存分析工具,链接是:http://zprofiler.alibaba-inc.com,不需要拷贝镜像文件,直接在线分析。
Grace 是一款开源用于解决应用程序中出现的常见问题的软件,其开源版本为Jifa,前身为Zprofiler。
阿里巴巴加入 Eclipse 基金会,开源一站式 Java 应用诊断平台 -- Eclipse Jifa-阿里云开发者社区
EagleEye-MProf - 命令行
也是阿里中间件团队推出的,适用于复杂云环境的轻量级java堆内存分析工具,非常好用。在公共云或者专有云的机器上,运行的是客户的机器。由于权限或者网络的关系,我们很难去执行jmap进行heap dump,或者scp上传dump文件。这个工具可以直接在ECS上分析,而不用下载dump文件。
jhat
jht -port 8031 heap.bin
使用jhat分析jmap生成的dump转储快照_jmap 导出某个线程_一点光辉的博客-CSDN博客
jvisual
jdk使用自带工具查看.hprof文件_jdk 查看hprof_fxwwq1823tcd9的博客-CSDN博客
which java
然后进入导目录,找到jvisual 打开
问题
w使用JProfiler和MAT打开内存超大的hprof文件时报错的解决方案_hprof太大_CoderBruis的博客-CSDN博客 很简单,把jvm参数调整下,设置小一点, 复现下.
命令行
jmap , jstack ,jstat
线程池排查
Linux下查看消耗CPU的线程 占用 100% java jvm 堆栈_linux查看栈使用率_个人渣记录仅为自己搜索用的博客-CSDN博客
jstack
jmap -dump
jmap -dump:format=b,file=heap.bin 1234
oom自动堆保存 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=c:\test.hprof
分析 Heap Dump 的工具都可以获取 Heap Dump 文件。
比如:jdk 自带的工具 jvisualvm。
其它工具:Eclipse memory analyzer(jmat)、JProfiler 等。
jhat 分析 使用jhat分析jmap生成的dump转储快照_jmap 导出某个线程_一点光辉的博客-CSDN博客
jmap -heap
$ jmap -heap 108920
$ jmap -heap 108920
Attaching to process ID 108920, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.242-b716
using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 3984588800 (3800.0MB)
NewSize = 1572864000 (1500.0MB)
MaxNewSize = 1572864000 (1500.0MB)
OldSize = 2411724800 (2300.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 536870912 (512.0MB)
CompressedClassSpaceSize = 528482304 (504.0MB)
MaxMetaspaceSize = 536870912 (512.0MB)
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 1415577600 (1350.0MB)
used = 1320560416 (1259.3845520019531MB)
free = 95017184 (90.61544799804688MB)
93.28774459273727% used
Eden Space:
capacity = 1258291200 (1200.0MB)
used = 1258291200 (1200.0MB)
free = 0 (0.0MB)
100.0% used
From Space:
capacity = 157286400 (150.0MB)
used = 62269216 (59.384552001953125MB)
free = 95017184 (90.61544799804688MB)
39.589701334635414% used
To Space:
capacity = 157286400 (150.0MB)
used = 0 (0.0MB)
free = 157286400 (150.0MB)
0.0% used
concurrent mark-sweep generation:
capacity = 2411724800 (2300.0MB)
used = 2411723936 (2299.9991760253906MB)
free = 864 (8.23974609375E-4MB)
99.99996417501698% used
88407 interned Strings occupying 10045576 bytes.
jstat
jstat -gcold
命令可以用来查看 JVM 老年代的使用情况。jstat -gcold
命令输出的每个字段的含义如下:
S0C
:Survivor 区 0 当前使用容量(KB)。S1C
:Survivor 区 1 当前使用容量(KB)。S0U
:Survivor 区 0 使用后的容量(KB)。S1U
:Survivor 区 1 使用后的容量(KB)。EC
:Eden 区当前使用容量(KB)。EU
:Eden 区使用后的容量(KB)。OC
:老年代当前使用容量(KB)。OU
:老年代使用后的容量(KB)。PC
:永久代当前使用容量(KB)。PU
:永久代使用后的容量(KB)。YGC
:从应用程序启动到采样时发生的 Young GC 次数。YGCT
:从应用程序启动到采样时 Young GC 所用的时间(秒)。FGC
:从应用程序启动到采样时发生的 Full GC 次数。FGCT
:从应用程序启动到采样时 Full GC 所用的时间(秒)。GCT
:从应用程序启动到采样时所有 GC 所用的时间(秒)。
其中,S0C、S1C、EC 和 OC 分别表示 Survivor 区、Eden 区和老年代的当前使用容量,S0U、S1U、EU 和 OU 分别表示 Survivor 区、Eden 区和老年代使用后的容量,YGC 和 FGC 分别表示 Young GC 和 Full GC 的次数,YGCT 和 FGCT 分别表示 Young GC 和 Full GC 所用的时间,GCT 表示所有 GC 所用的时间。