php连接redis导致系统对外tcp连接端口太多问题

这段时间在做一个项目中,大量运用到了redis,用了很多后台进程跑任务。

后台脚本是个死循环,由于连接redis的类有问题,导致每次进行操作都会进行一次connect,产生一个新连接。一段时间后连接redis的tcp端口过多,超出了系统的默认限制。使用netstat命令查看端口连接数,系统对外端口连接数默认是28232个,使用命令cat /proc/sys/net/ipv4/ip_local_port_range 得出结果32768 61000,意思是系统随机分配端口的范围,28232=61000-32768.

当时做了临时解决,及时close掉redis,但是查看tcp连接,还会保持一定数量的tcp 连接 状态time_out。为什么呢?虽然客户端关闭了连接,但是系统依然会保持这个tcp连接一段时间,时间是msl的2倍,通常是1分钟。使用命令 cat /proc/sys/net/ipv4/tcp_fin_timeout可查看系统保持时间.

MSL 是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。

2MSL即两倍的MSL,TCP的TIME_WAIT状态也称为2MSL等待状态

后来,对redis的连接类做了修改,使用单例,将连接资源存入一个static变量数组中,注意获取连接资源时,需要加上ping,判断该连接资源是否可用。防止redis服务端主动断开连接或者超时,使该连接失效。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值