专栏首页千里行走devops-1:"测试环境apollo配置服务频繁宕机"的问题解决

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

(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

本文分享自微信公众号 - 千里行走(a_thousands_of_miles),作者:醉

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • nginx-1:生产级别nginx高性能配置

    笔者在github提供了完整的配置文件,同时包含代理基础组件的conf,这些基础组件都是部署在容器里,通过ingress-nginx暴露到外部,然后在通过ngi...

    千里行走
  • kubernetes-issue-1:ephemeral-storage引发的pod驱逐问题

    A.0/1 nodes are available: 1 node(s) had taints that the pod didn't tolerate.

    千里行走
  • kubernetes-16:制作oraclejdk镜像

    https://github.com/hepyu/oraclejdk-docker-image

    千里行走
  • 新版RTSP视频平台EasyNVR视频广场分页数据展示优化

    时代在不断进步,大众的审美在不断变化,同时对视频直播的要求也在升高。因此我们总会对我们的视频平台不断做升级,以适应大众的需要。在开发过程中我们也会不断做记录。

    EasyNVR
  • 一文读懂负载均衡之LVS

    根据官方文档LVS支持三种负载工作方式:NAT方式、TUN方式和DR方式。为了说明这三种方式的工作原理,我们首先需要了解一下基础的IP/TCP报文(注意,IP报...

    黄泽杰
  • Linux指定执行文件的动态库路径

      在Linux中添加动态库路径可以设置LD_LIBRARY_PATH路径。如添加/mylib动态库路径:

    Qt君
  • 吴恩达机器学习笔记-5

    假设我们未知两个的特征: ?1 :长度, 用厘米表示; ?2:是用英寸表示同一物体的长度。

    happy123.me
  • sql基础知识:日期的常用用法

    日期操作 select sysdate,add_months(sysdate,12) from dual; -- + 1 year select sysdate...

    用户1154259
  • 数据加密技术再加强,Twitter全力应对NSA信息安全威胁

    据国外媒体报道,为了防范美国国安局(NSA)的监听,保障自身和用户的数据安全,Twitter将现有加密技术之外再增加名为PFS(perfect fo...

    安恒信息
  • go笔记:go发起http get请求

    超级大猪

扫码关注云+社区

领取腾讯云代金券