前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >devops-1:"测试环境apollo配置服务频繁宕机"的问题解决

devops-1:"测试环境apollo配置服务频繁宕机"的问题解决

作者头像
千里行走
发布2019-07-03 17:51:58
1.2K0
发布2019-07-03 17:51:58
举报
文章被收录于专栏:千里行走千里行走

(1).异常现象

异常现象:2019-1-21~2019-1-22测试环境的apollo频繁宕机,大概有4~5次。

日志内容:提示内存不够。

(2).分析过程

测试环境的apollo机器只有一台,上边有两组应用:apollo和rocketmq。分别分析这两组应用。

先看系统内存:

很明显问题非常大,特别是cache,测试环境的体量不可能用到这么多cache。

我们需要分析哪些进程或者文件占用了这么多的cache,使用linux-fincore,统计结果:

如上图,可以看到,有个日志明显有问题,查看归属进程:

可以看到属于rocketmq-namesrv的gc日志,我们看看日志大小:

和fincore分析出的数据一致,那问题来了,为什么磁盘上的日志文件会占用内存的cache?

df -h看看磁盘,发现/dev/shm这个目录是在tmpfs文件系统上,tmpfs文件系统是很特殊的:

tmpfs,临时文件系统,是一种基于内存的文件系统。

内存的cache部分除了包含应用&磁盘的pageCache外,还包含tmpfs文件系统的cache。

真实原因:

rocketmq的gc日志默认打到了tmpfs文件系统上,也就是打到了内存里。

解决方法也很简单:

方法一:把gc日志文件改一个位置就可以了。

方法二(别这么干):把gc文件删除,相当于把内存中的这部分空间释放。

(3).归纳&总结

1.linux有一种机制叫oom killer.

Linux 内核有个机制叫OOM killer(Out Of Memory killer),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存 耗尽而自动把该进程杀掉。

至于怎么选择杀掉那个进程,这个策略由内核决定。

2.tmpfs文件系统是一种基于内存的文件系统。

3.看到的未必是真实的,要顺着逻辑理。

4.这个问题又一次说明了为什么“云上的容器化"大行其道,容器互相隔离,互不影响。

(4).后续

1.apollo和rocketmq的容器化,apollo已经支持k8s容器化,两种方式:

k8s部署方式:

https://github.com/ctripcorp/apollo/blob/master/scripts/apollo-on-kubernetes/README.md

helm安装方式:

https://github.com/qct/apollo-helm

2.rocketmq方面,有一个rocketmq-operator:

https://github.com/huanwei/rocketmq-operator

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 千里行走 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档