解决zabbix的cannot allocate shared memory of size错误

问题状态:

zabbix_agentd不能启动,系统CentOS 5.8 i386

原因分析:

这是因为内核对share memory的限制造成的。

用到如下命令ipcs [-m|l|a],sysctl [-a|p]

[root@server01 ~]# ipcs -l—— Shared Memory Limits ——–max number of segments = 4096max seg size (kbytes) = 0max total shared memory (kbytes) = 0min seg size (bytes) = 1—— Semaphore Limits ——–max number of arrays = 128max semaphores per array = 250max semaphores system wide = 32000max ops per semop call = 32semaphore max value = 32767—— Messages: Limits ——–max queues system wide = 16max size of message (bytes) = 65536default max size of queue (bytes) = 65536

从上面可以看到max total shared memory和max seg size都是没有限制的。但是zabbix仍然不能allocate内存。

接下来查看目前的共享内存设置,

[root@server01 ~]# sysctl -a|grep shmkernel.shmmni = 4096kernel.shmall = 0kernel.shmmax = 0

其中kernel.shmall代表总共能分配的共享内存,kernel.shmax代表单个段能allocate的内存(以字节为单位),服务器空间,这里都是0,所以肯定有问题。

然后查看/etc/sysctl.conf

kernel.shmmax = 68719476736kernel.shmall = 4294967296

得到shmall为4G,shmax更大,免备案空间,为64G,因为是32位系统,所以设置shmall的时候不能超过32位系统能识别的最大内存,所以最多能设置为3G多,所以这个我改为

kernel.shmmax = 1294967296kernel.shmall = 3294967296

然后执行sysctl -p生效,香港服务器租用,这时再查看如下。

[root@server01 ~]# sysctl -a|grep shmkernel.shmmni = 4096kernel.shmall = 3294967296kernel.shmmax = 1294967296

的确生效了,然后启动zabbix_agentd成功,查看内存分配情况如下。

[root@server01 ~]# ipcs -m—— Shared Memory Segments ——–keyshmidownerpermsbytesnattchstatuszabbix

其实不光zabbix,很多程序出现此错误也能使用该方法解决,就是因为内核对资源的限制问题。

把自己当傻瓜,不懂就问,你会学的更多

解决zabbix的cannot allocate shared memory of size错误

相关文章:

你感兴趣的文章:

标签云: