阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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

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

关注

评论

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

并发编程-AQS介绍和原理分析(上)

追风少年

并发编程 AQS

Linux系统日常定位常用指令

正向成长

linux命令

5分钟速读之Rust权威指南(二十一)闭包

wzx

rust

Kubernetes手记(8)- Service 配置清单

雪雷

k8s 6月日更

百分点科技助力中国环境监测总站“生态环境质量会商平台”上线

百分点大数据团队

网络攻防学习笔记 Day41

穿过生命散发芬芳

网络攻防 6月日更

公安合成作战指挥系统解决方案,警务实战指挥系统

员工提出离职就消极怠工怎么办?

石云升

员工离职 职场经验 管理经验 6月日更

Boss直聘转发超90W次,Java面试突击手册 火遍全网,却遭封杀

Java架构师迁哥

【案例】星环科技助力华夏基金大数据平台建设

星环科技

【FlinkSQL】Flink SQL Query(三)- Join

Alex🐒

flink 翻译 FlinkSQL flink1.13

干货|一款实用iOS云真机的技术架构是如何搭建的?

ios

本来无一物,何处惹尘埃|靠谱点评

无量靠谱

又一个重量级的分布式链路分析的轮子

代码先生

elasticsearch ELK 分布式链路 OpenTelemetry Data Prepper

WWDC21: Swift 5.5 新特性解读

阿里巴巴大淘宝技术

swift WWDC21

C++内存访问错误检测

正向成长

内存泄露 内存溢出 Asan

《原则》(十一)

Changing Lin

6月日更

亮相智源大会,字节跳动自研同传系统的技术实现

字节跳动技术团队

百分点数据科学实验室:烟草行业市场信息采集数据质量评估体系研究探索

百分点大数据团队

Webpack 简介

编程三昧

JavaScript 大前端 Node webpack 构建工具

区块链赋能新能源汽车新业态——车电分离

CECBC

阿里大佬离职带出内网专属“高并发系统设计”学习笔记

Java架构师迁哥

教学相长,物联网赋能教育数字化!

IoT云工坊

人工智能 物联网 智慧校园 智慧教室 智慧操场

高并发场景创建JedisPool有哪些注意事项?

BUG侦探

并发 Jedis commons-pool

【得物技术】浅尝UI自动化之Airtest实践

得物技术

自动化 测试 UI 自动化测试 测试落地

股价预测的基本思路(1)

Qien Z.

6月日更 量化投资 股价预测

字节跳动Java岗6月9号一面经验分享

北游学Java

Java 字节跳动 面试

周小川:一些加密货币已经不太可能再回到支付领域

CECBC

被勒索一月后比特币赎金被追回,现在价值几何?

CECBC

洞察 | 企业数字化转型费用高昂?低代码“骨折”给你!

优秀

低代码

书山有路,学海无涯|靠谱点评

无量靠谱

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