说明
- 本次用jmeter进行登录并发的压测实例
- jmeter version 5.4.1
- 压测平台是自己搭建的jform
- 压测机器为单机win
20个并发登录
设置线程组
- 1秒钟发20个线程
参数化登录数据
下图为参数化设置,文件名使用相对路径,指向
%JMETER_HOME%
上一级目录,比如我放到的是D:\exe\apache-jmeter-5.4.1
参数化格式为
1 | test1008,123456 |
登录接口
运行
运行成功后,查看测试报告
服务器监控
下载ServerAgent-2.2.3,放到服务器上,给其他插件提供性能指标数据
下载jpgc,监控cpu,men等
- 解压后把
perfmon-2.2.2.jar
放到D:\exe\apache-jmeter-5.4.1\lib\ext
目录下面
- 解压后把
重启jmeter,新增监听器可以看到PerfMon插件
新增监控指标
CPU:combined : 综合CPU使用情况
Memory:usedperc:内存使用比例
DIsk IO:usedperc:磁盘IO占用比例
Swap:分区通常被称为交换分区,这块儿分区位于硬盘的某个位置,当系统内存(物理内存)不够用的时候,如果开启了交换分区,部分内存里面暂时不用的数据就会Swap out(换出)到这块儿分区;当系统要使用这部分数据的时候,存储在Swap分区的数据就会Swap in(换入)到内存当中。
简而言之,Swap分区就类似于内存的后备内存(只是做了下缓冲)
设置ServerAgent
- 把压缩包放在服务器(centos7)上后,解压
1 | [root@racknerd-4dbd89 local]# tar -zxvf ServerAgent-2.2.3.tar.gz |
启动发现4444端口被使用
1
2
3
4
5
6
7
8
9[root@racknerd-4dbd89 ServerAgent-2.2.3]# sh startAgent.sh
INFO 2021-10-27 04:55:56.640 [kg.apc.p] (): Binding UDP to 4444
INFO 2021-10-27 04:55:57.767 [kg.apc.p] (): Binding TCP to 4444
ERROR 2021-10-27 04:55:57.778 [kg.apc.p] (): Can't accept TCP connections
java.net.BindException: Address already in use
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:438)
at sun.nio.ch.Net.bind(Net.java:430)修改端口
1 | [root@racknerd-4dbd89 ServerAgent-2.2.3]# java -jar ./CMDRunner.jar --tool PerfMonAgent --udp-port 7777 --tcp-port 7777 |
jmeter这里也要修改端口为7777
再次运行
发现启动后,监听器jpgc这里一直卡着,jmeter也一直卡死,用任务管理器结束任务后,查了下相关资料,说要设置文件名路径,我设置后依然如此
等待漫长五分钟后,终于看到结果出现timed out提示
想到应该是服务器端口没有开放,设置防火墙端口开放
1
2firewall-cmd --zone=public --add-port=7777/tcp --permanent
firewall-cmd --relod重启服务器上的serverAgent
1
2
3
4
5[root@racknerd-4dbd89 ServerAgent-2.2.3]# netstat -lnpt |grep 7777
tcp6 0 0 :::7777 :::* LISTEN 23648/java
[root@racknerd-4dbd89 ServerAgent-2.2.3]# kill -9 23648
[root@racknerd-4dbd89 ServerAgent-2.2.3]# java -jar ./CMDRunner.jar --tool PerfMonAgent --udp-port 7777 --tcp-port 7777再次运行jmeter脚本后,查看到服务器这里已经连接上了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15gent --udp-port 7777 --tcp-port 7777
INFO 2021-10-27 05:22:24.028 [kg.apc.p] (): Binding UDP to 7777
INFO 2021-10-27 05:22:25.036 [kg.apc.p] (): Binding TCP to 7777
INFO 2021-10-27 05:22:25.070 [kg.apc.p] (): JP@GC Agent v2.2.3 started
INFO 2021-10-27 05:23:06.182 [kg.apc.p] (): Accepting new TCP connection
INFO 2021-10-27 05:23:06.194 [kg.apc.p] (): Yep, we received the 'test' command
INFO 2021-10-27 05:23:27.425 [kg.apc.p] (): Starting measures: swap: memory:cpu:
INFO 2021-10-27 05:23:30.179 [kg.apc.p] (): Client disconnected
INFO 2021-10-27 05:26:35.347 [kg.apc.p] (): Accepting new TCP connection
INFO 2021-10-27 05:26:39.514 [kg.apc.p] (): Closing TCP connection
INFO 2021-10-27 05:31:26.064 [kg.apc.p] (): Accepting new TCP connection
INFO 2021-10-27 05:31:26.067 [kg.apc.p] (): Yep, we received the 'test' command
INFO 2021-10-27 05:31:26.274 [kg.apc.p] (): Starting measures: swap: memory:cpu: disks i/o:
INFO 2021-10-27 05:31:28.823 [kg.apc.p] (): Client disconnected
出现提示框
再次运行是,出现一个弹框
打开
jmeter.properties
设置resultcollector.action_if_file_exists=DELETE
,如下图展示,action_if_file_exists
有三个值ask
,append
,delete
看字面意思就很清楚了。修改后重新打开jmeter,再次运行脚本就不会出现提示
查看测试报告
查看服务器的测试报告
X 10000000表示放大的次数,助于观察
查看cpu情况
我的服务器是单核cpu,配置比较差,直接就100%
磁盘使用情况还不错
其他情况就不分析了,类似
查看其他监听报告
- 汇总报告,单位为ms
聚合测试报告,单位为ms,其中
Throughput
(吞吐量)——默认情况下表示每秒完成的请求数(Request per Second
),当使用了Transaction Controller
时,也可以表示类似LoadRunner
的Transaction per Second
数(该值越大越好,表示服务器处理能力越强。)
简单负载登录测试
- 1秒钟增加2个线程,运行100次
- 分别看20,40,60并发下的表现
并发20的线程组设置
参数化
- 沿用上述
集合点设置
Number of Simulated Users to Group by:每次释放的线程数量。如果设置为0,等同于设置为线程租中的线程数量。
Timeout in milliseconds:
- 如果设置为0,Timer将会等待线程数达到了”Number of Simultaneous Users to Group”中设置的值才释放。
- 如果大于0,那么如果超过Timeout in milliseconds中设置的最大等待时间(毫秒为单位)后还没达到”Number of Simultaneous Users to Group”中设置的值,Timer将不再等待,释放已到达的线程。默认为0
注意:如果设置Timeout in milliseconds为0,且线程数量无法达到”Number of Simultaneous Users to Group by”中设置的值,那么Test将无限等待,除非手动终止。
Synchronizing timer 仅作用于同一个JVM中的线程,所以,如果使用并发测试,确保”Number of Simultaneous Users to Group by”中设置的值不大于它所在线程组包含的用户数。
备注:像聚合报告这类监听器最好少添加,一个线程组用一个足以。之所以建议少添加是因为这类组件非常消耗性能,容易对压测结果产生影响。
查看服务器报告
swap波动比较大
cpu再并发请求的时候直接100%