当RAM使用率达到100%时,有没有一种方法可以为操作系统保留内存以保持其活动状态?

Ubuntu 18.04

我一直遇到同样的问题 - 因为我的坏习惯,我的Firefox打开并保留了太多的标签在内存中。这导致RAM使用量最终达到100%
此时整个系统会完全锁定。我甚至无法移动鼠标来按下“结束进程”在系统监视器中。

当我运行我的代码并占用过多的内存时,出现相同的行为 - 一切都停止工作,鼠标变得无响应。

我猜测很明显 - Gnome或Ubuntu本身缺少空闲内存块。
所以我猜测的解决方案是使这些操作系统始终保留内存以便正常工作和响应。

我该如何做到这一点?


根据要求返回翻译的文本。
$ free -h
              total        used        free      shared  buff/cache   available
Mem:           7,7G        4,3G        281M        1,2G        3,1G        1,9G
Swap:          2,0G        1,5M        2,0G

$ sudo sysctl vm.swappiness

vm.swappiness = 60

3通常情况下,系统会有一些交换空间,在18.04 LTS版本中通常是一个交换文件。可以使用swapon命令来检查。当进行交换操作时,系统会变得非常慢,但仍然能够正常工作。当交换空间耗尽时,系统将无法继续工作。因此,您可能需要更多的交换空间,但最好的选择是养成关闭浏览器标签页的习惯。如果您确实需要更多内存来运行自己的程序,应该增加更多的RAM。 - sudodus
在我看来,如果操作系统允许程序对其进行硬锁定,那就是操作系统的问题,而不是用户的问题。如果它将解决问题的责任交给用户,那么它应该允许用户在空间耗尽后(通过实际响应)禁用程序。 - Noone AtAll
1你确定整个操作系统被锁定了,而不仅仅是某个程序被锁定,或者可能只是非常非常慢(因为交换)? - sudodus
系统对鼠标的移动或点击没有任何反应。这就是在图形用户界面中最接近死机的情况了。 - Noone AtAll
嗯,事情并不完美。我没有更好的解释。希望有人能够加入并帮助你。 - sudodus
2这是一个值得一试的快速测试,可以增加/proc/sys/vm/min_free_kbytes。否则,我同意@sudodus的评论。 - Doug Smythies
1当出现这种“硬锁”时,只需按下Ctrl+Alt+F3并尝试登录到纯文本屏幕。如果成功登录(可能会很慢),您可以通过一些命令(如tophtop等)来检测卡住的进程。(注意:要返回图形环境,请使用Ctrl+Alt+F2。) - FedKad
2https://unix.stackexchange.com/questions/28175/system-hanging-when-it-runs-out-of-memory - DK Bose
1编辑您的问题并显示free -hsudo sysctl vm.swappiness。与我交流时,请以@heynnema开头,否则我可能会错过您的评论。 - heynnema
@heynnema 添加了 - Noone AtAll
1你的交换空间太小了。你是使用交换分区还是/swapfile?给我看一下cat /etc/fstab的输出和gparted的截图。 - heynnema
让我们来谈谈房间里的大象 - Linux内核无法优雅地处理低内存压力的问题。 - Elias
@Elias 在内核层面上有一个OOM-Killer来处理这个问题。然而,用户空间脚本也可以解决这个问题。 - WinEunuuchs2Unix
1不要为系统保留内存,而是限制用户。请参考https://unix.stackexchange.com/questions/34334/how-to-create-a-user-with-limited-ram-usage中的cgroups接受答案。 - ubfan1
2个回答

不是千言万语,而是系统挂起预防:nohang(https://youtu.be/PLVWgNrVNlc)。
Nohang是一个高度可配置的Linux守护程序,能够正确地防止内存溢出(OOM),并在低内存条件下保持系统响应性:https://github.com/hakavlad/nohang
但最简单的方法是安装earlyoom。这个程序从ubuntu 18.04开始就在软件仓库中提供:只需运行sudo apt install earlyoom

你只需要在内存使用达到100%之前关闭一两个FireFox标签就可以了。但是你怎么知道什么时候接近这个点呢?
你可以运行一个脚本,在内存使用达到95%时弹出一个通知气泡: 我通常会让conky一直运行,显示系统状态给我看。

conky 30 second clip.gif


请问这个conky的名字是什么?或者能给我链接吗? - Mohammad Kholghi
还有一个简化版的gnome-system-monitorconky需要更多的资源,并且在编译/运行一些重型程序时会限制更多。 - damadam
1@MohammadKholghi Conky是一款允许你设计自己的系统监视器的工具:Conky入门指南以及我自己的Conky设置:设置为高性能 - WinEunuuchs2Unix