概述:
首先我的zabbix server相关的组件全部是以docker容器方式部署。
在批量添加zabbix主机的时候,突然发现前端提示我zabbix server is not running **** ,我意识到我的zabbix server挂了,然后我去抓docker日志,在日志中发现我遇到了zabbix server服务在容器里oom的问题,具体报错如下:
__zbx_mem_malloc(): out of memory ******
__zbx_mem_malloc(): please increase TrendCacheSize configuration parameter
然后我docker inspect 2afef21d0549先确定了下是否是我本身在启动容器的时候对容器内部服务做了内存限制:(答案是我没有对容器服务内存做限制)。
解决办法:
遇到这种问题只能去修改zabbix_server.conf去增大CacheSize与TrendCacheSize等控制内存参数的配置项,修改方法在上个博客Zabbix错误:zbx_mem_malloc(): out of memory的解决方法_心软且酷丶的博客-CSDN博客
已经说明,我这里把着这两项修改为:
TrendCacheSize=512M
CacheSize=2G
修改完之后需要重启此docker服务,但是一旦重启,你的配置就全部又会还原,那怎么办呢?
使用制作新镜像的方法来解决这种问题:(docker commit )
(1)原docker修改zabbix_server.conf
先在原来的容器服务里修改zabbix_server.conf
使用root用户交互方式进入原容器:
docker exec -it --user=root 2afef21d0549 /bin/sh
修改zabbix_server.conf配置文件:
vi /etc/zabbix/zabbix_server.conf
修改完毕后:wq!保存退出
(2)保存修改之后的容器commit为新镜像
容器id要与原来保持一致
docker commit 2afef21d0549 zabbix/zabbix-server-mysql:latest
此时docker images 看下镜像仓库是否已经生成新保存的镜像:
docker images
(3)启动新镜像
首先zabbix之前镜像里有link连接与其他服务相关连,但是新镜像对原来的docker的link配置是不会保存的,所以启动时候需要手动link
带参数启动新镜像:
-e 传入环境变量env
--link 关联其他服务配置
--name 以什么名称去启动
-p 端口映射
docker run -d -e ZBX_CACHESIZE=2G -e ZBX_TRENDCACHESIZE=512M --name zabbix-server-mysql-new -p 10051:10051 --link zabbix-java-gateway --link mysql-server cc5743c69723
(4)验证修改的配置是否正常
docker inspect 2afef21d0549
link配置正常
新增env参数正常
进入容器内部检查修改是否已经生效:
docker exec -it --user=root 2afef21d0549 /bin/sh
cat /etc/zabbix/zabbix_server.conf | grep CacheSize
很明显已经生效,
再打印下此dokcer服务日志,并重复oom之前添加机器的操作,日志也已恢复正常。
docker logs -f 2afef21d0549
写在最后:
大功告成,我想以后遇到同类型的问题时候大家也能举一反三,以此种方式去永久保存修改配置之后的容器。
当然还有类似通过volume挂载本地文件的方式去解决,我这里就不再赘述,基本都是依赖于制作新镜像的方式去做。