這個問題,大家在使用php redis之后肯定都會遇到。所以本菜本着虛心求教的原則,又在網上四處求教。得到的答案,無非是以下兩種:
1、redis沒有主動close。
事后發現,這個答案純屬以訛傳訛,胡說八道。
2、配置/etc/sysctl.conf,更改如下配置:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 20
關於這個方案,雖然比較靠譜,但沒完全正中靶心。執行/sbin/sysctl -p之后,發現timewait狀態的連接沒有改善。
經過一番查找,終於本菜終於找到了原因,解決方案的配置如下:
/etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_fin_timeout = 20
配置完成之后,執行/sbin/sysctl -p,再次運行redis,問題解決。
資料參考:
http://www.2cto.com/net/201503/381132.html 服務器tcp連接timewait過多優化及詳細分析