10 memory limit cgroups ulimit
我有一台带有交换分区的标准 Linux(Debian 测试)笔记本电脑。
我用它做了很多实验。其中一些真的很占用内存,Linux 默认的行为方式对我来说是一个问题......让我们举一个愚蠢的例子:
python
,然后a = [0]*100000000
现在很可能您没有足够的 RAM 来处理那个大列表。Linux 将填充 RAM,然后进行交换,几分钟后,OOM 杀手将被触发并终止(几乎)随机服务,并且希望,如果您在合适的时间按下 Ctrl+C python
,并且如果终端仍然有焦点,计算机将再次响应。
我想强制执行一些内存限制以避免不必要的交换并拒绝进程分配比我拥有的内存(在 RAM 中)更多的内存的权利。如果内存需求低于某个限制或被 root 询问,那么就杀死除 root 之外的任何用户的最耗内存的进程。
ulimit -Sv [mem]
我在后面听到了!
呵呵!“使用cgroups
通过cgexec
!” 第一排有人说!
是的,您是对的:这些确实是非常好的解决方案。但:
我想要的是内核说:“你属于用户foo(不是 root),你使用了很多内存,我们会用完内存。对不起,伙计......死吧!”
或者:“你到底在做什么?你需要x MB 而只有y MB 可用。是的,SWAP 是空的,但你不打算使用 SWAP 来做你的脏活,是吗?不,我说不!没有你的记忆!如果你坚持,你会死的!
有人在你耳边建议cgroups
。好吧,尝试寻找那个方向,因为它可以为您提供:
这样的事情可以让你更接近你的目标:
group limited {
memory {
memory.limit_in_bytes = 50M;
memory.memsw.limit_in_bytes = 50M;
}
}
Run Code Online (Sandbox Code Playgroud)
这说明这个cgroup下的任务最多只能使用50M内存,50M内存+swap,所以内存满了就不会swap,但是如果内存没满,可以映射一些数据交换,这可以被允许。
以下是cgroup 内存文档的摘录:
通过使用 memsw limit,您可以避免因交换空间不足而导致的系统 OOM。
归档时间: |
|
查看次数: |
2605 次 |
最近记录: |