TIME_WAIT過高問題

netstat -anp | awk '/^tcp/ {++S[$6]} END {for (a in S) print a, S[a]}'

timewait數(shù)量有8w

這個項目(php)跟一般網(wǎng)站不同,主要是做一些適配分發(fā),就是有請求過來,就調(diào)用其他接口返回。因為是提供給內(nèi)網(wǎng)機器調(diào)用,所以請求的ip都是比較固定的幾個。http請求,沒有做長連接。

timewait比較高,但是load卻很平穩(wěn),同時請求的機器卻時不時會顯示timeout(3秒timeout)

修改/etc/sysctl.conf
增加了
net.ipv4.ip_local_port_range = 9000 65500
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 6
?sysctl -p

其中一臺機器,timewait下降到4w。另外一臺機器卻沒有變化……

因為之前用的apache,后來改成用nginx,并沒有好轉,還是會有超時情況發(fā)生。

感覺是要改用長連接了,之前redis因為連接數(shù)過高,改為用長連接之后就沒事了。但是改動上面的配置為什么一臺機有效,另外一臺卻沒有效果也是很奇怪。

下面是找的過程中看的一些文章的想法:

1. 其實timewait高應該沒有什么影響,只要CPU還在正常范圍就行了

2. 占用端口問題。并不是真正占用了一個端口,基于linux萬物皆文件的原理,只是產(chǎn)生了一個文件的handler,所以能提供多少鏈接的數(shù)量,應該跟能打開文件的數(shù)量差不多的。意思就是不止是6w多個。但是一個端口對應一個ip的話,好像就只能是6w多個。具體原因忘記了,要翻開文章來看。

3. 用keepalive其實能解決timewait過高的問題,因為請求完不關閉等待下一次請求。但是在我們這個場景是不適用的,因為php的curl請求并不支持長連,即使服務器開了keepalive也沒有效果。php實現(xiàn)長連接需裝pecl_http擴展 https://pecl.php.net/package/pecl_http /?https://mdref.m6w6.name/http (文檔)

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容