JMeter压力测试时报异常:address already in use
执行JMeter时,当并发线程数较高时(尤其是测试机器还存在连接其他服务器的socket),运行一会就会产生address already in use的异常,这是因为Windows中TCP客户端和服务器连接时,客户端必须分配一个动态端口,默认情况下这个动态端口的分配范围为 1024-5000 ,也就是说默认情况下,客户端最多可以同时发起3977 个Socket 连接,如果线程数过多,客户端的地址就会不够用,就会引发该异常。
解决办法(在jmeter所在电脑操作):
1.cmd中输入regedit命令打开注册表;
2.在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
右键Parameters;
3.添加一个新的DWORD,名字为MaxUserPort;
4.然后双击MaxUserPort,输入数值数据为65534,基数选择十进制;
6.同样的新建一个TcpTimedWaitDelay,输入数据30(可以选填30-300),基数选择十进制;
7.完成以上操作,重启电脑即可解决问题。
JMeter并发测试遇到Socket closed错误解决方案
1、查看服务器端电脑的默认限制数配置:
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 256
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 1418
virtual memory (kbytes, -v) unlimited
可以看到这台服务器电脑上默认的文件数是 256,下面我们来修改默认文件数:
ulimit -n 2048
-n 后面的参数就是要指定的大小,可以根据自己的电脑的配置进行调整,配置好的可以改的更大一些
然后在执行 ulimit -a
查看配置就会发现文件数已经修改为了指定值,如果有报错可能就是数值设置的太大了,可以调整一下,需要是 2 的指数(如256,512,1024,2048,4096…)
2、调整HttpClient的idletimeout配置
问题原因:在JMeter下,发送http 请求时,一般都是默认选择了use keepAlive
,JMeter坑就在这里,默认勾选了这个(如果不勾选的话,也不会保存),但其配置JMeter.properties中的时间设置默认却是注销的,也是是说,不会等待,一旦连接空闲,则立马断开了,导致我们压测中出现了事务失败的情形。
解决办法:修改 jmeter.properties
中的 httpclient4.idletimeout=<time in ms>
设置成自己觉得合理的时间,一般可设置成10-60s(表示连接空闲10s后才会断开),注意这边单位是ms。