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