Jmeter分布式测试
本文总结了一些Jmeter执行性能测试时常见的问题。通常请求报java错误时,就需要在自己脚本或是运行环境上找原因了。
1. TCP连接数耗尽
- 在执行Jmeter性能测试脚本过程中,当线程数>500就会遇到这几种错误,而且占总数很多。
Non HTTP response code: java.net.BindException/Non HTTP response message: Address already in use: connect
Non HTTP response code: java.net.ConnectException/Non HTTP response message: Connection refused: connect
包括不限于上面2个。
2. 这种情况还又一种表现是服务器的CPU忽高忽低。那是因为你的机器本身就无法把请求发出去了。像左图这样。
3. 这时由于windows系统会默认TCP连接数不够用。我知道的说法是默认连接数只有1000,每4分钟回收一次,不确定具体数值,但确实需要在注册表里修改最大连接数与延迟时间。
- Win + R, 运行regedit
- 进入 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Performance
- 对着Performance右键,新建QWORD(32位) ,名称: MaxUserPort, 值: 65534(十进制)
- 对着Performance右键,新建QWORD(32位) ,名称: TcpTimedWaitDelay, 值: 30(十进制)
- 调好之后再跑一下,效果立竿见影。
2. JVM内存溢出
-
有的时候,执行脚本过程中,突然cmd框里不动了,然后又一个报错。还会在jmeter程序根目录生成一个几百兆的.h***开头的文件。(具体报错和文件名记不清了,以后补上)。通常多线程组,多用户数,长时间,客户机内存小会产生这样的问题。这是因为启动Jmeter时,JVM分配给jmeter的内存不足以支撑跑完这个脚本。
-
我们可以修改jmeter.bat文件里的相关参数来避免这个问题。
- 编辑你平时启动jmeter gui的那个文件,也就是/bin/jmeter.bat文件。
- 搜索xms找到对应的这一行,根据你的实际情况修改这3个参数。(个人本地8G配置如图)
xms: 初始内存
xmx: 最大内存
MaxMetaspaceSize: 最大内存的永久保存区域
3. 客户机所在网络带宽限制
最近在测试一个项目。要求并发非常高。我用5台机器模拟6k并发,效果是最好的。达到1w并发时,TPS下降的厉害,响应时间也惨不忍睹。但是通过查看服务器CPU之后,发现CPU并不高。后来排查到原因是因为,我的5台客户机1w个线程把公司局域网带宽占的满满的。自然就网速非常的慢了。(发现的契机是跑脚本时,公司wifi访问系统奇慢,但4g访问就正常)。所以就算有足够的客户机参与分布式测试。可能带宽的限制也会影响最终结果的准确性。