Linux Control Groups (cgroups)
- Path:
/sys/fs/cgroup- Process cgroup:
/proc/self/cgroup
- Process cgroup:
- Unified Hierarchy (v2):
/sys/fs/cgroup/unified(fstype=63677270)- Controllers:
/sys/fs/cgroup/cgroup.controllers
- 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/memorymemory.statmemory.usage_in_bytesRSS + CACHEfree.used + free.(buff/cache) - (buff)
memory.max_usage_in_bytesdocker/(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
参考资料
- Cgroups - Wikipedia
- Control Group v1 Documentation
- Control Group v2 Documentation
- Cgroups - ArchWiki
- cgmanager - Alpine Linux
- Kernel Knowledge Behind Docker: cgroups Resource Isolation
v1 vs v2 vs hybrid
Reference Snippets
mount -t cgroup cgroup /sys/fs/cgroup