ZBLOG

内存 Cgroup定义

内存 Cgroup(Memory Control Group) 是 Linux 内核中 Cgroup(Control Group) 子系统之一,用于对进程组的内存使用进行限制、统计和隔离。它是容器化技术(如 Docker、Kubernetes)中实现资源管理的关键组件。


核心功能

  1. 内存限制

    • 设置内存使用上限(memory.limit_in_bytes),防止进程组过度消耗内存。
    • 可选设置交换分区(Swap)使用上限(memory.memsw.limit_in_bytes)。
  2. 内存统计

    • 实时监控内存使用量(memory.usage_in_bytes)。
    • 记录峰值内存使用量(memory.max_usage_in_bytes)。
  3. 内存压力控制

    • 当内存不足时,触发 OOM Killer(Out-of-Memory Killer)按优先级终止进程。
    • 支持设置 OOM 触发后的行为(如暂停进程或直接终止)。
  4. 细粒度控制

    • 内核内存限制(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

应用场景

  1. 容器资源管理
    Docker、Kubernetes 通过 Memory Cgroup 限制容器的内存使用,避免单个容器耗尽主机资源。

  2. 多租户环境隔离
    在共享服务器中,为不同用户或任务组分配独立的内存配额。

  3. 防止系统崩溃
    通过硬限制保护系统关键进程不被其他进程的内存溢出影响。


注意事项

  • OOM Killer 行为:当进程超限时,默认会触发 OOM Killer,可能导致容器或进程被强制终止。
  • Swap 影响:若允许使用 Swap,需同时设置 memory.memsw.limit_in_bytes,否则物理内存限制可能被绕过。
  • 内核内存限制:某些场景需单独限制内核态内存(如 kmemlimit),防止内核资源被滥用。

Memory Cgroup 是 Linux 资源管理的基石之一,合理使用可显著提升系统的稳定性和公平性。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=24355

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?