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

Hoo*_*ked 34 memory-usage ram resource-limiting

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

由于我自己的愚蠢超出了本论坛的范围,当我用完单个违规程序的所有可用内存时如何防止 Ubuntu 通过颠簸崩溃?

在家实验*!

打开一个终端,启动python,如果你已经numpy安装,试试这个:

>>> import numpy
>>> [numpy.zeros((10**4, 10**4)) for _ in xrange(50)]
Run Code Online (Sandbox Code Playgroud)

* 警告:可能产生不良影响,通过监控进程iotoptop及时终止进程。如果没有,我会在你重启后见到你。

Lek*_*eyn 23

内置的 shellulimit允许您限制资源。对于您的情况,要限制 shell(及其子项)中的内存使用,请使用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
Run Code Online (Sandbox Code Playgroud)

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


ppe*_*aki 12

Cgroups 应该让您限制每个进程的内存使用量。

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

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

众所周知,科学计算是内存密集型的,通过在 cgroup 中沙箱您的应用程序,其余进程不应该成为受害者,因为内存压力将得到缓解。

或者,VM 可以用作一种硬限制,因为应用程序只能使用委派给虚拟机的内存,这当然是以牺牲性能为代价的。然而,与设置和维护 cgroup 相比,VM 更容易为初学者配置。

决定决定 :) 祝你好运!

  • 我知道是什么消耗了内存 - Chrome。但是操作系统应该保护它的稳定性,以防止运行异常的应用程序。 (8认同)