線上服務器遇到幾次相同現象的問題:可以正常遠程訪問服務器,資源消耗不多,但是網頁或是socket無法連接,連接錯誤是ERR_CONNECTION_REFUSED,也就是服務器拒絕了。首先可以確認不是ddos流量攻擊,因為流量攻擊肯定遠程也連不上。導致這個問題的絕大部分原因是服務器的TCP連接被占滿了。從資源管理器中看到的是10,滿的,全綠,並不是表示有10個鏈接,而是表示量級是10級
怎么占滿的呢?我們遇到了這幾個情況:
-
客戶端有bug,在斷線重連的時候有一個死循環不斷請求連接,服務器重啟的時候很多客戶端同時連接,把TCP占滿了
-
php后台,apache環境,配置有問題,導致php大量請求沒有釋放。后來改成nginx解決的
-
cc攻擊,大量請求訪問網站,導致TCP占滿
如果遇到了這個問題,如何查看呢,打開Windows Task Manager(任務管理器)->Performance(性能)->Resource Monitor(資源監視器),在這個頁面會看到TCP連接數的圖表,在右邊,正常情況是沒有占滿的,如果出現問題會顯示滿了,變成0-10,看不到現在是多少,這時候可以在Run(運行)中輸入perfmon.msc打開Performance Monitor(性能監視器),在菜單欄,點擊加號,選擇IPv4(如果你的程序是IPv6,那就選擇IPv6),添加進來,就可以具體看到TCP的連接數和曲線,也可以看到是哪個進程占用的多。