wangwt123

性能测试(四)-JVM监控

JVM监控

1、JVM概述

凡是使用java语言编写的,大概率会出现内存泄漏等问题,也都会使用JVM监控。

跨平台:适合在各种操作系统上监控

2、Jvisualvm

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

 

在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地址

port=1099是远程服务的端口号

查询端口号:lsof -i | grep 服务名

会发现端口号:42340和37852

step1:通过控制台,输入:Jvisualvm命令,打开JVM监控器

step2:在远程右击选择”添加远程主机“:

step3:将运维人员给的远程IP地址,填写到下图:

step4:在刚刚新建的远程IP地址上右击,选择”添加JMX连接“:

step5:将运维人员给的远程端口号,填写到下图:

step6:此时界面如下图所示:

step7:点击监视,就可以看到下图:

练习:当多人在同一时间段内同时向服务器发送请求:线程数:2000 Tamp-Up:40时:

远程监视某一段时间情况如下:

远程监视的最后一段时间,可以看出内存已经很接近分配的内存大小了:

 

 

posted on 2022-08-19 16:12  DOUBLE快乐  阅读(522)  评论(0编辑  收藏  举报

导航