zabbix问题:cannot allocate shared memory of size
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zabbix问题:cannot allocate shared memory of size相关的知识,希望对你有一定的参考价值。
问题状态:
zabbix_agentd不能启动,系统CentOS 5.8 i386
原因分析:
这是因为内核对share memory的限制造成的。
用到如下命令ipcs [-m|l|a],sysctl [-a|p]
1
|
[root@server01 ~]# ipcs -l
<br /><br /><p></p><p>------ Shared Memory Limits --------<br />max number of segments = 4096 <strong><br />max seg size (kbytes) = 0<br />max total shared memory (kbytes) = 0</strong><br />min seg size (bytes) = 1</p><p>------ Semaphore Limits --------<br />max number of arrays = 128<br />max semaphores per array = 250<br />max semaphores system wide = 32000<br />max ops per semop call = 32<br />semaphore max value = 32767</p><p>------ Messages: Limits --------<br />max queues system wide = 16<br />max size of message (bytes) = 65536<br />default max size of queue (bytes) = 65536</p>
|
从上面可以看到max total shared memory和max seg size都是没有限制的。但是zabbix仍然不能allocate内存。
接下来查看目前的共享内存设置,
1
|
[root@server01 ~]# sysctl -a|grep shm<br />kernel.shmmni = 4096<br />kernel.shmall = 0<br />kernel.shmmax = 0
|
其中kernel.shmall代表总共能分配的共享内存,kernel.shmax代表单个段能allocate的内存(以字节为单位),这里都是0,所以肯定有问题。
然后查看/etc/sysctl.conf
1
|
kernel.shmmax = 68719476736<br />kernel.shmall = 4294967296
|
得到shmall为4G,shmax更大,为64G,因为是32位系统,所以设置shmall的时候不能超过32位系统能识别的最大内存,所以最多能设置为3G多,所以这个我改为
1
|
kernel.shmmax = 1294967296<br />kernel.shmall = 3294967296
|
然后执行sysctl -p生效,这时再查看如下。
1
|
[root@server01 ~]# sysctl -a|grep shm<br />kernel.shmmni = 4096<br />kernel.shmall = 3294967296<br />kernel.shmmax = 1294967296
|
的确生效了,然后启动zabbix_agentd成功,查看内存分配情况如下。
1
|
[root@server01 ~]# ipcs -m<br /><br /><p></p><p>------ Shared Memory Segments --------<br />key shmid owner perms bytes nattch status <br />0x7401840e 2916352 root 600 4 0 <br />0x6c0180cf 3047425 zabbix 600 527272 6 </p>
|
其实不光zabbix,很多程序出现此错误也能使用该方法解决,就是因为内核对资源的限制问题。
以上是关于zabbix问题:cannot allocate shared memory of size的主要内容,如果未能解决你的问题,请参考以下文章
virtual memory exhausted: Cannot allocate memory
Error: cannot allocate vector of size XX Gb
Error: cannot allocate vector of size XX Gb
-bash:fork:Cannot allocate memory 问题的处理