我一直在运行一个进程(gdb),它可以轻松耗尽我所有的内存和交换空间。每次发生这种情况时,整个系统都会变得非常无响应,Xorg 几乎不会更新,我无法切换到另一个 tty,我无法在控制台中键入命令等。
我尝试通过以下方式留出内存:
sudo sysctl -w vm.min_free_kbytes=407580
sudo sysctl -w vm.swappiness=5
部分虚拟内存被保留,但交换空间已用完,然后系统仍然没有响应。
有没有人有任何万无一失的方法来防止系统完全冻结?这样我就可以杀死占用内存的进程?
更新:
我找到了一种限制从特定 shell 启动的每个进程的内存使用量的方法:
ulimit -v 2037900
这将每个进程的虚拟内存限制为 2037900 KiB(这是我的总内存)。这比任何一个进程都应该使用的要多。到目前为止,这似乎可以防止系统变慢和冻结。
我仍然想知道是否有人知道任何好的系统资源管理实践。
答案1
研究 Linux 内存不足杀手。它不是自动在您的服务器上启动吗?它在我身上。
http://www.oracle.com/technetwork/articles/servers-storage-dev/oom-killer-1911807.html