0%

jmeter登录并发实例

说明

  • 本次用jmeter进行登录并发的压测实例
  • jmeter version 5.4.1
  • 压测平台是自己搭建的jform
  • 压测机器为单机win

20个并发登录

设置线程组

  • 1秒钟发20个线程

image-20211027161520958

参数化登录数据

  • 下图为参数化设置,文件名使用相对路径,指向%JMETER_HOME%上一级目录,比如我放到的是D:\exe\apache-jmeter-5.4.1

    image-20211027161648791

  • 参数化格式为

1
2
3
4
5
6
test1008,123456
test1009,123456
test1010,123456
test1011,123456
test1012,123456
test1013,123456

登录接口

image-20211027162309389

运行

  • 运行成功后,查看测试报告

    image-20211027162426589

服务器监控

  • 下载ServerAgent-2.2.3,放到服务器上,给其他插件提供性能指标数据

  • 下载jpgc,监控cpu,men等

    image-20211027162740355

    • 解压后把perfmon-2.2.2.jar放到D:\exe\apache-jmeter-5.4.1\lib\ext目录下面
  • 重启jmeter,新增监听器可以看到PerfMon插件

    image-20211027163542732

  • 新增监控指标

    • CPU:combined : 综合CPU使用情况

    • Memory:usedperc:内存使用比例

    • DIsk IO:usedperc:磁盘IO占用比例

    • Swap:分区通常被称为交换分区,这块儿分区位于硬盘的某个位置,当系统内存(物理内存)不够用的时候,如果开启了交换分区,部分内存里面暂时不用的数据就会Swap out(换出)到这块儿分区;当系统要使用这部分数据的时候,存储在Swap分区的数据就会Swap in(换入)到内存当中。

      简而言之,Swap分区就类似于内存的后备内存(只是做了下缓冲)

image-20211027163910713

设置ServerAgent

  • 把压缩包放在服务器(centos7)上后,解压
1
2
3
4
5
6
7
8
9
10
11
12
[root@racknerd-4dbd89 local]# tar -zxvf ServerAgent-2.2.3.tar.gz
ServerAgent-2.2.3/
ServerAgent-2.2.3/CMDRunner.jar
ServerAgent-2.2.3/lib/
ServerAgent-2.2.3/lib/avalon-framework-4.1.5.jar
ServerAgent-2.2.3/lib/cmdrunner-1.0.2.jar
ServerAgent-2.2.3/lib/jorphan-2.6.jar
ServerAgent-2.2.3/lib/libsigar-amd64-freebsd-6.so
ServerAgent-2.2.3/lib/libsigar-amd64-linux.so
ServerAgent-2.2.3/lib/libsigar-amd64-solaris.so
ServerAgent-2.2.3/lib/libsigar-ia64-hpux-11.sl
...
  • 启动发现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
2
3
4
5
[root@racknerd-4dbd89 ServerAgent-2.2.3]# java -jar ./CMDRunner.jar --tool PerfMonAgent --udp-port 7777 --tcp-port 7777
INFO 2021-10-27 04:57:38.028 [kg.apc.p] (): Binding UDP to 7777
INFO 2021-10-27 04:57:39.040 [kg.apc.p] (): Binding TCP to 7777
INFO 2021-10-27 04:57:39.048 [kg.apc.p] (): JP@GC Agent v2.2.3 started

  • jmeter这里也要修改端口为7777

    image-20211027164933790

再次运行

  • 发现启动后,监听器jpgc这里一直卡着,jmeter也一直卡死,用任务管理器结束任务后,查了下相关资料,说要设置文件名路径,我设置后依然如此

  • 等待漫长五分钟后,终于看到结果出现timed out提示

    image-20211027174053337

  • 想到应该是服务器端口没有开放,设置防火墙端口开放

    1
    2
    firewall-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
    15
    gent --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

出现提示框

  • 再次运行是,出现一个弹框

    image-20211028103314940

  • 打开jmeter.properties设置resultcollector.action_if_file_exists=DELETE,如下图展示,action_if_file_exists有三个值ask,append,delete看字面意思就很清楚了。

  • 修改后重新打开jmeter,再次运行脚本就不会出现提示

    image-20211028103515713

查看测试报告

查看服务器的测试报告

image-20211027174638748

  • X 10000000表示放大的次数,助于观察

  • 查看cpu情况

    image-20211027174848666

image-20211027175002092

  • 我的服务器是单核cpu,配置比较差,直接就100%

  • 磁盘使用情况还不错

    image-20211027175148394

  • 其他情况就不分析了,类似

查看其他监听报告
  • 汇总报告,单位为ms

image-20211028105143043

  • 聚合测试报告,单位为ms,其中Throughput(吞吐量)——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner Transaction per Second 数(该值越大越好,表示服务器处理能力越强。)

    image-20211028105302902

简单负载登录测试

  • 1秒钟增加2个线程,运行100次
  • 分别看20,40,60并发下的表现

并发20的线程组设置

image-20211028114406461

参数化

  • 沿用上述

集合点设置

image-20211028114550041

  • 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波动比较大

    image-20211028152612334

  • cpu再并发请求的时候直接100%

    image-20211028152720062