如何自动终止内存不足的 Firefox?

如何自动终止内存不足的 Firefox?

我的 Ubuntu (Mate) 机器有一个相当严重的问题:Firefox 经常会占用过多的内存,导致整个系统停止运行。这似乎是由某些网页上的脚本触发的(例如 Linkedin 经常导致这种情况)。

我尝试更改 niceness 设置,但似乎没有什么效果。我想要做的是设置,这样当事情开始失控时 Firefox 就会自动终止。有什么建议吗?

答案1

好吧,这并不是真正的答案,因为我自己还没有完全解决这个问题。我目前的“解决方案”主要是使用 Brave,但它无法处理所有网站,所以它不是一个完整的解决方案。

另一个解决方案可能是 Facebook 的 OOMD 或类似的东西,它可以跟踪正在运行的进程,并在威胁系统稳定性时自动终止它们。该实现以服务器为中心,可能不太适合桌面(或终端服务器)

然而,真正的解决方案是下载源代码并对其进行修补,以减少内存消耗。我正在努力解决这个问题,但讽刺的是,构建过程被 OOM 杀手杀死了。起初它冻结了系统,但后来我添加了 RPM_BUILD_NCPUS=1(我在 Fedora 上这样做),这使它几乎运行到了最后。但 LD 在将所有这些 .o 文件合并为二进制文件时出现故障,导致内存耗尽。

我认为主要问题是 Firefox 将可用内存(包括交换)视为空闲内存,并将其用于缓存和垃圾处理。我首先要尝试的是找出 Firefox 检查/计算可用内存的位置,看看是否可以通过正确评估空闲内存来弥补内存不足。如果他们愿意将此类代码放在一个位置,那么这可能只需要更改一行代码。

目前我的答案是,当 Brave 可用时使用它,当它不可用时切换到 Firefox 或 Chrome。但切勿在运行其他浏览器时使用 Firefox 或 Chrome。尤其是不要同时使用。它们会互相消耗内存,并且经常陷入释放和抓取内存的循环中。

最后,如果您打算运行的每个浏览器占用超过 24 GB 的空间,根据其他人的测试,这应该足够了。Firefox 和 Chrome 似乎都不会占用超过该特定数量。

哦,另一个解决方案是使用 32 位版本的 Firefox,每个进程限制为 4GB。尽管 Firefox 在最近的版本中生成了许多进程,但这可能并不能真正解决问题。

我还尝试创建一个虚拟机,在其中尝试了具有各种 RAM 大小的 NetBSD 和 OpenBSD。在 NetBSD 中,我使用 1 GB RAM 运行 Firefox,没有太大问题。而在 OpenBSD 中,我需要 2 GB。像 VirtualBox 这样的没有内部交换文件的 VM 会物理限制应用程序可以使用的内存量。但您将失去所有图形硬件加速。我使用的是 VirtualBox 而不是 libvirt,因为 VirtualBox 允许限制客户操作系统的内存和 CPU。我没有在 Linux 上尝试这个,因为我的主要目标是试用 *BSD OS:es,而 Firefox 只是我在其中测试的东西之一。

当我在 NetBSD 中触发大量交换时,有趣的结果是 Firefox 卡住了并冻结了大约 15 分钟,但操作系统的其余部分却完全流畅。我似乎觉得 NetBSD 中的交换在某种程度上被限制在单个进程中。但在 Linux 中这样做可能需要进行大量内核更改,而且它仍然不能真正解决问题。它解决了您正在运行的其他应用程序的问题,但 Firefox 仍然冻结。我没有在 OpenBSD 中尝试过这个,但它是 NetBSD 的一个分支,所以我怀疑结果会类似。

这里的目标是找到一个解决方案,使应用程序和操作系统都能正常工作,而不会冻结或进入交换循环。终止应用程序并不能真正实现这一目标。不同的调度程序也不能。唯一的解决方案是修复应用程序。坦率地说,Firefox 需要大量模块化,这样构建它就不会花费数小时,也不需要重建所有组件,包括所有捆绑的第三方组件。

相关内容