本文主要介绍了通过日志linux查看zabbix-agent启动报错,通过具体的解释说明,让我们从中学到通过日志linux查看zabbix-agent启动报错的精髓所在,让我们对Linux内部原理越来越熟悉,希望大家能够在以后的学习中更加快速的弄明白其中的关键。便于更好的操作。

下面开始分析问题,通过日志可以看到zabbix-agent需要的交换内存大小是949056,远小于kernel.shmmax(33554432),所以该参数没问题。

问题

zabbix-agent在一台centos6.5上启动报错:

cannot allocate shared memory of size 949056: [28] No space left on device

cannot allocate shared memory for collector

检查

# sysctl -a | grep shm

kernel.shmmax = 33554432

kernel.shmall = 2097152

kernel.shmmni = 4096

kernel.shmmax        单个共享内存段的最大尺寸,单位byte

kernel.shmall           系统可分配共享内存段的最大值,单位是页

kernel.shmmni         共享内存段的最大数量

还可以通过另一个命令查看:

# ipcs -l

------ Shared Memory Limits --------

max number of segments = 4096

max seg size (kbytes) = 32768

max total shared memory (kbytes) = 8388608

max number of segments 对应 kernel.shmmni

max seg size (kbytes) 对应 kernel.shmmax (33554432 / 1024 = 32768)

max total shared memory (kbytes) 对应 kernel.shmall (可以计算出页的大小了:8388608 * 1024 / 2097152 = 4096)

解决

用下面的命令可以查看交换内存的分配情况(为方便展示这里是一台正常运行了zabbix-agent的主机):

# ipcs -m

------ Shared Memory Segments --------

key        shmid      owner      perms      bytes      nattch     status

0x6c0105b0 0          zabbix     600        365056     6

在此基础上,统计下交换内存已经被用了多少(回到问题主机):

# ipcs -m | grep ‘^0x‘ | awk ‘{print $5}‘ | awk ‘{sum+=$1}END{print sum}‘

1805120

1805120,远小于kernel.shmall(2097152 * 4096) ,所以该参数也没问题;

到这里已经只剩下一个原因,数量被占满了:

# ipcs -m | grep ‘^0x‘ | wc -l

4096

这时候可以通过 ipcs -m 看看是哪些程序把数量占满了,若有异常可以选择用 ipcrm 释放,都是正常占用的话就选择提高最大数量(这里提高到两倍):

# sysctl -w kernel.shmmni=8192

若希望重启系统后依旧有效,把该参数写入配置文件:

# /etc/sysctl.conf

kernel.shmmni=8192

(另两个参数的修改方式是一样的)

over

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐