专业的信息化与通信融合产品选型平台及垂直门户
注册 登陆 设为首页 加入收藏
首页 企业新闻 招标信息 行业应用 厂商专区 活动 商城 中标信息

资讯
中心

新闻中心 人物观点
厂商专区 市场分析
行业
应用
政府机构 能源产业 金融机构
教育科研 医疗卫生 交通运输
应用
分类
统一协作 呼叫客服 IP语音 视频会议 智能管理 数据库
数字监控 信息安全 IP储存 移动应用 云计算 物联网

TOP

可能影响容器化应用程序的cgroup内存管理问题
2016-09-06 20:54:46 来源:INFOQ 作者:【
关键词:cgroup 内存回收 内存类型
 
近日,LinkedIn工程团队发表了一篇题为“不要让Linux控制组不受控制地运行”的文章。控制组(cgroup)是Linux的一项特性,像Docker和CoreOS这样的项目使用该特性限制进程的资源使用。

  近日,LinkedIn工程团队发表了一篇题为“不要让Linux控制组不受控制地运行”的文章。控制组(cgroup)是Linux的一项特性,像Docker和CoreOS这样的项目使用该特性限制进程的资源使用。该文概括地介绍了cgroup在内存管理方面存在的几个可能导致性能退化的问题以及可能的解决方案。

  Cgroup是一种可以确保应用程序使用的资源不超出限额的机制,但不保证隔离性。一个操作系统实例中可以运行多个cgroup,其中每一个所使用的内存、CPU等都有不同的限额。不过,当有额外的内存需求(文章作者称之为“内存压力”)时,操作系统的行为可能会导致在cgroup中运行的应用程序出现意料之外的不良结果。

  Cgroup是按层次组织的,操作系统在“根”cgroup中运行,其他cgroup都是根cgroup的子节点。例如,Docker容器会运行在根cgroup的一个子cgroup中。

  该文探讨的问题涉及“匿名内存”和“页面缓存”,前者是程序请求的内存,后者用来存储程序数据的缓存版本。通常,这些数据是保存在类似硬盘这样的永久性存储上,供程序执行时使用。缓存用于提高那些数据的访问速度。这两种内存类型的分配总是可以被根cgroup或操作系统作废。

  当主存可用时,操作系统会将页面缓存加载到RAM,但当应用程序请求额外的内存时,它会回收内存。内存回收会导致页面缓存被删除,这是跨cgroup的,因为在这种情况下,OS不会遵守cgroup自己的设置。这可能导致cgroup的页面缓存被回收,影响了应用程序的性能。

  当通过回收页面缓存满足了cgroup的内存需求时,另一个问题出现了。用于存储页面缓存的内存是cgroup内存限额的一部分。因此,如果cgroup(在Docker环境里,则是容器)分得了8GB内存,则它需要将这8GB的空间同时用于页面缓存和匿名内存。这一点很容易忽视,因而可能会导致错误的性能预期。

  当需要的主存超过系统可用的内存时,操作系统会执行交换操作,将存储在主存中的程序数据写入辅存,如硬盘。操作系统可以从任意子cgroup把用户内存交换出去,导致那些组中的应用程序性能退化。

  对于这些问题,文章作者提出了几项建议,其中包括“预触(pre-touching)”内存,即确保内存在进程启动时分配,而不是在程序请求时。在不同的平台上,具体的做法也不相同。另外,也可以更好地估计应用程序的内存占用,那样,内存分配就可以更准确。页面缓存不容易估计,但匿名内存很容易。匿名内存可以通过类似驻留集大小(RSS)这样的系统指标来估计。

  新版本的cgroup已经发布。该版本包含若干改进,但尚未针对这些情况进行测试。

      

责任编辑:admin
免责声明:以上内容转载互联网平台或企业单位自行提供,对内容的真实性、准确性和合法性不负责,Voipchina网对此不承担任何法律责任。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部

上一篇存储需求动能强劲,第四季DRAM合..
下一篇发展迅速的蓝光光盘存档技术

热门文章

图片主题

最新文章

相关文章

广告位

Copyright@2003-2009 网络通信中国(原VoIP中国) 版权所有
联系方式:503927495@qq.com
  京ICP备05067673号-1 京公网安1101111101259