zabbix-agent在一臺centos6.5上啓動報錯:centos
cannot allocate shared memory of size 949056: [28] No space left on device
cannot allocate shared memory for collector
# sysctl -a | grep shm kernel.shmmax = 33554432 kernel.shmall = 2097152 kernel.shmmni = 4096
kernel.shmmax 單個共享內存段的最大尺寸,單位byte
kernel.shmall 系統可分配共享內存段的最大值,單位是頁
kernel.shmmni 共享內存段的最大數量spa
還能夠經過另外一個命令查看:日誌
# ipcs -l ------ Shared Memory Limits -------- max number of segments = 4096 max seg size (kbytes) = 32768 max total shared memory (kbytes) = 8388608
max number of segments 對應 kernel.shmmni
max seg size (kbytes) 對應 kernel.shmmax (33554432 / 1024 = 32768)
max total shared memory (kbytes) 對應 kernel.shmall (能夠計算出頁的大小了:8388608 * 1024 / 2097152 = 4096)code
下面開始分析問題,經過日誌能夠看到zabbix-agent須要的交換內存大小是949056,遠小於kernel.shmmax(33554432),因此該參數沒問題;blog
用下面的命令能夠查看交換內存的分配狀況(爲方便展現這裏是一臺正常運行了zabbix-agent的主機):ip
# ipcs -m ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x6c0105b0 0 zabbix 600 365056 6
在此基礎上,統計下交換內存已經被用了多少(回到問題主機):內存
# ipcs -m | grep '^0x' | awk '{print $5}' | awk '{sum+=$1}END{print sum}' 1805120
1805120,遠小於kernel.shmall(2097152 * 4096) ,因此該參數也沒問題;it
到這裏已經只剩下一個緣由,數量被佔滿了:class
# ipcs -m | grep '^0x' | wc -l 4096
這時候能夠經過 ipcs -m 看看是哪些程序把數量佔滿了,如有異常能夠選擇用 ipcrm 釋放,都是正常佔用的話就選擇提升最大數量(這裏提升到兩倍):awk
# sysctl -w kernel.shmmni=8192
若但願重啓系統後依舊有效,把該參數寫入配置文件:
# /etc/sysctl.conf kernel.shmmni = 8192
(另兩個參數的修改方式是同樣的)
over