JMeter并发测试遇到Socket closed错误解决方案

JMeter并发测试遇到Socket closed错误解决方案

Intro

最近在用 JMeter 测试服务的性能,并发测试的时候,当线程数超过500,就会出现 socket closed 的错误,在网上查阅了一番资料之后,找到了下面的解决方案:

  1. 第一步,调整默认文件数
  2. 第二步调整HttpClient的Idletimeout

Solution

调整文件数

怎么在Windows上配置,找了几种方式都不行,最后在 git bash 里执行了linux 下的命令,也可以查看和修改

查看默认限制数配置:

$ 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...)

2432073-68bb176286a451aa.png
open files limit config

调整HttpClient的idletimeout配置

问题原因:在JMeter下,发送http 请求时,一般都是默认选择了use keepAlive,JMeter坑就在这里,默认勾选了这个(如果不勾选的话,也不会保存),但其配置JMeter.properties中的时间设置默认却是注销的,也是是说,不会等待,一旦连接空闲,则立马断开了,导致我们压测中出现了事务失败的情形。

解决办法:修改 jmeter.properties 中的 httpclient4.idletimeout=<time in ms> 设置成自己觉得合理的时间,一般可设置成10-60s(表示连接空闲10s后才会断开),注意这边单位是ms。

Reference

猜你喜欢

转载自blog.csdn.net/weixin_33713707/article/details/87092093
今日推荐