MySQLERROR: dial tcp ip:3306:connectex:Only one usage of each socket address is normally permititted

在Windows 10或8系统中进行高并发数据库测试时,可能会遇到"Only one usage of each socket address"错误。这实际上是由于系统限制导致的本地端口耗尽。解决方案包括调整Win10动态端口范围,减少TIME_WAIT时间,或者将应用部署到Linux服务器。修改注册表键值TcpTimedWaitDelay、MaxUserPort和TcpTimeWaitDelay可有效缓解此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题重现

  • 环境: win10或win8
  • 错误信息

    MySQL ERROR: dial tcp X.X.X.X:3306: connectex: Only one usage of each socket address (protocol/network address/port) is normally permitted.

  • 场景: 高并发,通过JMeter测试工具模拟.

二、原因分析

首先,该错误不是MySQL的锅,而是win10系统的问题。

一个连接由5个元素确定,即{ Protocol, Local IP, Local Port, Remote IP, Remote Port} ,当一个连接被关闭时,默认情况下会进入TIME_WAIT状态240s。

这里,我们使用的Protocol是TCP,Local IP,Remote IP和Remote Port都是固定的,那么问题肯定出在Local Port上。

当一个应用被部署在windows服务器且每次请求都要进行数据库事务操作时,在高并发情况下,会导致win10下本地端口占用过多,导致本地可用端口急速耗尽就会出现该报错信息。

三、解决方法

3.1 部署到Linux服务器

这个错误目前在Linux环境下还未发现,部署应用到Linux服务器,妥妥的。如果非要在本地做压测,可以尝试以下方法。

3.2 修改w
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值