性能测试系列:Jmeter使用记录

1、做接口测试,服务器是10台docker,目标是把10台docker的cpu压满。我有三台压力机,windows Server操作系统,4c8g配置。

经过尝试,每台压力机发起700vu,压力机cpu满,用并发数除以平均响应时间,算出tps应该是3600,但实际只达到了2200,响应时间不大,但tps却没有达到预期,这说明压力机的能力到头了,需要增加压力机。

jmeter的操作手册,官网写的很详细(官网关于分布式压测的讲解),过一遍windows下分布式测试的配置步骤:

所有机器在同一子网(因为jmeter的分布式调用是通过rmi远程调用,所以跨网段需要建立代理服务器。同一子网,就是大家用同一个网关,且子网掩码相同),配置相同的jmeter与jdk,把脚本的参数化文件放在各个压力机的相同路径下,

各个压力机,只启动jmeter-server.bat即可,jmeter-server.bat启动会报Server failed to start: java.rmi.server.ExportException: Listen failed on port:,这时修改jmeter.properties的server.rmi.ssl.disable=false,改为true。

找一台机器作为总控制,配置jmeter的bin目录下的jmeter.properties,改remote_hosts,写上各个压力机的ip,不用写总控制机自己的ip。

然后打开脚本,将脚本里的参数化文件路径,写成绝对路径。然后在运行菜单里,点击启动所有,这时总控制机会把脚本分发到各个压力机上运行,结果会自动收录到总控制机。

上面的方法是从机器的系统随机分配端口号,如果想指定端口号,需要修改从机的 jmeter.properties文件,并在主机的jmeter.properties里除了配ip还要配端口,具体参考

扩展:使用docker搭建自动伸缩的压力机集群。

2、被测试的服务器都在docker上,一台实例服务器,有多个docker容器,所以在进行性能测试时,不能使用top命令监控本机,而是通过docker stats 监控具体容器的cpu使用情况。docker stats的参数很少,无法形成实时的监控,需要找一下看有没有现成的docker资源监控软件,如果没有通用的可以用influxdb和grafana自己写一个。

8个最佳Docker容器监控工具

3、除了系统资源,docker下对jvm的监控,显然不如使用visualVM方便,另外,对应长时间的稳定性测试,无法长期监控jvm,这也需要有个监控软件。

Java visualVM监控docker容器中的java项目

jvisualvm+jmx监听docker容器中的jvm情况

4、bean shell运行报错信息不明显,查看详细报错

5、jmeter发起jdbc请求,不同的数据库要用不同的验证语句,不然会导致数据库连不上。数据库连接driverClass和jdbcUrl大全Jmeter--常用数据库validationQuery检查语句

6、jmeter发起jdbc请求,直接拼写sql是硬解析还是软解析?

  取决于query type。使用select statement是硬解析。目前java框架大都使用了绑定变量,属于软解析。jmeter要改成绑定变量,需要改成 prepared select statement (JDBC为什么要使用PreparedStatement而不是Statement),如图所示:

7、关于cookie

loadrunner进行http请求时,若服务器返回set-cookie,则后续请求会自动添加cookie。

jmeter的http请求,只要新建cookie配置,就会自动检测服务器的set-cookie并未请求添加cookie。

说明:jmeter中cookie管理器使用方式分两种

1. 自动:将cookie管理器添加到测试计划中,cookie管理器会自动记录指定域响应的cookie信息,并且在相同域中,下条请求会自动附加cookie信息

2. 手动:有时候需要附件指定cookie,将cookie管理器添加到测试计划中或指定线程组中,点击添加手动添加cookie名、值、域

注意:手动添加cookie时必须添加域(网站域名)

 Jmeter使用http请求时长连接的建立与保持问题

8、Jmeter里用户定义变量不会随迭代变化,前置处理的用户参数可以随迭代变化。

9、jmeter 模仿each occurrence 不行;

   性能脚本要避免本地函数耗时过长,会使压力变小,tps不准确。

10、新建csv文件,可以通过txt改后缀,然后用记事本编辑。如果直接用xls改后缀,会读取乱码;
   做参数关联,若用正则,被参数化的值必须是(.*?),不然正则无效;

11、Linux上启动jmeter

登录linux压力机
压力机jmeter文件夹下有脚本和CSV文件;
cd到/jmeter/script脚本文件夹下,执行命令:
jmeter -n -t 要执行的脚本名称 -l /jmeter/result/结果名称.jtl
场景跑完后将结果下载到本地,在jmeter中打开结果进行统计;

12、jmeter测试压力机报错no buffer,大量time_wait。

time_wait是三次握手最后阶段,服务器已经完事了,客户端知道服务器完事了,变成这个状态,等一会然后自己close。

这说明服务器处理很快,压力机资源不够了。

jmeter本地默认的http取样器,用的是http4client,高级里面改成java,就会用线程池了,就不会报no buffer了。

原文地址:https://www.cnblogs.com/zhaot1993/p/13528793.html