当内存用完时,如何防止系统冻结?

bob*_*eff 5 memory freeze out-of-memory

我一直在运行一个进程 (gdb),它可以轻松地用完我所有的 ram 和交换空间。每次发生这种情况时,整个系统都会变得非常无响应,Xorg 几乎不会更新,我无法切换到另一个 tty,我无法在控制台中键入命令等。

我试图通过以下方式留出内存:

sudo sysctl -w vm.min_free_kbytes=407580
sudo sysctl -w vm.swappiness=5
Run Code Online (Sandbox Code Playgroud)

一些虚拟内存被保留下来,但交换空间已用完,然后系统仍然无响应。

有没有人有任何万无一失的方法来防止系统完全冻结?这样我就可以杀死内存占用进程?

更新:

我找到了一种方法来限制从特定 shell 启动的每个进程的内存使用:

ulimit -v 2037900
Run Code Online (Sandbox Code Playgroud)

这将每个进程的虚拟内存限制为 2037900 KiB(这是我的总内存)。这比任何一个进程都应该使用的要多。到目前为止,这似乎可以防止系统变慢和冻结。

我仍然想知道是否有人知道任何好的系统资源管理实践。

Rya*_*hin 2

研究 Linux 内存不足杀手。它不是自动在您的服务器上启动吗?它在我的身上。

http://www.oracle.com/technetwork/articles/servers-storage-dev/oom-killer-1911807.html