写点什么

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

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

关注

评论

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

2024-01-31:用go语言,机器人正在玩一个古老的基于DOS的游戏, 游戏中有N+1座建筑,从0到N编号,从左到右排列, 编号为0的建筑高度为0个单位,编号为i的建筑的高度为H(i)个单位, 起

福大大架构师每日一题

福大大架构师每日一题

揭开空白网页背景色的神秘面纱

不在线第一只蜗牛

前端 前端开发 框架

掌握 Robot Wramework:高效进行接口自动化

Liam

Jmeter 自动化测试 接口测试 测试工具 Robot Wramework

免费好用的电子阅读神器MarginNote 3 for Mac

南屿

Parallels Desktop 虚拟机提示“由于临界误差,不能启动虚拟机”怎么办

南屿

活动回顾 | 矩阵起源 CEO 王龙:与大数据结合,是大模型成熟的必经之路

MatrixOrigin

云原生 分布式, 数据库、

电影级特效:SideFX Houdini mac破解安装教程 附注册机 支持M1/M2

南屿

分库分表已成为过去式,使用分布式数据库才是未来

不在线第一只蜗牛

数据库 源码 分布式 TiDB

OurBMC开源社区正式成立!

OurBMC

开源社区 ourBMC 成立

Gas Hero Common Heroes NFT 概览与数据分析

Footprint Analytics

区块链游戏 NFT

软件测试学习笔记丨APP自动化测试-Appium环境安装

测试人

软件测试 测试 自动化测试 测试开发 appium

软件测试学习笔记丨微信小程序自动化测试

测试人

小程序 软件测试 自动化测试 测试开发

服装企业的配补调系统:从传统到智能的转型

第七在线

NFTScan 与 Merlin Protocol 共同推出 BRC20 Indexer Oracle,于今日正式上线!

NFT Research

NFT NFT\ NFTScan

OurBMC 社区角色说明

OurBMC

ourBMC 角色说明 职责和权力

荣耀时刻,「第5届天池全球数据库大赛」圆满收官

科技热闻

京东广告算法架构体系建设--高性能计算方案最佳实践 | 京东零售广告技术团队

京东科技开发者

API接口的艺术:如何巧妙获取商品数据

Noah

颠覆传统API集成:幂简集成的“集采分离”革新理念

幂简集成

API API Hub

Paste for Mac破解版(剪切板管理神器) 绿色安全无广告

南屿

Mac软件精选壁纸软件:Backgrounds for Mac(桌面动态壁纸)

南屿

Apple 发布 iMovie、Final Cut Pro、Compressor、Motion 的更新

南屿

OurBMC 社区介绍

OurBMC

组织架构 ourBMC 社区介绍

OurBMC社区官网正式上线,邀您一起共建社区

OurBMC

ourBMC 官网上线 共建社区

多平台Java安装程序构建器 install4j for Mac v10.0.7中文激活版

南屿

WMS系统与电商平台快速拉通库存数量

谷云科技RestCloud

自动化 零代码 wms APPlink

苹果电脑 MacBooster 8 Pro Mac软件 删除Mac恶意软件和病毒

南屿

macos图标素材 macos big sur 软件icons图标大全(新增至2719枚大苏尔风格图标)

南屿

c4d r21中文破解版下载 C4D三维动画设计制作软件

南屿

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