zsyzhou 发表于 2015-9-9 10:01:59

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

问题状态:
  zabbix_agentd不能启动,系统CentOS 5.8 i386

原因分析:
  这是因为内核对share memory的限制造成的。
  用到如下命令ipcs [-m|l|a],sysctl [-a|p]



# ipcs -l
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 0
max total shared memory (kbytes) = 0
min seg size (bytes) = 1
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767
------ Messages: Limits --------
max queues system wide = 16
max size of message (bytes) = 65536
default max size of queue (bytes) = 65536
  从上面可以看到max total shared memory和max seg size都是没有限制的。但是zabbix仍然不能allocate内存。
  接下来查看目前的共享内存设置,



# sysctl -a|grep shm
kernel.shmmni = 4096
kernel.shmall = 0
kernel.shmmax = 0
  其中kernel.shmall代表总共能分配的共享内存,kernel.shmax代表单个段能allocate的内存(以字节为单位),这里都是0,所以肯定有问题。
  然后查看/etc/sysctl.conf



kernel.shmmax = 68719476736
kernel.shmall = 4294967296
  得到shmall为4G,shmax更大,为64G,因为是32位系统,所以设置shmall的时候不能超过32位系统能识别的最大内存,所以最多能设置为3G多,所以这个我改为



kernel.shmmax = 1294967296
kernel.shmall = 3294967296
  然后执行sysctl -p生效,这时再查看如下。



# sysctl -a|grep shm
kernel.shmmni = 4096
kernel.shmall = 3294967296
kernel.shmmax = 1294967296
  的确生效了,然后启动zabbix_agentd成功,查看内存分配情况如下。



# ipcs -m
------ Shared Memory Segments --------
key      shmid      owner      perms      bytes      nattch   status      
0x7401840e 2916352    root      600      4          0                     
0x6c0180cf 3047425    zabbix    600      527272   6
  
  其实不光zabbix,很多程序出现此错误也能使用该方法解决,就是因为内核对资源的限制问题。
  
  
页: [1]
查看完整版本: 解决zabbix的cannot allocate shared memory of size错误