最近在我們的zabbix 服務器上發現zabbix unreachable poller processes more than 75 busy的報警,
然后就看了一下zabbix的內部進程監控發現如下:
unreachable poller processes 一直在處於busy的狀態,那這個具體代表什么意思呢,查看官方文檔
zabbix internal process
unreachable poller - poller for unreachable devices 用於輪詢不可到達到的設備;
什么時候會出現這種情況:
1.通過Zabbix agent采集數據的設備處於moniting的狀態但是此時機器死機或其他原因導致zabbix agent死掉server獲取不到數據,此時unreachable poller就會升高。
2.通過Zabbix agent采集數據的設備處於moniting的狀態但是server向agent獲取數據時時間過長,經常超過server甚至的timeout時間,此時unreachable poller就會升高。
目前我個人發現unreachable poller升高基本都是以上兩種原因導致的。
雖然Zabbix的監控警報各種有,但Kaijia使用碰到最多的幾個莫過於內存耗盡,網絡不通,IO太慢還有這個“Zabbix poller processes more than 75% busy”了。一開始的時候因為這個即不影響使用也持續一會兒就自行解決就沒有多在意。然后隨着數據庫的增大,Zabbix消耗的內存可是越來越多,Poller processes(輪詢)開始天天Busy了,最終Kaijia不得不把Zabbix挪到了另外一台服務器上。
但這並沒有徹底解決問題,警報仍然三天兩頭來幾個。之后Kaijia開啟了Zabbix警報的郵件功能,於是開始頻繁收到這類郵件,於是Kaijia決定解決這個問題。Google了一下資料,沒有找到很權威的答案,造成輪詢忙的問題有很多中,支撐Zabbix的MySQL卡住了,Zabbix服務器的IO卡住了都有可能,Zabbix進程分配到內存不足都有可能。一個簡單的方法是增加Zabbix Server啟動時初始化的進程數量,這樣直接增加了輪詢的負載量,從比例上來講忙的情況就少了。
增加初始化進程的方法非常簡單,編輯Zabbix Server的配置文件/etc/zabbix/zabbix_server.conf,找到配置StartPollers的段落:
### Option: StartPollers
# Number of pre-forked instances of pollers. # # Mandatory: no # Range: 0-1000 # Default: # StartPollers=5
取消StartPollers=一行的注釋或者直接在后面增加:
StartPollers=10
將StartPollers改成多少取決於服務器的性能和監控的數量,Kaijia將StartPollers設置成12之后就再沒有遇到過警報。如果內存足夠的話可以設置更高。設置完成之后運行:
service zabbix-server restart
重啟Zabbix。當然另外一種從整體上降低Zabbix服務器負載的方法就是定期重啟Zabbix,這種方法可以用Cron實現,運行:
crontab -e
在調出的Cron編輯器中增加一個計划:
@daily service zabbix-server restart > /dev/null 2>&1
這個計划會每天自動重啟Zabbix服務以結束僵屍進程並清理內存等。目前Kaijia這樣配置Zabbix后還沒有再次遇到過“Zabbix poller processes more than 75% busy”的問題。