为操作系统保留的 RAM

为操作系统保留的 RAM

我同时使用许多打开的应用程序(例如 PhpStorm、Android Studio、Chrome、Firefox、FileZilla、Evince、SublimeText)。

硬件达到极限的情况越来越多:工作指示灯亮起,我感觉硬件正在工作,系统变得很慢,直到几分钟后,在一些程序之后我才能移动鼠标或做任何事情碰撞。有时我必须等待,希望通过执行一些杀戮来打开终端。

有没有办法为操作系统保留一定量的RAM以防止其冻结?我需要一个快速响应的操作系统,即使其他应用程序变得有点慢。

我使用的是 Ubuntu,SSD 驱动器的主目录中有大约 5GB 的可用空间。

free -m:

              total        used        free      shared  buff/cache   available
Mem:           7,8G        4,4G        1,6G        204M        1,8G        2,9G
Swap:          2,0G        1,7G        344M

编辑:

我手动为 Swap 设置 2 GB RAM,因为需要它才能composer update在 PHPStorm 中为 Symfony 项目工作。

谢谢

答案1

最简单的答案是:减少交换空间(参见这另一个问题)。

说明:

当 RAM 已满时,内核开始更频繁地使用交换空间(在速度慢得多的磁盘驱动器上),并且应用程序需要等待更长的时间才能访问其内存,从而降低了这些应用程序的性能。糟糕的性能将持续到交换空间被填满,并且内核开始终止应用程序(内存不足错误,又名 OOM)。因此,交换空间越大,应用程序性能不佳的时间就越长。通过减少交换大小,您将减少内核终止应用程序所需的时间,从而释放一些内存。

不幸的是,桌面环境(负责显示鼠标光标和窗口)被视为与浏览器一样的“应用程序”。因此,内核无法将桌面环境与其他应用程序区分开来,并决定“不应交换桌面环境内存”之类的内容,并使其比其他应用程序更具响应性。

其他答案包括:

  • 将需要 RAM 的应用程序放在 a 内cgroup并限制它们对内存的使用
  • 购买更多内存
  • 使用ZRAM

这位超级用户的回答详细解释了情况和可能的解决方案。

答案2

我会考虑调整系统的交换性和缓存压力。

您可以通过运行来调整交换性sysctl vm.swappiness=X,其中 X 介于 0 到 100 之间。该设置将在开始使用可用 RAM 交换的百分比时发生变化。当 swappiness 为 0 时,系统在 RAM 耗尽之前不会进行交换,而设置为 100 则意味着它将始终进行交换。这个描述过于简单,但这是基础知识。通常我使用的 swappiness 为 10。

您还可以调整cache_pressure,它决定系统缓存 inode 和 dentry(文件系统)数据的频率。这通常是性能密集型的并且值得缓存。 0 到 100 值表示系统将选择缓存多少。

希望这对 Jason C. 有帮助。

答案3

您遇到了臭名昭著的“内存不足”(OOM) 错误。这种情况已经持续了 16 年多,直到 2019 年中期,这个 bug 才开始引起人们的关注……此后就没有任何可靠的修复。这是由于 Linux 缓存事物的坏习惯、过度使用过多的 RAM 以及无法判断您真正拥有多少不可回收的缓存/缓冲区。

然而,有一些简单的方法可以很好地防止您遇到 OOM 错误:诺杭

您会发现为什么会出现 OOM,而且还会通过该链接下载 ppa 来安装它。这并不能修复这个错误,但这是我们现在能采取的最好的应对措施。

还要考虑使用占用 RAM 较少的桌面环境,因为您使用负载较大的软件启动的每个软件都会使用更多的 RAM。此外,尽管 Gnome 3 的功能远不如 Mate(基于 GTK 3 的 Gnome 2 复兴版),但它是继 Cinnamon 之后最强大的版本,其次是 KDE 和 Mate。

我建议使用 XFCE,它只占用大约 600MB 的 RAM,而不是 KDE 超过 1.3GB 的内存(7 年前的旧 Gnome 3 就已经占用了这么多内存,现在应该会更多)。

浏览器也是如此,任何基于 Chrome/Chromium 的浏览器都会占用大量资源(Windows 上的 Edge 除外)。尽可能避免使用 Electron 或基于 JavaScript 的“应用程序”,因为它们消耗了太多的 RAM 来完成它们所能做的事情,或者任何使用大量 RAM 来实现很少功能的东西(例如,功能齐全的文本编辑器应该不要使用超过 30MB 的 RAM 等)。

duthils 所说的很好(ZRAM 和 CGroups),但有时购买更多 RAM 来迎合那些不想优化软件的不良开发人员并不是一个合适的解决方案。

还要考虑浏览器的选项卡悬挂器,例如 Firefox 的“自动选项卡丢弃”扩展和 Vivaldi,这是一款基于 Chromium 的非常强大的浏览器,如果您确实需要这种基于 Chromium 的浏览器,它本身就具有手动选项卡丢弃功能。

既然您是开发人员:请记住,未使用的 RAM不是浪费 RAM(相反的错误假设几乎总是由......网络开发人员做出)。

当缓存 RAM 大部分不是真正的可回收 RAM 时尤其如此,这正是您遇到 OOM 问题的原因。您可以通过查看 的top“可用”RAM来轻松检查echo 3 > /proc/sys/vm/drop_caches,看看是否仍然有一些缓存剩余,通常很多。

相关内容