解決zabbix的cannot allocate shared memory of size錯誤

問題狀態:
zabbix_server 不能啓動,系統CentOS 6.7ide

緣由分析:
這是由於內核對share memory的限制形成的。server

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

[root@server01 ~]# 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 siz e都是沒有限制的。可是zabbix仍然不能allocate內存。ip

接下來查看目前的共享內存設置,內存

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

其中kernel.shmall表明總共能分配的共享內存,kernel.shmax表明單個段能allocate的內存(以字節爲單位),這裏都是0,因此確定有問題。it

而後查看 /etc/sysctl.confclass

kernel.shmmax = 68719476736
kernel.shmall = 4294967296

獲得shmall爲4G,shmax更大,爲64G,由於是32位系統,因此設置shmall的時候不能超過32位系統能識別的最大內存,因此最多能設置爲3G多,因此這個我改成表單

kernel.shmmax = 1294967296
kernel.shmall = 3294967296

而後執行sysctl -p生效,這時再查看以下。map

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

的確生效了,而後啓動zabbix_agentd成功,查看內存分配狀況以下。grep

[root@server01 ~]# ipcs -m

------ Shared Memory Segments --------
key shmid owner perms bytes nattch status 
0x7401840e 2916352 root 600 4 0 
0x6c0180cf 3047425 zabbix 600 527272 6
相關文章
相關標籤/搜索