在家进行实验*!

在家进行实验*!

我使用我的计算机进行科学编程。它拥有充足的8GBRAM 和12GB交换空间。通常,随着问题变得越来越大,我会超出所有可用 RAM。Ubuntu 似乎开始将所有内容加载到交换空间中,包括 Unity 和任何打开的终端,而不是崩溃(这本来是更理想的情况)。如果我没有及时发现失控程序,我只能等待 - 切换到命令提示符需要 4-5 分钟,Ctrl-Alt-F2在那里我可以终止有问题的进程。

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

在家进行实验*!

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

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

* 警告:可能会产生不利影响,请通过iotop或监控该进程top,以便及时终止它。如果没有,我们将在重启后与您见面。

答案1

shell 内置ulimit允许您限制资源。对于您的情况,要限制 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

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

答案2

Cgroups 应该允许您根据每个进程限制内存使用量。

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

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

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

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

决定决定:)祝你好运!

相关内容