jdk自带压测工具_必须要会的JVM性能监测工具(JVisualVM)

本文介绍了如何使用JDK自带的JVisualVM工具进行性能监测和压测。通过配置服务器参数开启远程监测端口,利用JVisualVM进行CPU、内存、线程状态和热点函数的图形化分析。虽然JVisualVM具有一定的局限性,如采样精度和RMI协议传输数据,但作为一款功能强大的性能分析工具,它足以应对多数项目需求。

5e26ca4f63f11435d4e52a167a0b5acf.png

一、前言

我所在微服务有一个OCR功能快上线,但是压测的时候测试说CPU占用率太高了,喊我改代码。所以简单学了下性能监测工具的使用。

稍微有点经验的开发都应该知道linux下监控性能的命令非常多,常见的举例:

top
# 按住 shift + M 可按内存大小排序
# 按住 shift + P 可按CPU占用率大小排序

b22701748d189805f147650bb09c8fe0.png

如果想要查看某个进程的具体线程的状态,则使用

top -Hp 8091
# 8091是pid号
# -H 是线程模式的意思
# -p 指定pid

30352cf6cf77680582f4cf81ba31193e.png

即可查看8091进程下所有线程的资源使用情况。因为信息是过眼云烟,没有进行可视化,所以可以使用JVisualVM工具进行更图形化的分析。

二、JVisualVM

  1. 服务器配置

服务器启动java进程时配置

-Djava.rmi.server.hostname=0.1.2.3
-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

其中,0.1.2.3代表本机ip,1099代表开启的用于远程监听的本地端口号,authenticate=false代表不认证,ssl=false代表不适用ssl。

启动举例:

java 
-Djava.rmi.server.hostname=0.1.2.3 -Dcom.sun.management.jmxremote  
-Dcom.sun.management.jmxremote.port=1099 
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-jar 
xxxxx.jar

这样就在服务器开启了1099不认证端口,用于性能检测使用。

2. JVisualVM

JVisualVM是JDK自带的性能检测工具,路径在%JAVA_HOME%/bin下面。双击打开,

添加远程主机:

129db719f6bee7d20623d05e410dd981.png
添加远程主机

2bc84a5b826088429955305491ed6ca9.png

打开JMX连接:

c4e89dab68e2709917c18c22be704055.png

489ac2100e355115f5516fce601f54d0.png

点击进行监测数据:

2f8cb1c3b8e040aebd7254e88109e893.png

a1d7a23b53b599f0ca13fd12789cb02e.png

图中可以看到cpu占用率,内存使用情况,线程数等等,

三、线程监视

50cc06cc18f26b26072de08022302b20.png

点击线程即可当前进程所有的线程,右下角根据不同的颜色可以区分线程的不同状态,但是个人认为驻留和监视这两个颜色太像了,没办法区分,没找到换颜色的地方。

四、热点函数分析

点击抽样器,点击cpu可对cpu抽样,但是我不太理解自用时间和自用时间(CPU)这两个有什么区别,是不是自用时间是总共花费时间(包含当前线程运行、阻塞等状态),而自用时间(CPU)是线程在运行态的时间。求评论大佬解答。

3f2508acda5043ad19d223615cddfcd4.png

五、总结

JVisualVM功能非常强大,可以对堆内存进行dump、快照以及性能可视化分析,也可以安装插件对堆外内存进行分析(我用Buffer Pool),如果项目要求不是特别高,这一款工具已经足够强大加易用。但是也有缺点,据我所知,这些数据是通过RMI协议进行传输,而且监视那一栏采样时间是2S,可能采样精度不够高。

有各种看法,欢迎在评论区和我讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值