如何防止系统因 RAM 使用率过高而崩溃或无法使用?

Hol*_*bab 9 lubuntu ram 17.10

有时当我使用 Lubuntu 17.10 - 完全更新时,我的 RAM 使用率达到 100%,系统变得无法使用,如果我“幸运”,我可以每 10 秒移动我的鼠标大约 1 个像素......这几乎不可能做到甚至关闭应用程序。然后我被迫使用笔记本电脑上的电源按钮。

我使用的是 2013 年末的 macbook pro 视网膜,安装了几乎全新的 Lubuntu 17.10。

到目前为止,它发生在我打开 spyder3 并且我加载了太大的文件时。当我在 firefox 中单击此链接时也发生了这种情况(警告:可能会崩溃)http://stats.oecd.org/restsdmx/sdmx.ashx/GetData/SNA_TABLE1。我什至在达到 100% 使用率之前关闭了选项卡,但它只是持续到 100% 并崩溃了。我只注意到是因为我关闭了选项卡并在 spyder3 中看到了 RAM 使用情况(我没有运行任何 python3 脚本)。

有没有办法防止这种情况?也许确保特定数量的 RAM 只能由操作系统使用?

rpe*_*pet 6

如果一个进程吃太多内存,那么系统应该通过 OOM 杀手来保护自己,这是任何 Linux 系统的标准功能。

正如迄今为止在OOM 杀手如何决定首先杀死哪个进程的最佳答案中所提到的那样

如果内存被进程彻底耗尽,达到可能威胁系统稳定性的程度,那么 OOM 杀手就会出现。

注意:OOM Killer 的任务是继续杀死进程,直到有足够的内存释放内核试图运行的其余进程的顺利运行。

OOM Killer 必须选择最好的进程来杀死。这里的最佳是指在杀死时释放最大内存并且对系统最不重要的进程。

主要目标是杀死最少数量的进程,以最大限度地减少造成的损害,同时最大限度地释放内存量。

为方便起见,内核为每个进程维护一个 oom_score。您可以在pid目录下的/proc文件系统中看到每个进程的oom_score。

$ cat /proc/10292/oom_score

任何进程的 oom_score 值越高,它在内存不足的情况下被 OOM Killer 杀死的可能性就越大。

如果您的系统崩溃,那么我建议通过调整进程的 oom_score 来微调 OOM 策略。

OOM 杀手不太可能被禁用,但为了确保,请检查此命令是否返回0

$ sudo sysctl vm.overcommit_memory
vm.overcommit_memory = 0
Run Code Online (Sandbox Code Playgroud)

参考:

  1. http://www.oracle.com/technetwork/articles/servers-storage-dev/oom-killer-1911807.html
  2. https://superuser.com/questions/1150215/disabling-oom-killer-on-ubuntu-14-04/1150229
  3. https://unix.stackexchange.com/questions/153585/how-does-the-oom-killer-decide-which-process-to-kill-first
  4. https://www.kernel.org/doc/Documentation/sysctl/vm.txt


Ash*_*Ash 3

您的问题可能是由于系统“颠簸” \xe2\x80\x93 一次将许多内存页移入和移出交换空间,并且没有为实际进程的执行留出时间。

\n\n

如果您希望杀死使用过多内存的进程而不是使整个系统运行缓慢,则可以禁用交换。运行sudo swapoff -a将实现此目的,直到重新启动;要永久禁用交换,您需要通过删除或注释掉第三列中的/etc/fstab行来编辑以删除交换文件/交换分区。swap例如,我的/etc/fstab看起来有点像这样:

\n\n
# <file system> <mount point>   <type>  <options>       <dump>  <pass>\n/dev/mapper/ubuntu--vg-root /               ext4    errors=remount-ro 0       1\n# /boot was on /dev/sda1 during installation\nUUID=fdedeca9-dafe-1a05-0866-7502fda1a7ea /boot           ext2    defaults        0       2\n/dev/mapper/ubuntu--vg-swap_1 none            swap    sw              0       0\n
Run Code Online (Sandbox Code Playgroud)\n\n

要禁用交换,我会注释掉最后一行(通过#在行的开头放置一个哈希值),然后重新启动。确保您没有修改该文件的任何其余部分,否则可能会导致系统无法启动。

\n\n

警告:如果您禁用交换并且没有足够的物理内存用于基本系统服务,OOM 杀手可能会决定杀死其中一个并导致系统崩溃或变得无法使用(问题说您希望避免这种情况) 。

\n