一、問題的展示
windows
在zabbix上有那麼幾個 IP 反覆地報錯「Zabbix agent on XXXX is unreachable for 10 minutes
」,用telnet測試客戶端端口沒問題,正常。過上那麼或幾分鐘或幾十分鐘,就消失了,而後一會就又報警,這樣下來機器的數據曲線是斷斷續續的,影響雖不大,不過挺煩人。SA上去也不仔細看,把服務一重啓也無論有沒有解決問題。
後來我本身上去,查看服務端日誌。除了說「某個Key 的數據沒法得到,超時而失敗的」,就是另外一個「first network error」的。用手工測試,使用zabbix_get去得到agent上的數據,沒問題,可是會出現「延遲而失敗」的狀況。爲啥失敗,卻找不到緣由。
網絡聯通應該是沒問題的,雖然報的是「first network error」.百度了一下,有說是key 錯誤導
致延遲了,本身在虛擬機上故意把key寫錯,也出不了這個錯誤。有說是zabbix_server端的內存不足的,我也試了下,也沒出這個錯誤,並且server的內存自己也有監控,再說,若是是內存的問題,爲何別機器不報錯,而只有這幾臺呢?服務器
二、查找問題緣由網絡
考慮到這個問題,絕對是那臺客戶端的問題。上去查看沒問題,服務也正常,跟正常機器對比配置
文件,也沒問題。真個是怪了。後來想一想,查看一下他跟服務端的鏈接狀況吧,這一查沒關係,10050端口與服務器端口的鏈接從3W多一直刷到6W多,統計了下光10050這個居然有2W5+處在TIME_WAIT狀態,連日常我telnet 過去測試時的鏈接都停在那裏。當我停掉zabbix_agent服務,這些狀態也是不釋放的。想一想也是,我telnet的狀態他都存了5條在裏面呢,那些狀態都僵死到那了,致使agent端口沒法釋放,過於繁忙,因此服務端跟客戶端沒法創建鏈接,最後就失敗了,由於是端口超級忙,因此便返回了"first network error"的錯誤。在服務器端,這些鏈接早就已經銷燬了。雖然如此,可是卻仍然是能夠telnet上的,並且在使用zabbix_get測試的時候也能得到一些值,可是若是連續測試就會出現沒法獲取的狀況了。只能說agent很是忙,可是還沒死。這種忙是瞎忙。ide
三、分析問題緣由
測試
這樣問題的緣由就找到了,就是由於windows 2008R2沒能釋放佔用的端口讓進程的鏈接都處在了TIME_WAIT狀態,而致使正常的數據請求沒法創建鏈接。這樣服務器就認爲是網絡的錯誤,日誌裏便打印了「first network error」的錯誤。由於獲取不到數據,zabbix頁面就會顯示「agent is unreachable日誌
」了。當我百度查找相關錯誤時,server
發現有不少相似的問題,看看官網的意思是讓打補丁。如此看來 即便是重啓server以後,仍然會出現此類問題的。blog
好吧,無論怎麼說,緣由找到了,是windows工程師的問題。進程
光是這一個進程就生成了25270多個鏈接。另有一臺,生成了28000多個,這個命令臨時抄來的。若是去掉/C參數就會刷屏從服務器端30000+的端口一直到60000+端口。
內存
四、從新測試這個問題
正常的機器的鏈接狀況則是:下面這樣,20多個端口,也看key的狀況。可是會有刷新,服務端的端口會刷新。
然後我在出錯的客戶端上修改了配置文件將監聽端口改成10051,依然是鏈接越變越多
鏈接愈來愈多,而後我中止了服務
當鏈接達到100的時候我關閉了服務,而後他就停在這裏了。正常的機器的狀況是:
這個正常的機器最多時有27個鏈接,而後我關閉了服務,開始減小,直到沒有。
由於這種連接產生時,服務器使用隨機端口來這裏取數據,取完數據服務器便把鏈接銷燬了,而客戶端卻停在了TIME_WAIT狀態,而後下一次又來了新的不同的端口時,就又產生新的鏈接,而後又停在了這裏,假如當新來的端口偏偏上次已經來過,那麼便能順利的取走數據了,不能的話,由於這個端口的鏈接過多而失敗。
其餘的機器沒有這個問題,agent是一塊兒部署的,並且我測試用的也是這個agent的,所以能夠判定是系統的某些問題形成的。