聊一聊应用的资源限制(cgroup篇)

💡 原文中文,约5600字,阅读约需14分钟。
📝

内容提要

本文介绍了在Linux操作系统下使用cgroup对应用进行资源限制的实现细节,包括内存、CPU和cpuset的限制。同时提供了一个使用cgroup限制内存和CPU的Docker示例和相关代码实现细节。

🎯

关键要点

  • Docker等容器化工具使得应用资源限制变得简单,Linux使用cgroup进行资源限制。
  • Linux的资源限制主要依赖于cgroup-tools,需先安装。
  • cgroup v1和v2之间存在差异,使用命令stat -fc %T /sys/fs/cgroup/区分版本。
  • 创建cgroup的命令cgcreate在v1和v2中相同,主要限制内存、CPU和cpuset。
  • v1内存限制使用memory.limit_in_bytes,v2使用memory.max。
  • v1 CPU限制使用cpu.cfs_period_us和cpu.cfs_quota_us,v2整合为cpu.max。
  • cpuset的限制在v1和v2中没有变化,使用cpuset.cpus和cpuset.mems。
  • cpuset.mems的取值在v1和v2中有所不同,v2的层级发生变化。
  • 提供了一个使用crank的具体示例,展示如何设置资源限制。
  • Docker示例展示了如何启动带有资源限制的nginx容器。
  • cgroup v1和v2的控制文件路径不同,分别在/sys/fs/cgroup/docker和/sys/fs/cgroup/system.slice/下。
  • 总结了cgroup的知识,并提供了实现细节的链接,后续将讨论Windows下的资源限制。
➡️

继续阅读