写点什么

可能影响容器化应用程序的 cgroup 内存管理问题

  • 2016-09-05
  • 本文字数:1077 字

    阅读完需:约 4 分钟

近日,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 已经发布。该版本包含若干改进,但尚未针对这些情况进行测试。

查看英文原文 Memory Issues with Linux Control Groups Might Affect Containerized Applications

2016-09-05 19:001693
用户头像

发布了 1008 篇内容, 共 397.5 次阅读, 收获喜欢 345 次。

关注

评论

发布
暂无评论
发现更多内容

构建AI Agent必学的4种设计模式,一文了解

Baihai IDP

程序员 AI LLMs AI Agents AI 助手

AI | 数智创新,引导财务共享建设新方向

用友智能财务

政策 解读 会计

AI技术在英语学习领域的应用

北京木奇移动技术有限公司

AI教育 软件外包公司 AI英语学习

2024年Apache DolphinScheduler社区高光时刻总结!

白鲸开源

Apache DolphinScheduler 2024年终总结

Navicat BI for mac(数据可视化工具)

Mac相关知识分享

PullTube for Mac(在线视频下载器)

Mac相关知识分享

Topaz Photo AI for Mac(人工智能降噪软件)

Mac相关知识分享

《计算机组成及汇编语言原理》阅读笔记:p178-p199

codists

计算机组成及汇编语言原理

高效文件压缩和解压缩工具CompressX for Mac激活版

iMac小白

AI英语阅读APP的技术框架

北京木奇移动技术有限公司

AI教育 软件外包公司 AI英语学习

每年一问:Java日期格式化中周所在年引发的bug

白鲸开源

开源 Apache DolphinScheduler 日期 大数据调度

智能AI降噪软件Topaz Photo AI for Mac激活版

iMac小白

由 Mybatis 源码畅谈软件设计(九):“能用就行” 其实远远不够

京东科技开发者

业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板

京东科技开发者

VUE3与JNPF快速开发平台的完美结合

伤感汤姆布利柏

淘宝APP分类API接口:开发、运用与收益全解析

科普小能手

数据挖掘 淘宝 电商 API 接口 API 测试

Photoshop 2025 for mac(ps 2025图像编辑处理软件)中文版

Mac相关知识分享

SecureCRT & SecureFX 9.6 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输

sysin

securecrt

CST软件如何计算天线fidelity保真度?达索代理思茂信息

思茂信息

cst cst操作 CST软件

2024年终福利 | Apache DolphinScheduler案例合集,附PDF下载

白鲸开源

Apache DolphinScheduler 大数据 开源 案例集 大数据调度

GreatSQL temp文件占用时长分析

GreatSQL

Helm适配华为云OBS实践分享,更方便地部署、管理复杂应用

华为云开发者联盟

开源 Kubernetes Helm OBS

Photoshop 2025 Mac最新中文激活版

iMac小白

LED和LCD的15个不同之处

Dylan

LCD1602液晶显示屏 LED LED display LED显示屏 lcd

京东供应链创新与实践:应用数据驱动的库存选品和调拨算法提升履约效率

京东科技开发者

白鲸开源WhaleStudio荣获2024星空奖!

白鲸开源

datafun 数据集成平台 大数据调度 白鲸开源 星空奖

Termius for mac(终端模拟器/SSH/SFTP客户端)

Mac相关知识分享

AI赋能产业升级:探索人工智能在不同领域的实际应用

天津汇柏科技有限公司

AI 人工智能

开源IM聊天程序HarmonyChat:基于鸿蒙NEXT的WebSocket协议

JackJiang

即时通讯;IM;网络编程

Kaleidoscope for Mac(图片和文本差异比较工具)

Mac相关知识分享

博世智驾新动力:Apache DolphinScheduler如何征服数据处理挑战

白鲸开源

人工智能 Apache DolphinScheduler 智能驾驶 博世智驾

可能影响容器化应用程序的cgroup内存管理问题_Linux_Hrishikesh Barua_InfoQ精选文章