性能测试(四)-JVM监控
JVM监控
1、JVM概述
凡是使用java语言编写的,大概率会出现内存泄漏等问题,也都会使用JVM监控。
Jvisualvm也是jdk自带的可视化的JVM监控工具,支持本地和远程服务。
2-1、本地操作启动步骤为:
step1:在控台里启动java包:java -jar [以.jar为后缀的文件]
step2:在重新打开一个控制台,输入:Jvisualvm,就会出现如下图的界面:
step3:启动后,选择对应的 .jar包,选择”监视“即可,主界面如下图所示:
练习:以登录为例:在Jmeter里对该网址发送请求的同时监控
😀当线程数:2000 Ramp-up:200 每秒并发:10个用户
假设查看9:55:58时间点的变化情况:
a、查看电脑任务管理器:
b、查看JVM监控:
此时,堆的使用率也呈现一个升高的趋势:
😀当线程数:2000 Ramp-up:20 每秒并发数:100个用户
假设查看10:03:53时间点的变化情况:
a、查看电脑任务管理器:
b、查看JVM监控:
此时的堆的使用率也呈现一个升高的趋势:
🎈结论:当总线程数不变时,随着每秒的并发用户数增加,电脑任务管理的CPU会大体上呈现上升的趋势,监控器的CPU使用情况和堆的大小也是呈上升。
2-2、设置Java程序内存大小
给指定程序设置内存大小命令为:
java -jar -Xms1M -Xmx1M -XX:MaxMetaspaceSize=10m DBPlus-0.0.1-SNAPSHOT.jar
这里的内存泄漏模拟,需要根据自身计算机的内存进行相应的配置大小。
假设分配的内存是:
java -jar -Xms10M -Xmx10M -XX:MaxMetaspaceSize=12m DBPlus-0.0.1-SNAPSHOT.jar
如下图所示,出现了内存泄漏OOM:
内存分配练习:在Jmeter里设置线程数:2000 Ramp-Up:10
设置为如下:java -jar -Xms30M -Xmx30M -XX:MaxMetaspaceSize=50m DBPlus-0.0.1-SNAPSHOT.jar
![](https://img2022.cnblogs.com/blog/2899543/202208/2899543-20220819155833125-79750027.png)
在Jmeter里运行的同时打开JVM,根据-Xms30M -Xmx30M ,会发现在堆里的设置的上限值确实是30M:
在Jmeter里运行的同时打开JVM,根据-XX:MaxMetaspaceSize=50m ,会发现Metaspace里的设置的上限值确实是50M:
2-3、远程操作启动步骤为:
监控远程信息,启动命令为:
java -Djava.rmi.server.hostname=101.43.158.84 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar -Xms8m -Xmx512m -XX:PermSize=512M -XX:MaxPermSize=1G DBPlus-0.0.1-SNAPSHOT.jar
其中:hostname=101.43.158.84是远程服务IP地址
查询端口号:lsof -i | grep 服务名
会发现端口号:42340和37852
step1:通过控制台,输入:Jvisualvm命令,打开JVM监控器
step2:在远程右击选择”添加远程主机“:
step3:将运维人员给的远程IP地址,填写到下图:
step4:在刚刚新建的远程IP地址上右击,选择”添加JMX连接“:
step5:将运维人员给的远程端口号,填写到下图:
step6:此时界面如下图所示:
step7:点击监视,就可以看到下图:
练习:当多人在同一时间段内同时向服务器发送请求:线程数:2000 Tamp-Up:40时:
远程监视某一段时间情况如下:
远程监视的最后一段时间,可以看出内存已经很接近分配的内存大小了: