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

posted @ 2020-10-22 10:51  别叫我二叔  阅读(645)  评论(0)    收藏  举报