发布时间:2026-07-21阅读(1)
本文是一系列对cgroup说明的文档,已期望说明cgroup子系统涉及的所有子系统,本文只对memory进行说明,本文的目录如下
cgroup memory子系统又称为Memory Resource Controller,通过为每个cgroup维护一个内存管理机制,控制处于所有属于该cgroup的进程对内存的使用方式。cgroup mem有以下控制内存使用的目录内容:
tasks # 关联的任务线程 cgroup.procs # 关联的任务进程 cgroup.event_control # an interface for event_fd() memory.usage_in_bytes # 当前已使用的内存 memory.memsw.usage_in_bytes # 当前已使用的内存,swap memory.limit_in_bytes # 当前限制的内存使用 memory.memsw.limit_in_bytes # 当前限制的内存、swap memory.failcnt # 当前达到内存阈值的次数 memory.memsw.failcnt # 当前达到内存、swap阈值的次数 memory.max_usage_in_bytes # 查看内存使用的最大值 memory.memsw.max_usage_in_bytes # 查看内存、swap使用的最大值 memory.soft_limit_in_bytes # 设置/查看 soft limit of memory usage memory.stat # 查看元数据 memory.use_hierarchy # 设置/查看 hierarchical account enabled memory.force_empty # trigger forced page reclaim memory.pressure_level # set memory pressure notifications memory.swappiness # set/show swappiness parameter of vmscan memory.move_charge_at_immigrate # set/show controls of moving charges memory.oom_control # 设置/查看 oom 控制 memory.numa_stat # show the number of memory usage per numa node memory.kmem.limit_in_bytes # 设置/查看内核内存的硬件限制 memory.kmem.usage_in_bytes # 查看当前内核内存分配 memory.kmem.failcnt # 查看内核内存达到限制次数 memory.kmem.max_usage_in_bytes # 查看内核内存最大使用量 memory.kmem.tcp.limit_in_bytes # 查看/设置 tcp 缓存内存硬件限制 memory.kmem.tcp.usage_in_bytes # 查看当前tcp 使用 memory.kmem.tcp.failcnt # 查看当前tcp达到内存限制次数 memory.kmem.tcp.max_usage_in_bytes # 查看当前tcp buf内存使用最大限制
以使用为例,使用linux mem提供的文件系统方式为例
# 限制内存使用$ echo 4M > /sys/fs/cgroup/memory/test/memory.limit_in_bytes# 查看内存使用$ cat /sys/fs/cgroup/memory/test/memory.limit_in_bytes4194304# 查看已使用内存$ cat /sys/fs/cgroup/memory/test/memory.usage_in_bytes1216512

图1 查看控制器抽象结构
内存控制器的核心在于设计的page_counter,page_counter追踪当前的内存使用量以及进程内存的限制量。由mem_cgroup对每个关联的cgroup进行控制。
内存控制器工作原理:
Accounting操作流程为:
目前的常见的容器技术docker底层其实是runc的调用实现,
runc对内存的限制正是通过cgroup来实现的,以容器运行时中runc中的设置mem权限逻辑为例
相应的,查看对应的日志以及文件
[debug] write cgroup proc, dir=/sys/fs/cgroup/memory/user.slice/user-0.slice/session-537.scope/a, CgroupProcesses=cgroup.procs, pid=105820[debug] cgroup set swap writer file path=/sys/fs/cgroup/memory/user.slice/user-0.slice/session-537.scope/a/memory.limit_in_bytes val=0[debug] cgroup set swap writer file path=/sys/fs/cgroup/memory/user.slice/user-0.slice/session-537.scope/a/memory.memsw.limit_in_bytes val=0cat /sys/fs/cgroup/memory/user.slice/user-0.slice/session-537.scope/a/memory.limit_in_bytes 9223372036854771712cat /sys/fs/cgroup/memory/user.slice/user-0.slice/session-537.scope/a/memory.memsw.limit_in_bytes 9223372036854771712
cgroup memory说明1https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt
docker底层资源限制实现https://www.slideshare.net/Docker/container-performance-analysis-brendan-gregg-netflix
上一篇:芹菜肉片炒香干的做法
下一篇:如何注册qq号 怎样注册qq号
Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图