0


jmeter入门使用

前言

压力测试是比较常见的验证接口性能的方式,一般有很多压测工具,其中jmeter是比较实用的开源工具,使用Java语言编写,支持跨平台。实际上压测就是控制变量法,只能在特殊条件下的理想结果,实际运行是有一定差异的,只能作为参考。

1. JDK配置

JDK使用Oracle JDK,openjdk都可以,配置好JAVA_HOME,JDK尽量选择LTS版本,即8,11,17,目前推荐JDK11,优选openjdk。以macos为例,Linux同理,笔者做过jmeter测试OpenJDK与Oracle JDK的性能差异不大,5%~10%左右,主要的JVM参数通用,可以无缝切换。但是ARM版架构的JDK由于JNI的特性,需要部分C/C++的底层so文件支持。不过OpenJDK是没有javafx的,但是有开源jar,直接pom依赖即可org.openjfx。

笔者还没有升级,还是JDK8

2. jmeter配置

配置path路径,方便执行jmeter指令

配置好后,执行source指令,让path生效,执行jmeter -v

3. 压测文件准备

压测可以是rpc协议,也可以是http协议,以常见的http协议为例,底层是socket通信,socket方式有tcp和udp,目前udp被确认在http3.0使用。

3.1 启动jmeter

有2个重要的点

  1. 推荐实际压测使用non gui

     不使用gui是因为,一般测试都在服务器上,本身就没有gui,而且一般是最小安装的,而且gui会占用一些资源。
    
  2. 调节jvm参数,在jmeter的启动脚本中

     jmeter.sh脚本明确写了设置JVM的方式JVM_ARGS配置
    

     那么生效的方式呢
    
     ![](https://img-blog.csdnimg.cn/5c123f0ab09745ac904f5eea069ca160.png)
    
      $@ 是传给脚本的所有参数的列表
    

3.2 参数配置

实际上jmeter的能力非常全面,以线程池http为例

一般需要设置用户数,jmeter用线程模拟用户,循环次数,还可以设置定长时间,也可以不设置,按照样本数测试。

选择协议,根据实际情况选择

以http为例,这里的Keepalive点掉,不然端口来不及回收,会报cannot assign requested address

如果这个不配置,仍然报错,可以增加服务器使用的端口数量,减少端口超时时间,多台服务器压测,实际上部分参数会引发NAT的故障:(101条消息) 【经验总结】tcp_tw_recycle参数引发的故障_wireless_tech的博客-CSDN博客_tcp_tw_recycle参数修改。

  1. 调低端口释放等待时间,按需调整
    sysctl -w net.ipv4.tcp_fin_timeout=15

  2. 释放TIME_WAIT端口给新连接使用
    sysctl -w net.ipv4.tcp_tw_reuse = 1

  3. 增加端口
    vim /etc/sysctl.conf
    net.ipv4.ip_local_port_range = 10000 65000 #表示10000到65000的端口可用

sysctl -p

加上一些监听器

测试验证OK后,导出jmx文件

4. 压测

实际上在启动时jmeter就告诉了用法

jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]

只是这些参数的意义:Apache JMeter - User's Manual: Getting Started

-n, --nongui
        run JMeter in nongui mode
-t, --testfile <argument>
        the jmeter test(.jmx) file to run
-e, --reportatendofloadtests
        generate report dashboard after load test
-o, --reportoutputfolder <argument>
        output folder for report dashboard

使用一个demo测试

nohup jmeter -n -t demo.jmx -l result.jtl -e -o ./res &

生成了result.jtl的结果数据,res目录有生成好的图表

5. 集群压测

上面的方式简单测试一台服务器足够,但是当需要批量回放或者测试某个环境的时候,单台client就有性能瓶颈,需要多个jmeter的client同时请求,然后把各自的结果聚合汇总。

-r, --runremote
        Start remote servers (as defined in remote_hosts)
-R, --remotestart <argument>
        Start these remote servers (overrides remote_hosts)

仍然去看参数,有-r的参数,其实就是协同jmeter的server-client集群,架构设计如下,真正干活的是jmeter-server

Apache JMeter - User's Manual: Remote (Distributed) Testing

5.1 ssl配置

Apache JMeter - User's Manual: Remote (Distributed) Testing

jmeter 4.0开始就需要ssl默认rmi启动时,可以关闭,也可以配置jks并拷贝到bin目录,笔者配置了jks文件证书,并拷贝到各个实例的bin目录

5.2 启动jmeter-server

编辑jmeter的bin目录下的jmeter.properties文件,开启端口,默认就是开启的,我这里使用一台机器,通过不同的端口模拟,所以修改了端口,注意墙通不通,telnet检查

我这里做了一个本地集群,实际上没什么用,只是模拟demo,如果是多台服务器无需修改端口

启动nohup ./jmeter-server &,启动服务端

5.3 启动client,查看结果

客户端修改远程端口,bin/jmeter.properties文件,笔者使用localhost不行,因为证书原因

执行测试命令

./jmeter -n -t demo.jmx -r -l result.jtl -e -o res

命令跟以前一样,只不过增加了-r

也可以使用-R,不配置remote_hosts

查看聚合结果,result.jtl和res文件夹,跟以前一样

总结

jmeter是压测工具的一种,实际上功能十分强大,而且Apache开源项目,简单使用了jmeter压测http,集群压测。只是笔者使用经验的总结,笔者通过这种方式验证了OpenJDK替代Oracle JDK的数据验证,包括性能差异。


本文转载自: https://blog.csdn.net/fenglllle/article/details/124585548
版权归原作者 fenglllle 所有, 如有侵权,请联系我们删除。

“jmeter入门使用”的评论:

还没有评论