Skip to main content

Linux Control Groups (cgroups)

  • Path: /sys/fs/cgroup
    • Process cgroup: /proc/self/cgroup
  • Unified Hierarchy (v2): /sys/fs/cgroup/unified (fstype=63677270)
    • Controllers: /sys/fs/cgroup/cgroup.controllers

常用操作 (Common Operations)

# 创建 group
cgcreate -g "memory:slack_group" -t victor:victor
# 限定 group 内存
cgset -r memory.limit_in_bytes=1G "slack_group"
# 在 group 内启动
cgexec -g "memory:slack_group" slack
# 移除 group
cgdelete "memory:slack_group"

# 禁止 swap
echo 0 > /sys/fs/cgroup/memory/slack_group/memory.swappiness

# 检查内存使用
cat /sys/fs/cgroup/memory/memory.usage_in_bytes
cat /sys/fs/cgroup/memory/memory.limit_in_bytes

OOM Killing

  • OOM Score: /proc/${PID}/oom_score

内存统计 (Memory Stats)

  • /sys/fs/cgroup/memory
    • memory.stat
    • memory.usage_in_bytes
      • RSS + CACHE
      • free.used + free.(buff/cache) - (buff)
    • memory.max_usage_in_bytes
    • docker/ (Docker sub-groups)
      • ID/ (Container memory info)

常见问题

"memory" requires setting use_hierarchy to 1 on the root

cgroup: "memory" requires setting use_hierarchy to 1 on the root.
  • File: /sys/fs/cgroup/memory/memory.use_hierarchy
  • 建议开启 (Recommended: 1)
  • 开启后,统计内存使用会包含子 cgroup 的使用情况。

Check cgroup support

cat /proc/cgroups

参考资料

v1 vs v2 vs hybrid

Reference Snippets

mount -t cgroup cgroup /sys/fs/cgroup