最近處理了一個拖了我差不多一個月的問題,因為win不是很擅長,所以這裡記錄下大概的解決過程。
伺服器 telnet其他伺服器埠和本機埠都無法telnet通,且無法訪問網頁,但可以正常ping通伺服器,更奇怪的是每次只需要重啟伺服器就可以解決
說明:其他伺服器埠都是正常的,也不存在防火牆問題
無法訪問百度或者自己的網頁。
這裡確認是已經關閉防火牆了。
禁用網卡,然後重開網卡,但是還是不行,這裡要注意如果禁用網卡就不能遠程伺服器了(忽略過一次)...
不要問我怎麼禁網卡...
沒有什麼有效信息。
下面開始有進展了。
微軟上看到有提示相關漏洞,當Windows2008R2系統運行時間超過497天,TCP/IP的網絡資源(埠)就不會再自動釋放,在運行一段時間後,本機的網絡資源就會被全部用光。這樣就會造成系統中任何需要網絡資源的組件都無法正常工作。
官網提示解決辦法為打一個SP1的補丁,和一個修補程序。
下載補丁windows6.1-KB976932-X64.exe(sp1補丁)和442685_intl_x64_zip.exe
SP1的補丁可以去官網下載http://www.microsoft.com/zh-cn/download/details.aspx?id=5842442685_intl_x64_zip.exe官網下載
這兩個補丁我已共享在我的百度網盤
連結:https://pan.baidu.com/s/1IzoeO3f8b82TaM65OjnHkw
提取碼:wy5t
複製這段內容後打開百度網盤手機App,操作更方便哦
補充說明:打了補丁後重啟伺服器觀察了幾天還是有這種情況。
5.1、默認的動態埠範圍:
在Windows vista和windows server 2008以前的系統中動態的客戶端埠範圍是1025到5000;在Windows vista和windows server 2008中,為了遵守IANA的推薦,把範圍擴展成49152到65535。在Windows vista和windows server 2008的環境中,可以用如下命令查看這些配置:
netsh int ipv4 show dynamicport tcp
netsh int ipv4 show dynamicport udp
netsh int ipv6 show dynamicport tcp
netsh int ipv6 show dynamicport udp
5.2、重新配置
使用如下命令可以重新配置:
netsh int set dynamic start=number num=range
修改如下:
netsh int ipv4 set dynamicport tcp start=1025 num=60000
netsh int ipv4 set dynamicport udp start=1025 num=60000
netsh int ipv6 set dynamicport tcp start=1025 num=60000
netsh int ipv6 set dynamicport udp start=1025 num=60000
如上所示,可以為每種傳輸層協議及每個版本的IP協議進行單獨的設置,start的最小值是1025,num指的是範圍,最小值是255。
5.3、測試伺服器是否能正常telnet和訪問
好吧,問題臨時解決。
可以看到百度也可以訪問了。
作業系統默認TIME_WAIT的TCP連接回收時間是4分鐘,TCP默認動態埠範圍為開始埠49152,結束埠65535。這樣會使回收TCP過慢導致系統吞吐量下降,甚至出現502訪問失敗問題。
在Windows開始菜單中,單擊「運行」,在「運行」對話框中,輸入「regedit」後按「Enter」打開註冊表編輯器。
在「註冊表編輯器」中打開「HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters」路徑。
在「編輯」菜單中,選擇「新建 > DWORD (32-位)值」,輸入名稱「TcpTimedWaitDelay」。
右鍵單擊TcpTimedWaitDelay,選擇「修改」。
在「編輯 DWORD(32位)值」對話框的「基數」區域中,選擇十進位值為「30」,並「確定」。(將4分鐘修改為2分鐘)
netstat -ano >> c:\\cmd.txt
因為輸出有點多,所以拿到外面來具體分析。
內容如下:
可以看到88這台伺服器(zabbix)有很多time_wait的連接
說明:time_wait狀態的tcp連接:
1.這是一種處於連接完全關閉狀態前的狀態;
2.通常要等上4分鐘(windows server)的時間才能完全關閉;
3.這種狀態下的tcp連接占用句柄與埠等資源,伺服器也要為維護這些連接狀態消耗資源;
4.winserver解決這種time_wait的tcp連接只有讓伺服器能夠快速回收和重用那些TIME_WAIT的資源:修改註冊表[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\Tcpip\\Parameters]添加dword值TcpTimedWaitDelay=30(30也為微軟建議值;默認為2分鐘)和MaxUserPort:65534(可選值5000 - 65534);
表格中的state是TCP連接在agent和server不同階段時的狀態。我們假設每個階段,agent和server都會得到正確的狀態!
passive agent通信的過程如下:
注意:
使用TCP協議,是為了在不可靠的網絡環境中創建可靠的連接!zabbix並不支持UDP和長連接的方式(persistent connection)
到這裡問題基本解決了,不過還得後面繼續觀察,所以先記錄到這裡了。後面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~
如果你覺得這篇文章對你有幫助, 請小小打賞下.