写点什么

可能影响容器化应用程序的 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:001966
用户头像

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

关注

评论

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

嘉为蓝鲸告警中心:支撑大型证券公司高效处理高并发告警事件

嘉为蓝鲸

告警管理 可观测

mac苹果窗口辅助工具:Magnet for mac 2.14.0中文免激活版

你的猪会飞吗

mac软件下载

LED显示屏:投资还是消费?

Dylan

数字化 LED LED显示屏 led显示屏厂家 户内led显示屏

MES制造执行系统有什么数据采集方式?

万界星空科技

数据采集 mes 设备管理 万界星空科技 设备数据采集

SQL的执行顺序以及它的重要性与元数据

松子(李博源)

数据中台 元数据 SQL Plan 血缘分析

星辰考古:TiDB v2.x 回忆杀

TiDB 社区干货传送门

版本升级 新版本/特性解读

TiDB 资源管控的对撞测试以及最佳实践架构

TiDB 社区干货传送门

新版本/特性发布 性能测评 数据库架构设计 7.x 实践

文献解读-基因编辑-第十一期|《通过CRISPR介导的Gaa纯合c.1935C>A(p.D645E)点突变的庞贝氏病敲入小鼠模型的建立和表征模拟了……》

INSVAST

基因数据分析 生信服务 基因编辑

人工智能与大数据:新时代的技术融合与未来展望

天津汇柏科技有限公司

大数据 人工智能’

干货满满!亚信安慧亮相PostgreSQL峰会,分享AntDB数据库国产化运维之路

亚信AntDB数据库

数据库 AntDB AntDB数据库 企业号 6 月 PK 榜

"Pandabuy事件后,淘宝代购集运系统如何强化仿牌敏感词风控策略"

tbapi

淘宝代购集运系统 Pandabuy 逆向海淘

聊聊缺陷收敛率

老张

软件测试 质量保障 质量度量

一次压测引发的数据库CPU飙升

阿里技术

压测 故障排查 排查思路 排查

测试管理圆桌讨论会 | 解锁测试管理的核心问题提升你的管理实力

测吧(北京)科技有限公司

测试

ClkLog埋点分析系统-支持自定义事件分析

ClkLog

数据分析 埋点 自定义 开源软件 埋点分析

【论文速读】| 超越随机输入:一种基于机器学习的新型硬件模糊测试方法

云起无垠

为什么 MySQL 的 DBA/开发可以非常丝滑地用上 TiDB ,两者的兼容性差异全在这里,除此之外,都兼容!

TiDB 社区干货传送门

迁移

算力服务先锋!和鲸科技入选《2024中国智算产业生态图谱》

ModelWhale

Qt(C++)使用QChart静态显示3个设备的温度变化曲线

DS小龙哥

物联网

场景化解决方案|AR远程协作

AR玩家

Rokid Vision pro 炬目AR 炬目科技 AR远程协作

深入比较:HTTP 和 RPC 的区别

Apifox

程序员 gRPC 网络协议 RPC HTTP

鸿蒙开发之如何实现帧动画

彭康佳

鸿蒙 帧动画

TiDB锁行为分析

TiDB 社区干货传送门

TiDB 源码解读

解锁测试管理的核心问题,提升你的管理实力!

霍格沃兹测试开发学社

测试管理圆桌讨论会 | 解锁测试管理的核心问题,提升你的管理实力

测试人

软件测试

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