关于端口reuse的问题

最近在调试php程序的时候发现了一个很郁闷的问题

自己写的程序是将大概22w条数据post到指定接口

程序在服务器A运行得好好的,但是一放到服务器B就会出现post失败的现象

22w条大概会失败3w多条,而且是间断并且随机的post失败

我用的是curl库,curl_exec后返回false

后面经人指点才知道原来是端口惹的祸

因为curl库在post请求的时候是在底层创建tcp连接的

每次创建可能都是使用不同的端口,端口在被使用后不会立马被关闭

而是置于 TIME_WAIT状态一定时间(2*msl)以保证数据不会丢失

这一策略可以保证TCP的可靠性,但是如果程序占用过多端口导致端口不够用时,就会报端口被占用的错误信息。

最后解决的方法是编辑/etc/sysctl.conf文件,增加三行:
  引用
  net.ipv4.tcp_tw_reuse = 1
  net.ipv4.tcp_tw_recycle = 1
  说明:
  net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
  net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
  再执行以下命令,让修改结果立即生效:
  /sbin/sysctl -p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值