天天看点

zabbix_agentd启动时IPC和共享内存段问题

问题1:

zabbix_agentd [16428]: cannot recreate Zabbix semaphores for IPC key 0x7a026869 Semaphore ID 4294967295: [22] Invalid argument

查看KEY为0x7a026869的信号队列:

[[email protected] zabbix]# ipcs 0x7a026869

--------- 消息队列 -----------

键 msqid 拥有者 权限 已用字节数 消息

------------ 共享内存段 --------------

键 shmid 拥有者 权限 字节 nattch 状态

0x6c026869 98304 admin 600 657056 6

--------- 信号量数组 -----------

键 semid 拥有者 权限 nsems

0x7a026869 196608 admin 600 13

原因:

我这里zabbix_agentd启动的时候配置的属主属组是zabbix,而之前估计是启动的时候用了admin身份,导致这里的信号量数组和共享内存段的属主都是admin,可能是因为某种原因非正常关闭了zabbix_agentd,导致这里的内容没有关闭,但是每个进程启动的时候其key值是固定的,所以当我修改了zabbix_agentd启动属主属组的时候,它没有权限删除和重新创建信号量数组,从而出现了无法启动的问题;

解决办法(两种方法都已验证):

方法1:删除信号量数组

ipcrm -S 0x7a026869

然后启动zabbix agentd就可以了。

方法2:直接修改zabbix_agentd的启动属主为admin即可正常启动。

下图为zabbix_agentd以zabbix属主身份启动之后查看相关信号队列和共享内存段的信息:

zabbix_agentd启动时IPC和共享内存段问题

[[email protected] admin]# ipcs 0x7a026869

--------- 消息队列 -----------

键 msqid 拥有者 权限 已用字节数 消息

------------ 共享内存段 --------------

键 shmid 拥有者 权限 字节 nattch 状态

0x6c026869 98304 zabbix 600 657056 6

--------- 信号量数组 -----------

键 semid 拥有者 权限 nsems

0x7a026869 196608 zabbix 600 13

问题2:

zabbix_agentd [19609]: cannot attach to existing shared memory: [13] Permission denied

19609:20170714:101213.480 cannot allocate shared memory for collector

查看共享内存段:

[[email protected] zabbix]# ipcs -m

------------ 共享内存段 --------------

键 shmid 拥有者 权限 字节 nattch 状态

0x6c026869 0 admin 600 657056 0

[[email protected] zabbix]# ipcrm -m 0x6c026869

ipcrm: 解析参数失败: '0x6c026869'

删除共享内存(注意,这里对共享内存段的操作要使用shmid值):

[[email protected] zabbix]# ipcrm -m 0