内存 Cgroup(Memory Control Group) 是 Linux 内核中 Cgroup(Control Group) 子系统之一,用于对进程组的内存使用进行限制、统计和隔离。它是容器化技术(如 Docker、Kubernetes)中实现资源管理的关键组件。
核心功能
内存限制
- 设置内存使用上限(
memory.limit_in_bytes
),防止进程组过度消耗内存。 - 可选设置交换分区(Swap)使用上限(
memory.memsw.limit_in_bytes
)。
- 设置内存使用上限(
内存统计
- 实时监控内存使用量(
memory.usage_in_bytes
)。 - 记录峰值内存使用量(
memory.max_usage_in_bytes
)。
- 实时监控内存使用量(
内存压力控制
- 当内存不足时,触发 OOM Killer(Out-of-Memory Killer)按优先级终止进程。
- 支持设置 OOM 触发后的行为(如暂停进程或直接终止)。
细粒度控制
- 内核内存限制(
kernel memory
)、TCP 缓冲区内存限制等。 - 支持软限制(允许临时超额)和硬限制(严格禁止超额)。
- 内核内存限制(
关键配置文件
在 Cgroup 文件系统中(如 /sys/fs/cgroup/memory/
),每个子目录对应一个控制组,主要文件包括:
memory.limit_in_bytes
:设置内存使用上限。memory.usage_in_bytes
:当前内存使用量。memory.max_usage_in_bytes
:历史峰值内存使用量。memory.oom_control
:配置 OOM 行为(0/1 启用或禁用 OOM Killer)。
示例:通过命令操作
# 创建内存 Cgroup
mkdir /sys/fs/cgroup/memory/test_group
# 设置内存限制为 100MB
echo "100M" > /sys/fs/cgroup/memory/test_group/memory.limit_in_bytes
# 将进程添加到 Cgroup
echo <PID> > /sys/fs/cgroup/memory/test_group/cgroup.procs
# 查看内存使用情况
cat /sys/fs/cgroup/memory/test_group/memory.usage_in_bytes
应用场景
容器资源管理
Docker、Kubernetes 通过 Memory Cgroup 限制容器的内存使用,避免单个容器耗尽主机资源。多租户环境隔离
在共享服务器中,为不同用户或任务组分配独立的内存配额。防止系统崩溃
通过硬限制保护系统关键进程不被其他进程的内存溢出影响。
注意事项
- OOM Killer 行为:当进程超限时,默认会触发 OOM Killer,可能导致容器或进程被强制终止。
- Swap 影响:若允许使用 Swap,需同时设置
memory.memsw.limit_in_bytes
,否则物理内存限制可能被绕过。 - 内核内存限制:某些场景需单独限制内核态内存(如
kmemlimit
),防止内核资源被滥用。
Memory Cgroup 是 Linux 资源管理的基石之一,合理使用可显著提升系统的稳定性和公平性。
内容由零声教学AI助手提供,问题来源于学员提问