一次线上zabbix server 挂掉的思考
突然间发现zabbix 挂了,咋发现的呢?报警的世界突然安静了,你就会觉得不妥了。这是运维人员的通病,有报警嫌烦,没报警心里会不安。
1,图形界面上确实显示zabbix server is not running
2,排查zabbix server 日志
tail /var/log/zabbix/zabbix_server.log
发现有如下报警:
zabbix_server [22890]: cannot open log: cannot create semaphore set: [28] No space left on device zabbix_server [22894]: cannot open log: cannot create semaphore set: [28] No space left on device zabbix_server [22898]: cannot open log: cannot create semaphore set: [28] No space left on device zabbix_server [22902]: cannot open log: cannot create semaphore set: [28] No space left on device zabbix_server [22907]: cannot open log: cannot create semaphore set: [28] No space left on device
3, 搜索一下发现是因为给系统配置的共享内存值不够,如何解决这个问题呢?需要分两步解决。
第一步:优化系统的kernel.sem 的配置参数怎么查看及四个对应参数的代表着个啥?
cat /proc/sys/kernel/sem 250 32000 32 128 250 SEMMSL max semaphores per array 信号集容纳最大信号数量 32000 SEMMNS max semaphores system wide 所有信号的最大数量 32 SEMOPM max ops per semop call 调用单个信号集中最大信号数量 128 SEMMNI max number of arrays 信号集的最大值
信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。Semaphore就像可以容纳N人的房间,如果人不满就可以进去,如果人满了,就要等待有人出来。Semaphore的属性如下:
SEMMSL
含义:每个信号量set中信号量最大个数 设置:最小250;对于processes参数设置较大的系统建议设置为processes+10
SEMMNI
含义:linux系统信号量set最大个数 设置:最少128
SEMMNS
含义:linux系统中信号量最大个数 设置:至少32000;SEMMSL * SEMMNI
SEMOPM
含义:semop系统调用允许的信号量最大个数设置:至少100;或者等于SEMMSL
4,目前系统的默认值是肯定不够了,不然zabbix 也不可能就挂了,所以先优化这个值。
echo “kernel.sem = 5010 641280 5010 128” >> /etc/sysctl.conf
然后执行 sysctl -p /etc/sysctl.conf
之后通过 sysctl -a |grep kernel.sem 确实修改是否成功
这个参数优化完成之后你是不是觉得zabbix server 可以正常启动了?我告诉你不可以的,你再次启动还是会报一开始抛的错。你问我为啥,因为zabbix 占用的共享信号量还没有释放,所以还是会报错,需要把共享信号量释放出来。
通过 ipcs 命名来查看zabbix 占用的共享信号量,如下图:
然后通过如下命令把这些共享信号量通通干掉;ipcs -s | grep zabbix | awk '{print $2}' | xargs -n 1 ipcrm -s
干掉之后就可以正常启动zabbix server了。
5,总结
问题是解决了,但是需要思考为啥会有这样的问题产生,还是因为自己工作中没有能够防患于未然,该做的优化没有做,给自己留下了坑,最终还是要自己来填,所以工作要尽量能够提前把该做的做好,不然就会应了《无间道》那句台词“出来混,早晚要还的!”
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python脚本监控mysql数据库,Python脚本监控mongo数据库
任务:应帅气的领导要求,需要监控生产环境mysql和mongo数据库服务。不仅要connect successful还要进行数据交互进一步确认数据库服务正常。 思路:mysql和mongo 数据库ip、端口、用户名、密码、认证库(mongo)分别写在mysqldb_message.txt和mongodb_message.txt两个文件中。查询脚本db_test.py,邮件脚本sendEmail.py.. 格式如下: mysqldb_message.txthost:192.168.0.32 user:test passwd:123456 port:3306host:192.168.0.222 user:test passwd:123456 port:3307host:192.168.1.101 user:cctest passwd:Yj7netlkj port:3990 .. mongodb_message.txthost:192.168.1.101 user:errorbook passwd:wangyue port:37017 authDB:adminhost:127.0.0.1 u...
- 下一篇
关于jHipster框架在构建中的出现的error修复
jhipster The JDL object and the database type are both mandatory.这个错误应该是在构建基于jHipster的spring-cloud项目中经常遇到的,因为这个在这个过程中会读取.yo-rc文件,之后生成相关的.json文件,再之后生成相关的.java文件,层层依赖,一环扣一环。以下是出错时的系统日志 yerlkyu@HP-Z440:/xxx/xxxx/jdls jhipster import-jdl pl.jdl INFO! Using JHipster vers ion installed globall, INFO! Executing import-jdl pl.jdlINFO! Options: from-cli: true INFO! The JDL is being parsed. Error: The JDL object and the database type are both mandatory. ERROR! Error while parsing applications and entities...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用