『动善时』JMeter基础 — 61、使用JMeter监控服务器
固定吞吐量定时器和指定集合点,都是使用JMeter进行性能测试的常用手段,但是通过对测试过程的监控和测试结果的分析,都是在性能测试中值得关注部分。
JMeter也可以监控服务器的性能参数,如:CPU、内存、IO等,不过需要下载一些插件。
本文主要说明如何通过JMeter插件,来监控服务器CPU、内存、磁盘、网络等相关资源。
1、监控插件安装
(1)需要安装的插件
JMeter对服务器的监控,需要如下插件包:
JmeterPlugins-Extras.zip
JmeterPlugins-Standard.zip
ServerAgent-2.2.1.zip
提示:
JMeter插件下载地址:https://jmeter-plugins.org/downloads/old
JmeterPlugins-Extras.zip
和JmeterPlugins-Standard.zip
都可以通过上面链接下载。ServerAgent-2.2.1.zip
,需要通过其他途径下载。
(2)安装插件方式
插件包里面说明文档中的提示:
# 安装使用
Installation and Usage
# 只需将 JAR 文件复制到 JMeter 的 lib/ext 目录中即可。
Just copy the JAR file into JMeter's lib/ext directory.
# 然后您可以启动 JMeter 并向您的测试计划添加其他项目。
Then you can start JMeter and add additional items to your Test Plan.
# 需要 Java 1.6 版和 JMeter 2.4。
Java version 1.6 and JMeter 2.4 are required.
所以我们需要操作的步骤:
- 将
JMeterPlugins-Extras-1.4.0.zip
文件解压,找到lib/ext
文件夹里的JMeterPlugins-Extras.jar
,放到JMeter安装目录的lib/ext
目录里面。 - 同理,将
JMeterPlugins-Standard-1.4.0.zip
解压,找到lib/ext
下的JMeterPlugins-Standard.jar
,放到JMeter安装目录的lib/ext
目录里面。
完成上面步骤后,我们启动JMeter,如果已启动JMeter,需要进行重启。
执行操作:测试计划 —> 右键添加 —> 监听器,可以看到监听器中多了一些东西,看到这些jp@gc
开头的组件则表明插件已生效。
如下图所示:
(3)常用组件简要介绍
jp@gc - Bytes Throughput Over Time
:不同时间吞吐量展示(图表) 。
聚合报告里,Throughput
是按请求个数来展示的,比如说1.9/sec
,就是每秒发送1.9个请求。而这里的展示是按字节Bytes来展示的图表。jp@gc - Composite Graph
:混合图表。在它的Graphs
里面可以设置多个图表一起展示,它可以同时展示多个图表。jp@gc - Hits per Second
:每秒点击量。jp@gc - PerfMon Metrics Collector
:服务器性能监测控件,包括CPU
,Memory
,Network
,I/O
等等。jp@gc - Reponse Latencies Over Time
:记录客户端发送请求完成后,服务器端返回请求之前这段时间。jp@gc - Reponse Times Distribution
:显示测试的响应时间分布,X
轴显示由时间间隔分组的响应时间,Y
轴包含每个区间的样本数。jp@gc - Transactions per Second
:每秒事务数,服务器每秒处理的事务数。jp@gc - Reponse Times vs Threads
:展示事务响应时间与虚拟用户数之前的对应关系。
2、启动监控服务
(1)在Linux系统中
将ServerAgent-2.2.1
文件上传到需要监控服务器上,执行命令:ServerAgent-2.2.1\bin\startAgent.sh
,来启动ServerAgent
服务,默认端口4444。
如下所示:
# 1.查看当前所在路径,和路径下的文件
[root@localhost ServerAgent-2.2.1]# pwd
/usr/local/ServerAgent-2.2.1
[root@localhost ServerAgent-2.2.1]# ll
总用量 172
-rw-r--r--. 1 root root 10821 6月 8 11:20 CMDRunner.jar
drwxr-xr-x. 2 root root 4096 6月 8 11:20 lib
-rw-r--r--. 1 root root 85433 6月 8 11:20 LICENSE
-rw-r--r--. 1 root root 62848 6月 8 11:20 ServerAgent.jar
-rw-r--r--. 1 root root 63 6月 8 11:20 startAgent.bat
-rw-r--r--. 1 root root 74 6月 8 11:20 startAgent.sh
# 2.赋予startAgent.sh文件执行权限
[root@localhost ServerAgent-2.2.1]# chmod +x startAgent.sh
[root@localhost ServerAgent-2.2.1]# ll
总用量 172
-rw-r--r--. 1 root root 10821 6月 8 11:20 CMDRunner.jar
drwxr-xr-x. 2 root root 4096 6月 8 11:20 lib
-rw-r--r--. 1 root root 85433 6月 8 11:20 LICENSE
-rw-r--r--. 1 root root 62848 6月 8 11:20 ServerAgent.jar
-rw-r--r--. 1 root root 63 6月 8 11:20 startAgent.bat
-rwxr-xr-x. 1 root root 74 6月 8 11:20 startAgent.sh
# 3.启动startAgent服务
[root@localhost ServerAgent-2.2.1]# ./startAgent.sh
INFO 2021-06-08 11:21:45.863 [kg.apc.p] (): Binding UDP to 4444
INFO 2021-06-08 11:21:47.073 [kg.apc.p] (): Binding TCP to 4444
INFO 2021-06-08 11:21:47.090 [kg.apc.p] (): JP@GC Agent v2.2.0 started
提示:
在Linux系统中执行命令
./startAgent.sh
时,可能会提示:-bash: ./startAgent.sh: 权限不够
,那么我们需要执行命令:chmod +x startAgent.sh
或者chmod 777 startAgent.sh
,给startAgent.sh
文件赋予执行权限。
(2)在Windows系统中
在Windows服务器中启动startAgent.bat
文件即可。
默认端口为4444,也可以参数指定 –udp-port 4445 –tcp-port 4445
。
如下图所示:
(在服务器中的任何目录中启动都可以)
(3)JMeter相关配置
我们可以修改bin/jmeter.properties
文件中的一些配置项,把有关系jmeterplugins和thread的属性项都打开。
例如:jmeter.save.saveservice.thread_counts=true
,表示如果没有把thread_count
这个参数打开,是不会记录到线程有关的信息的。
不配置也没有问题,能够根据自己实际需求配置,那自然是最好的,这些都需要我们在之后的日常工作中,慢慢的积累总结。
(4)总结
JMeterPlugins-Standard
插件和JMeterPlugins-Extras
插件相当于是客户端。
ServerAgent
相当于是服务端。
3、使用JMeter监控服务器
(1)测试计划内包含的元件
添加元件操作步骤:
- 创建测试计划。
- 创建线程组:
选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组
。 - 在线程组下,添加取样器“HTTP请求”组件:
选中“线程组”右键 —> 添加 —> 取样器 —> HTTP请求
。 - 在线程组下,添加定时器“固定吞吐量定时器”组件:
选中“线程组”右键 —> 添加 —> 定时器 —> 固定吞吐量定时器
。
最终测试计划中的元件如下:
点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。
(2)HTTP请求界面内容
任何取样器请求都可以,我这里就以一个登陆请求为例了。
编写内容如下图:
(3)配置jp@gc-PerfMon Metrics Collector
组件
在jp@gc-PerfMon Metrics Collector
组件中,添加要监控的服务器地址,和端口号。
端口默认为4444,该端口号要与待监控服务器上的ServerAgent
服务的端口一样。
最后选择在被监控服务器中收集哪些资源的指标。
如下图所示:
对jp@gc-PerfMon Metrics Collector
组件简单介绍:
- 名称:
jp@gc-PerfMon Metrics Collector
组件的自定义名称,见名知意最好。 - 注释:即添加一些备注信息,对该
jp@gc-PerfMon Metrics Collector
组件的简短说明,以便后期回顾时查看。 Servers to Monitor (ServerAgent must be started, see help)
:设置要监控的服务器(必须启动 ServerAgent服务)Host/IP
:填写被监控服务器的主机IP地址或者域名。Port
:被监控服务器上启动的ServerAgent
服务的端口。Metric to collect
:选择被监控服务器上要收集的指标。Add Row
:添加一个监控设置。Copy Row
:复制一条监控设置。Delete Row
:删除一条监控设置。
- 所有数据写入一个文件:这个部分的操作前面说过很多次了。就是可以把JMeter脚本执行过程中,请求产生的内容,保存到一个文件中。也可以设置把请求中的哪些内容存储到文件中。
- 最下面是监控结果的图形化展示。
(4)线程组元件配置
如果这时候就运行JMeter脚本,你会发现Chart
区域并无曲线图。现象是成功连接然后立刻断开了,并没有获取我们想要的曲线图。
原因是因为线程组只运行一次,若使其能够获取一段时间的数据,在Chart
区域就能显示出对应的曲线图了。
我们需要将线程组元件的:
- 循环次数:勾选为”永远”;
- 勾选调度器:置脚本持续跑多长时间。
如下图所示:
简单说明:
- 线程数:就是并发数,目标100采取叠加的方式去进行添加。
- 启动时间:每秒启动多少个(可以根据结果去进行调整)。策略:想要服务器压力大点就时间少点,想要服务器的压力慢慢增加就时间长点。
- 循环次数:表示每一个线程跑几次。指定次数or永远(跟下面的持续时间配合使用)。
- 调度器:配合永远使用,去设置持续时间。
示例:设置线程数100,勾选永远,就会一直执行,但调度器中持续时间设置时间,就是在这段时间内,这100个用户一直执行。
(5)查看监控结果
执行脚本,查看监控结果。
我们回到jp@gc-PerfMon Metrics Collector
组件界面中,可以看到Chart
选项页中,如下图所示:
从上图中我们可以看到,在脚本运行的过程中,服务器的CPU、内存、磁盘IO、网络IO的一个使用情况,都可以通过JMeter进行监控了。
提示:图表可导出成
.csv
文件,配合聚合报告,分析服务器性能状况。
说明:
1)在Chart
区域右键,会出现操作菜单
Copy Image to Clipboard
:复制图片到剪贴板。Save Image as…
:图片另存为。Export to CSV
:导出为CSV格式文件。
2)Rows
选项页中可以设置曲线图中显示的被监控项
如下图所示:
3)Settings
选项页中的设置项
Use relative times
:使用相对时间,默认勾选,显示为从监控起一段时间内的曲线图;不勾选则显示当前系统时间内的曲线图。Auto-zoom rows for best fit
:自动缩放最佳拟合行,默认勾选,不建议取消勾选。Line width
:线条宽度,默认为1,不建议修改。Draw markers
:画标记,默认不勾选,勾选后曲线转折点被标记。Paint gradient
:颜色梯度,默认勾选。Limitnumber of points in row to [] points
:行的极限点数,默认不勾选。Force maximum Y axis value to []
:Y轴最大值,默认不勾选。
4、遇到的问题
在运行JMeter脚本的时候,出现java.lang.NoSuchMethodError: org.apache.jmeter.samplers.SampleSaveConfiguration.setFormatter(Ljava/text/DateFormat;)V
报错。
在JMeter日志查看器面板,出现如下所示:
2021-06-08 00:11:48,093 INFO o.a.j.e.StandardJMeterEngine: Running the test!
2021-06-08 00:11:48,093 INFO o.a.j.s.SampleEvent: List of sample_variables: []
2021-06-08 00:11:48,095 ERROR o.a.j.JMeter: Uncaught exception:
java.lang.NoSuchMethodError: org.apache.jmeter.samplers.SampleSaveConfiguration.setFormatter(Ljava/text/DateFormat;)V
at kg.apc.jmeter.JMeterPluginsUtils.doBestCSVSetup(JMeterPluginsUtils.java:272) ~[JMeterPlugins-Extras.jar:?]
at kg.apc.jmeter.perfmon.PerfMonCollector.setupSaving(PerfMonCollector.java:140) ~[JMeterPlugins-Standard.jar:?]
at kg.apc.jmeter.perfmon.PerfMonCollector.testStarted(PerfMonCollector.java:117) ~[JMeterPlugins-Standard.jar:?]
at org.apache.jmeter.reporters.ResultCollector.testStarted(ResultCollector.java:350) ~[ApacheJMeter_core.jar:5.0 r1840935]
at kg.apc.jmeter.vizualizers.CorrectedResultCollector.testStarted(CorrectedResultCollector.java:28) ~[JMeterPlugins-Extras.jar:?]
at org.apache.jmeter.engine.StandardJMeterEngine.notifyTestListenersOfStart(StandardJMeterEngine.java:215) ~[ApacheJMeter_core.jar:5.0 r1840935]
at org.apache.jmeter.engine.StandardJMeterEngine.run(StandardJMeterEngine.java:384) ~[ApacheJMeter_core.jar:5.0 r1840935]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_144]
原因:
是因为JMeterPlugins-Extras-1.4.0
插件和JMeterPlugins-Standard-1.4.0
插件,遇到高版本JMeter会出现兼容问题。
解决办法两种:
1)使用JMeter3.1版本,搭配JMeter的插件Extras1.4.0
和Standard -plugin1.4.0
使用。只支持JMeter以下版本3.2,不包括3.2版本!!!
2)使用jmeter-plugin-manager
(JMeter插件管理器)
直接下载所需要的PerfMon (Servers Performance Monitoring)
组件。
先在Avaliable Plugins
搜索PerfMon
,进行勾选需要安装的插件。
再ApplyChanges and Restart jmeter
按钮进行安装。
此种方式安装的PerfMon
插件为2.1version
,解决了JMeter版本过高,导致监控插件不兼容的问题。
如下图所示:
提示:这种方式比较推荐,毕竟高版本修复了很多问题,此方法安装的
jp@gc -PerfMon Metrics Collector
插件监控,支持到JMeter5.1以及最新版本。
参考: