JVM实战-常用工具

**工欲善其事必先利其器!!!**

1)jconsole

jconsole工具是JDK自带的可视化监控工具。

查看java应用程序的运行概况、监控堆信息、永久区使用情况、类加载情况等。

# 启用jconsole,在命令行中输入
jconsole

2)jvisualvm

可以在[工具 - 插件 - 可用插件]中选择Visual GC插件来查看堆内存的运行情况。

监控本地JVM进程

在这里插入图片描述

监控远程JVM进程

可添加JMX连接,不过需要远程应用开启JMX功能。

  • 添加JMX启动参数
-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.port=8998 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.access.file=/usr/local/jdk/conf/jmxremote.access -Dcom.sun.management.jmxremote.password.file=/usr/local/jdk/conf/jmxremote.password
  • 在 /usr/local/jdk/conf 中添加两个文件jmxremote.accessjmxremote.password

可指定绝对路径,也可指定相对路径。

1)jmxremote.access 访问权限文件

guest readonly
manager readwrite

2)jmxremote.password 账号文件

guest guest
manager manager

3)文件授权

# 文件授权
chmod 600 *jmxremote*

4)监听端口

# 得到PID
lsof -i:8998
# 查看8998监听情况
netstat -antup | grep PID

3)Arthas

Arthas 是Alibaba开源的Java诊断工具,采用命令行交互模式,是排查jvm相关问题的利器。

官网:https://github.com/alibaba/arthas

4)MAT

下载地址 https://www.eclipse.org/mat/downloads.php

大 dump 文件处理

重要:dump文件太大的情况,在大内存机器上运行 ,修改运行内存大小

打开文件 MemoryAnalyzer.ini

修改
-Xmx20g
-Xms20g

Histogram

列出内存中的对象,对象的个数及其大小。

Class Name:类名称,java类名
Objects:类的对象的数量,这个对象被创建了多少个
Shallow Heap:一个对象内存的消耗大小,不包含对其他对象的引用
Retained Heap:是shallow Heap的总和,即该对象被GC之后所能回收到内存的总和

Leak Suspects

查找并分析内存泄漏的可能原因。

Reports—>Leak Suspects—>Details

Top Consumers

列出大对象。

Leak Identification -->Top Consumers

MAT启用异常处理

---------------------------
MemoryAnalyzer
---------------------------
Java was started but returned exit code=13
... ...

**方案:**修改 MemoryAnalyzer.ini 文件

1、配置javaw.exe路径 -vm /usr/local/jdk/bin/javaw.exe

2、配置日志路径 -data /logs/mat

-vm
D:\software\java\jdk1.8.0_172\bin\javaw.exe
-startup
plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar
-data
E:\temp\logs\mat
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.700.v20180518-1200
-vmargs
-Xmx1024m

【重点】MAT具体分析步骤

1、打开Histogram窗口
2、根据列Retained Heap降序排序,找到占用Heap最大的几个类记录
3、右击类名-->List Objects-->with incoming references-->列出该类的实例
比如模拟数组内存溢出,可找到数组元素为ArrayList,也可找到ArrayList在具体类中的变量名称,这样定位到代码。
4、选中占用空间最大的对象,如果是数组,可从左侧Attributes面板中可看到元素列表,特别关注元素是否是业务类。
5、展开占用空间最大的对象,可看到该对象(或其下的元素)所属Class,特别关注所属Class是否是业务类。
6、右击对象-->Merge Shortest Paths to GC Roots-->exclude all phantom/weak/soft etc.refrences
7、找到GCRoot以及原因
比如模拟数组内存溢出,可找到数据里面的元素对象,然后可定位到具体的类,在结合代码来分析具体是哪个点导致了OOM。

在这里插入图片描述

在这里插入图片描述

5)GC 日志分析工具

可通过工具来分析GC日志,包含指标:吞吐量及GC暂停平均时间、最大时间、各个时间段的比例、GC发生的原因、次数、时间等。

主要关注吞吐量和停顿时间。

1、在线工具

官网: http://gceasy.io

关键指标

在这里插入图片描述

GC收集统计

在这里插入图片描述

GC原因

在这里插入图片描述

2、GCViewer

官方地址:包含各项指标的解释

https://github.com/chewiebug/GCViewer

# 通过工具来分析GC日志
java -jar gcviewer-1.36-SNAPSHOT.jar

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
JVM常用监控工具有很多,其中一个重要的工具就是dump分析工具。dump文件是指Java进程的内存快照,可以用于分析Java进程的内存使用情况,了解Java进程内部的情况。 下面介绍几个常用的dump分析工具: 1. jmap jmap是JDK自带的一个命令行工具,可以生成Java进程的内存快照。使用jmap生成dump文件的命令如下: ``` jmap -dump:format=b,file=<filename> <pid> ``` 其中,format=b表示生成二进制格式的dump文件,file=<filename>表示指定保存dump文件的路径和文件名,<pid>表示Java进程的进程ID。 2. jstack jstack也是JDK自带的一个命令行工具,可以打印Java进程的线程堆栈信息。使用jstack生成dump文件的命令如下: ``` jstack -F <pid> > <filename> ``` 其中,-F表示在进程不响应时强制获取线程堆栈信息,<pid>表示Java进程的进程ID,> <filename>表示将线程堆栈信息输出到指定文件。 3. VisualVM VisualVM是一个功能强大的Java监控和分析工具,可以监控和分析本地和远程Java进程。VisualVM可以生成Java进程的各种信息,包括dump文件。使用VisualVM生成dump文件的步骤如下: - 在VisualVM中打开需要生成dump文件的Java进程。 - 选择“Heap Dump”选项卡,点击“Heap Dump”按钮。 - 选择保存dump文件的路径和文件名,点击“Save”按钮。 4. Eclipse Memory Analyzer Eclipse Memory Analyzer是一款功能强大的Java内存分析工具,可以帮助开发人员分析Java进程的内存使用情况。Eclipse Memory Analyzer可以打开各种格式的dump文件,包括使用jmap、jstack和VisualVM生成的dump文件。 以上是常用的dump分析工具,可以帮助开发人员了解Java进程的内存使用情况。同时,需要注意的是,生成dump文件会对Java进程产生一定的影响,需要谨慎使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白云coy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值