我有一台带有交换分区的标准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来完成您的工作,是吗?不,我说不!你没有记忆!如果你坚持下去,你会死的!
ulimits
是一个坏主意,几乎每个地方都显示出来,因为它是每个进程的限制...我知道cgroups
,您知道:)关于,这绝对更好,但缺少更一般的东西:我在谈论笔记本电脑,但我也拥有我们三个人共享的“计算”服务器。如果我对每个用户实施这样的限制,那么我将受到最坏情况的限制,不是吗?
/proc/sys/vm/overcommit_memory
会影响低内存中的内核行为。