解決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 = 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內存。

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

[root@server01 ~]# 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生效,這時再查看如下。

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

的確生效了,然后啟動zabbix_agentd成功,查看內存分配情況如下。

[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  

 

其實不光zabbix,很多程序出現此錯誤也能使用該方法解決,就是因為內核對資源的限制問題。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM