cgroups

cgroups(Control Groups)是 Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源的机制,包括CPU、内存、block I/O、网络带宽等

可以通过man cgoups查看更多信息

1. 内存限制

创建cgroup

mkdir /sys/fs/cgroup/memory/memtest

设置内存限制

假设将内存限制设置为 100MB

echo 100M > /sys/fs/cgroup/memory/memtest/memory.limit_in_bytes

写入文件会自动转化为bytes: 104857600

测试

memory_hog.py

import time
 
data = []
while True:
    data.append('A' * 1000000)  # 每次分配约 1MB 内存
    time.sleep(0.1)

将进程id写入cgroup后运行,$$为shell的id,启动的python均为其子id

echo $$ | tee /sys/fs/cgroup/memory/memtest/cgroup.procs

python3 memory_hog.py

观察内存占用

watch -n ``1` `"cat /sys/fs/cgroup/memory/memtest/memory.usage_in_bytes"

过几秒后进程会被killed,查看dmesg

查看memory.oom_control
oom_kill_disable ``0
under_oom ``0
oom_kill ``1

文件说明

/sys/fs/cgroup/memory下文件

  1. cgroup.procs:包含属于该 cgroup 的进程 ID。

  2. memory.limit_in_bytes:设置内存使用上限。

  3. memory.usage_in_bytes:显示当前内存使用量。

  4. memory.max_usage_in_bytes:记录最大内存使用量。

  5. memory.failcnt:记录达到内存限制的次数。

  6. memory.soft_limit_in_bytes:设置软限制,系统内存压力大时才生效。

  7. memory.oom_control:控制 OOM(内存不足)行为。

  8. memory.stat:提供详细的内存使用统计。

  9. memory.swappiness:控制内存交换倾向。

  10. memory.use_hierarchy:控制是否将限制应用到子 cgroup。

  11. memory.force_empty:尝试释放 cgroup 中的所有内存。

  12. memory.pressure_level:报告内存压力水平。

  13. memory.numa_stat:NUMA 相关的内存统计。

  14. memory.kmem.* 文件:用于管理内核内存。

  15. memory.memsw.* 文件:管理内存+交换空间的使用。

  16. memory.move_charge_at_immigrate:控制进程迁移时的内存计费。

  17. tasks:包含属于该 cgroup 的线程 ID。

  18. notify_on_release:控制 cgroup 释放时的通知。

  19. cgroup.event_control:用于事件通知机制。

  20. cgroup.clone_children:控制子 cgroup 是否继承父 cgroup 的 cpuset 配置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容