nginx 打不開網站

nginx 打不開網站nginx


這個問題以前歷來沒有遇到過,因此費了很大週摺才發現並搞定。web

症狀: 網站沒法訪問vim

排查過程: tcp

1 w看負載,幾乎爲0ide

2 sar/nload看流量正常網站

3 top看各項指標正常,vmstat看也正常日誌

4 tcpdump抓包,看不出異常ip

5 nginx訪問日誌很是少,幾乎不新增日誌(意味着沒有正常的訪問出現)it

6 錯誤日誌沒有class

7 重啓nginx異常,表現爲服務殺不死,只能killall -9 nginx 殺死服務

8 ss -an 有比較多的LAST-ACK狀態,這個讓我開始懷疑,找了一臺正常的web機器,對比看 LAST_ASK爲0個,但這臺機器爲100多個。 因此最終開始在這個上面研究。

LASK_ACK狀態的含義是, 關閉一個TCP鏈接須要從兩個方向上分別進行關閉,雙方都是經過發送FIN來表示單方向數據的關閉,當通訊雙方發送了最後一個FIN的時候,發送方此時處於LAST_ACK狀態,當發送方收到對方的確認(Fin的Ack確認)後才真正關閉整個TCP鏈接應該是還在鏈接的!沒有收到確認的信息就會這樣。也能夠這麼說! 若是該通訊是你主動去創建的!那麼沒問題!若是是被動的話!那麼有問題了! 由於TCP/IP的創建要通過3次握手的!最後一次沒有收到確認的話!就會是這種狀態! 從原理上應該是這樣的!

因此,這就意味着,有人惡意不確認,不關閉鏈接。這樣致使LAST_ACK狀態太多。  若是這個狀態太多,確定會影響正常的tcp鏈接。

接下來就是減小甚至消滅這種狀態。

修改內核參數:

vim /etc/sysctl.conf 最後面加入

net.ipv4.tcp_keepalive_time = 10

net.ipv4.tcp_synack_retries = 2

net.ipv4.tcp_syn_retries = 2

保存後,運行 sysctl -p  再次觀察LAST_ACK逐漸減小,直至爲0

固然,最終web也恢復了正常。

相關文章
相關標籤/搜索