贪婪的应用程序可能导致OS崩溃的内存限制解决方案?


32

我使用计算机进行科学编程。它具有良好8GB的RAM和12GB交换空间。通常,随着问题变得越来越大,我超出了所有可用的RAM。Ubuntu似乎并没有崩溃(而是首选),而是开始将所有内容加载到swap中,包括Unity和任何打开的终端。如果我没有及时赶上失控程序,那么我无能为力,只能等待-切换到命令提示符需要4-5分钟。Ctrl-Alt-F2在这里我可以杀死令人讨厌的过程。

由于我自己的愚蠢超出了本论坛的讨论范围,当我用完一个有问题的程序中的所有可用内存时如何防止Ubuntu因崩溃而崩溃?

在家实验*!

打开终端,启动python,如果已numpy安装,请尝试以下操作:

>>> import numpy
>>> [numpy.zeros((10**4, 10**4)) for _ in xrange(50)]

*警告:可能有不利影响,请通过iotoptop及时终止进程来监视进程。如果没有,重启后我会再见。

Answers:


21

内置的shell ulimit允许您限制资源。对于您的情况,要限制外壳程序(及其子程序)中的内存使用,请使用ulimit -v

演示将内存限制设置为100 MB(100000 KB):

$ ulimit -v
unlimited
$ python -c '[ "x" * 100000000 ]'
$ ulimit -v 100000
$ python -c '[ "x" * 100000000 ]'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
MemoryError

据观察,使用ps uww -C script-name-herepython至少需要29MB的内存(VSZ列)。RSS限制随着您的python脚本需要更多内存而增长,因此请调整此列。


1
太糟糕了,我们不知道实际的应用程序是什么样子。如所示的ulimit影响属于该shell的所有进程。我们甚至不知道它是否作为守护程序运行,或者它是否有很多子进程,这会使事情进一步复杂化。见coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/...
ppetraki

1
ulimit和cgroups是否没有用户友好的前端?在Windows中,当操作系统快要用完RAM时,警告弹出窗口始终使我能够避免系统死机。在Ubuntu中,我是否必须一直关注内存使用情况?
Dan Dascalescu 2012年

1
@DanDascalescu如果配置了交换文件,则将遭受更长的延迟,但仍然可以工作。一旦注意到交换开始,就可以检查系统监视器的RAM使用情况。如果您的系统确实真正用完了内存,则会调用内存不足(OOM)杀手,该杀手杀死具有最高“不良”分数的进程(通常是消耗最多内存的进程)。
Lekensteyn 2015年

12

Cgroup应该允许您限制每个进程的内存使用量。

https://zh.wikipedia.org/wiki/Cgroups

http://www.mjmwired.net/kernel/Documentation/cgroups/memory.txt

众所周知,科学计算会占用大量内存,通过在cgroup中对您的应用进行沙盒处理,其他进程不会成为受害者,因为这将减轻内存压力。

另外,VM可以用作一种硬性限制,因为该应用程序只能使用委派给虚拟机的内存,这当然会牺牲性能。但是,与设置和维护cgroup相比,对于未启动的VM进行配置要容易得多。

决定决定:)祝你好运!


1
ulimit和cgroups是否没有用户友好的前端?在Windows中,当操作系统快要用完RAM时,警告弹出窗口始终使我能够避免系统死机。在Ubuntu中,我是否必须一直关注内存使用情况?
Dan Dascalescu 2012年

不。另外,您的操作系统也不应冻结,这是一个单独的问题。弹出的窗口只是一个创可贴。如果您正在使用大量内存,也许您应该调查原因?例如,具有浏览器装箱功能的现代浏览器可以轻松消耗70-150M PER TAB。关闭或对其进行调整可以释放最终用户定期使用的大量内存。调度程序应该交换很少使用的程序以节省空间,但是如果它们唤醒的次数超过了应有的速度,则您需要对其进行修复,或者如果您的主要任务是内存密集型(Web),则需要更多的内存。
ppetraki 2012

8
我知道是什么消耗了内存-Chrome。但是,操作系统仍应针对运行正常的应用程序保护其稳定性。
Dan Dascalescu 2013年

1
我了解您来自何处。但是,您要提供的内容就是将通用计算平台转变为设备。作为提供这些保护措施的最不复杂(容易出错)的方法,操作系统工程师必须对整个计算机的运行方式做出明智的决定。这通常以牺牲最终用户灵活性为代价。您可以在平板电脑计算中看到此示例。但是,在台式机中保留了灵活性。
ppetraki 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.