jmeter压力测试(踩坑)报错:Address already in use

最近在写搜索接口服务,写完接口进行压力测试,但是在长期线程较高的进行测试时会报如下错误:

java.net.BindException: Address already in use: connect
        at java.net.DualStackPlainSocketImpl.connect0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
        at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
        at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl$JMeterDefaultHttpClientConnectionOperator.connect(HTTPHC4Impl.java:331)
        at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:373)
        at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:394)
        at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
        at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
        at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
        at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
        at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
        at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:832)
        at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:570)
        at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:67)
        at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1231)
        at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1220)
        at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:622)
        at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:546)
        at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486)
        at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253)
        at java.lang.Thread.run(Unknown Source)

排除问题:

首先先查看服务器的日志,发现没有报错。然后查看nginx数据,发现请求数和测试发出的请求数不一致,服务器接收到的少,就想到丢失请求。后来经过查找资料了解是windows 机器的问题, 原因:windows提供给TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收它们,就导致我们在短时间内跑大量的请求时将端口占满了,导致如上报错。

解决办法(在jmeter所在服务器操作):

1.cmd中输入regedit命令打开注册表;
2.在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters右键Parameters;
3.添加一个新的DWORD,名字为MaxUserPort;
4.然后双击MaxUserPort,输入数值数据为65534,基数选择十进制;
5.完成以上操作,务必重启机器,问题解决。
解决后的测试结果就不再报错:补充:我在修改上述问题后可以进行正常测试,但是过了两天增加线程数后又出现同样的问题,进行以下配置会正常进行测试。在上述三步骤后再添加TcpTimedWaitDelay,数值为30-300 选择十进制。同样还是需要重新启动电脑。


相关推荐

  • 被公司劝退,领导让我请假出去找工作,找到新工作后,他却让我把离职原因写成个人原因!
  • 攀登造芯之路:玄铁已出,生态为王
  • 科大讯飞回应薪酬回溯制度;OpenAI宣布开放API,开发人员可将ChatGPT集成到自己产品;Godot 4.0发布|极客头条
  • 激光雷达的饭碗要被端了?
  • 【重磅新品】官方把火箭残骸做成邮票,收藏界抢疯了
  • 中国开源社区健康案例——StarRocks社区
  • 如何防止三重勒索勒索软件?
  • 和小6岁帅哥“公费”谈恋爱,两年后她翻车了?40岁王子文:我的人生不能凑合
  • ChatGPT版Excel?北大ChatExcel动动嘴皮子就把表格改完了
  • 俄军方:美企图在乌使用化武并嫁祸俄方;希腊火车相撞事故死亡人数增至36人;日本众议院通过史上最高防卫预算 | 每日大新闻
  • 这双鞋不便宜,但穿完之后,咬咬牙买了3双(太舒服了)
  • 排序算法的创造者出生 | 历史上的今天
  • 谷歌宣布一系列新的Android功能
  • 技术文档沉淀的一些思考
  • Curl 审核:一句玩笑话引出的重大发现
  • 面试官:列举一下实现异步的8种方式
  • ChatGPT掀智力革命!OpenAI发布AGI路线图,最终通向超级智能世界
  • 理解了这个 3 个 object,你甚至能自己写个 git!
  • FFmpeg 6.0 发布
  • 想在韩国犯罪吗?先喝几杯酒再去