zabbix-agent启动报错 zabbix_agentd [23122]: cannot create Semaphore: [28] No space left on device
问题现象:
每隔5分钟zabbix-agent客户端重启一次,重启时分配共享信号,当信号量超过系统设置的值之后就会重启失败,这是zabbix-agent客户端就会失联。
重启不起来时zabbix-agent大量报错:
zabbix_agentd [23122]: cannot create Semaphore: [28] No space left on device
zabbix_agentd [23122]: unable to create mutex for log file
临时规避:
查看信号量命令: ipcs -s
清理命令:ipcs -s | awk '/zabbix/{print $2}' | xargs -n 1 ipcrm -s
然后重启即可
那么为什么会每隔5分钟重启一次zabbix呢?
继续定位原因,发现和 */5 * * * * /bin/bash /etc/zabbix/scripts/asmonitor.register 这个定时任务有关,机器已经移到新的zabbix-server了,这个脚本调的接口还是之前老的地址:url=xxx.xxx.xxx.xx:8888/zabbix/api_jsonrpc.php
导致脚本is_registed这个变量取到的值非预期,然后走到了错误的分支:
else
echo "need to restart zabbix_agentd"
pid=$(cat /var/run/zabbix/zabbix_agentd.pid)
kill -9 $pid
service zabbix_agentd start
使用的是kill命令,杀掉的只是zabbix-agent的主进程,zabbix-agent产生的子进程需要和主进程通信,所有每次杀掉一次,上面提到的共享信号会越来越多,超过阈值,就会出现重启或者开始不起来的情况,子进程也会变孤儿进程(虽然会被init回收没有危害)。
出现问题的主机,系统是centos7,service zabbix_agentd start命令是无效的,zabbix-agent客户端被拉起来实际上是systemd程序拉起来的。(/lib/systemd/system/zabbix-agent.service 这个文件里面这个配置,Restart=on-failure)

浙公网安备 33010602011771号