写点什么

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

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

关注

评论

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

TiSpark v3.0.3 & v3.1.3 发布

TiDB 社区干货传送门

新版本/特性解读

GitHub经典教材!阿里P8的这份SpringBoot精髓到底厉害在哪里?

做梦都在改BUG

Java spring 微服务 Spring Boot 框架

eBPF的发展演进---从石器时代到成为神(五)

统信软件

操作系统 Linux Kenel

干货好文 | 两地三中心到异地双活演变及关键技术探讨

沃趣科技

MySQL 数据库 opengauss

Matlab实现PCA算法

Shine

三周年连更

长春市做等保评测的公司有几家?名单有哪些?

行云管家

等保 等保测评 长春

你不想成长,生活总会逼着你成长,阿里P8架构师分享十年学习生涯

程序知音

Java redis spring java架构 后端技术

新浪张俊林:大语言模型的涌现能力——现象与解释

NLP资深玩家

浅谈复杂业务系统的架构设计 | 京东云技术团队

京东科技开发者

架构 DDD 架构设计 企业号 4 月 PK 榜 复杂系统

Matlab实现神经网络

袁袁袁袁满

三周年连更

2023年免费的堡垒机就用行云管家!安全感满满!

行云管家

网络安全 等保 小微企业

从不均匀性角度浅析AB实验 | 京东云技术团队

京东科技开发者

A/B 测试 AB实验 企业号 4 月 PK 榜 不均匀 实验准确度

软件测试/测试开发丨利用ChatGPT自动生成测试用例思维导图

测试人

软件测试 自动化测试 测试开发 测试用例 ChatGPT

GitHub下载已过百万!阿里这份Java虚拟机源码剖析手册真的绝了

做梦都在改BUG

Java JVM 虚拟机

政务智能办体验升级、乳腺癌创新药加速研发,飞桨和文心大模型驱动应用智能涌现

飞桨PaddlePaddle

百度飞桨

任务编排:CompletableFuture从入门到精通

做梦都在改BUG

Java CompletableFuture

TiDB x Flink x Iceberg 实时 ODS 实践

TiDB 社区干货传送门

深度学习模型可视化-keras版

AIWeker

Python 深度学习 可视化 keras 三周年连更

ShareSDK 新浪微博平台注册指南

MobTech袤博科技

5月7日【飞天Club × 云原生技术实践营—飞天免费计划实践专场】开启报名

阿里巴巴云原生

阿里云 云原生 飞天Club

软件测试/测试开发丨面试题之软素质与反问面试官篇(附答案)

测试人

软件测试 自动化测试 测试开发 测试用例 ChatGPT

中移链控制台对接4A平台功能验证介绍

BSN研习社

BSN-DDC基础网络详解(十):官方DDC应用SDK

BSN研习社

如何优雅的使用策略模式

做梦都在改BUG

全球首个开发者村启动开村,产业聚力松山湖,共创大湾区创新高地

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

TiDB x Flink 数据集成实践

TiDB 社区干货传送门

节前超级干货福利放送!这可能是最实用的 Conan 管理依赖贴

Zilliz

非结构化数据 Milvus Zilliz 向量数据库 依赖管理

springboot升级过程中踩坑定位分析记录 | 京东云技术团队

京东科技开发者

spring Spring Boot release 企业号 4 月 PK 榜

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