JMeter压力测试时报异常:address already in use

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。

上一篇:gdb coredump怎么用


下一篇:unlimited tablespace 权限是否对所有表空间拥有权限测试