connect: cannot assign requested address

最近临近产品发版,因为有性能压力测试
{"file":"api/init.go:15:func1()","level":"error","msg":"记录用户操作失败: dial tcp 127.0.0.1:3306: connect: cannot assign requested address","time":"2022-03-01 09:57:34"}
原因是客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端 口号,所以新的连接没办法绑定端口,因此就会跑出异常说 无法分配请求地址
在这里插入图片描述

  • 关于服务器TCP请求的TIME_WAIT,linux下可用netstat -a|grep TIME_WAIT 这个命令去查看一下连接数。
  • 同常有比较多条的一个列表,在程序跑的过程中,为了方便看到time_wait的数量是否增多,可以直接用命令netstat -ant|grep -i time_wait |wc -l 查看。
    因此比较直接的解决方式就是修改系统内核相关的参数:

net.ipv4.ip_forward=1 表示开启对于TCP时间戳的支持,若该项设置为为0,则net.ipv4.tcp_tw_reuse设置不起作用,该值系统默认是0

net.ipv4.tcp_syncookies = 1 表示开启对于TCP时间戳的支持,若该项设置为为0,则net.ipv4.tcp_tw_reuse设置不起作用,该值系统默认是0

net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭

net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭

net.ipv4.tcp_fin_timeout = 30 修改系統默认的TIMEOUT时间,默认是60

修改方式:

编辑 /etc/sysctl.conf 文件,加入参数内容,以上5个参数是我查到的认为有效的结果,然后我的实际情况仅修改了其中三个:

net.ipv4.ip_forward=1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

编辑完成后执行命令 /sbin/sysctl -p 让参数立即生效。至于气他参数就看具体情况了。我这种修改方式是直接永久保存的,不会受网络服务重启,系统重启等的影响,若要临时修改请自行查询命令。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

娃娃 哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值