1. 程式人生 > >一次線上zabbix server 掛掉的思考

一次線上zabbix server 掛掉的思考

grep 產生 默認值 open int 你是 not run 如果 調用

突然間發現zabbix 掛了,咋發現的呢?報警的世界突然安靜了,你就會覺得不妥了。這是運維人員的通病,有報警嫌煩,沒報警心裏會不安。
1,圖形界面上確實顯示zabbix server is not running
2,排查zabbix server 日誌
tail /var/log/zabbix/zabbix_server.log
發現有如下報警:

   zabbix_server [22890]: cannot open log: cannot create semaphore set: [28] No space left on device
   zabbix_server [22894]: cannot open log: cannot create semaphore set: [28] No space left on device
   zabbix_server [22898]: cannot open log: cannot create semaphore set: [28] No space left on device
   zabbix_server [22902]: cannot open log: cannot create semaphore set: [28] No space left on device
   zabbix_server [22907]: cannot open log: cannot create semaphore set: [28] No space left on device

3, 搜索一下發現是因為給系統配置的共享內存值不夠,如何解決這個問題呢?需要分兩步解決。
第一步:優化系統的kernel.sem 的配置參數怎麽查看及四個對應參數的代表著個啥?

 cat /proc/sys/kernel/sem 
    250     32000   32      128

250       SEMMSL    max semaphores per array     信號集容納最大信號數量   
32000     SEMMNS    max semaphores system wide   所有信號的最大數量 
32        SEMOPM    max ops per semop call     調用單個信號集中最大信號數量 
128       SEMMNI    max number of arrays         信號集的最大值

信號量(Semaphore),有時被稱為信號燈,是在多線程環境下使用的一種設施,它負責協調各個線程, 以保證它們能夠正確、合理的使用公共資源。Semaphore就像可以容納N人的房間,如果人不滿就可以進去,如果人滿了,就要等待有人出來。Semaphore的屬性如下:
SEMMSL
含義:每個信號量set中信號量最大個數 設置:最小250;對於processes參數設置較大的系統建議設置為processes+10

SEMMNI
含義:linux系統信號量set最大個數 設置:最少128

SEMMNS

含義:linux系統中信號量最大個數 設置:至少32000;SEMMSL * SEMMNI

SEMOPM

含義:semop系統調用允許的信號量最大個數設置:至少100;或者等於SEMMSL

4,目前系統的默認值是肯定不夠了,不然zabbix 也不可能就掛了,所以先優化這個值。
echo “kernel.sem = 5010 641280 5010 128” >> /etc/sysctl.conf
然後執行 sysctl -p /etc/sysctl.conf
之後通過 sysctl -a |grep kernel.sem 確實修改是否成功
這個參數優化完成之後你是不是覺得zabbix server 可以正常啟動了?我告訴你不可以的,你再次啟動還是會報一開始拋的錯。你問我為啥,因為zabbix 占用的共享信號量還沒有釋放,所以還是會報錯,需要把共享信號量釋放出來。
通過 ipcs 命名來查看zabbix 占用的共享信號量,如下圖:
技術分享圖片

然後通過如下命令把這些共享信號量通通幹掉;
ipcs -s | grep zabbix | awk ‘{print $2}‘ | xargs -n 1

幹掉之後就可以正常啟動zabbix server了。
5,總結
問題是解決了,但是需要思考為啥會有這樣的問題產生,還是因為自己工作中沒有能夠防患於未然,該做的優化沒有做,給自己留下了坑,最終還是要自己來填,所以工作要盡量能夠提前把該做的做好,不然就會應了《無間道》那句臺詞“出來混,早晚要還的!”

一次線上zabbix server 掛掉的思考