我的电脑只有 4GB 内存,在 chrome 或 chromium 上打开 8-12 个随机选项卡经常会导致电脑死机。目前我正在使用google-chrome-stable --process-per-site
。这在一定程度上有帮助。有没有办法在单个进程中运行 chrome 或 chromium?有人能给我一些关于如何控制 chrome 过度内存使用的提示吗?
答案1
我是这样使用 cgroup 的:
sudo cgcreate -a $USER:$USER -t $USER:$USER -g memory:groupChromiumMemLimit
sudo cgset -r memory.limit_in_bytes=$((1024*1024*1024)) groupChromiumMemLimit
cgexec -g memory:groupChromiumMemLimit chromium-browser
由于似乎正在交换,chromium 本身有时可能会变得有些慢,但它不会使整个系统挂在交换其他应用程序上,因此只要 chromium/chrome “达到 1GB 限制” 就会进行交换。
但是...如果你看一下 htop,你会看到许多铬进程的驻留内存总和略超过 1GB,我想我需要更多有关这方面的信息。
还没有尝试过memory.soft_limit_in_bytes
看看它是否有帮助,正如链接中建议的那样https://superuser.com/a/1168435/157532。
但总体而言,chromium 使用的 RAM 比以前少得多,而且显然被大量交换,所以这些 cgroup 命令无论我在 htop 上看到什么都有效,所以 cgroup 似乎试图让 chromium 使用“不超过 1GB”的内存,这就足够了。
答案2
您还可以使用其他几个 Chromium 选项:
自 Chromium 67 起,你可能还想禁用场地隔离
chrome://flags/#site-isolation-trial-opt-out
使用标志或--disable-site-isolation-trials
命令行选项再节省 9-11% ;警告!
自 2022 年 7 月左右起此选项可破解所有 Cloudflare CAPTCHA/挑战!!
这似乎是一个浏览器 漏洞。要么就是 Cloudflare 故意使用站点隔离/Spectre 来检测浏览器……您可以使用以下方式明确限制渲染器进程的数量
--renderer-process-limit=2
命令行选项。这会将所有扩展程序放入一个进程中,并确保所有选项卡也使用一个进程。这并没有改善内存使用情况,但我猜这取决于您使用的扩展程序的种类和数量,因此总体来说很有用;现在如果你真的真的无论如何,如果你想让你的 Chrome 类应用使用更少的内存,你可以启用低端设备模式。这将迫使你的浏览器认为你正在使用一些非常差的 Android 设备,因此它将清除非活动选项卡的内存缓存和使用 16 位(65 536)颜色来显示图像。选项是
--enable-low-end-device-mode
。
最后,是这是一种--single-process
选择,但它未得到官方支持,因此不能保证有效,仍可使用不止一个过程并可能导致其他性能或稳定性问题使用上面更多支持的选项将使您在性能和内存使用之间实现更好的平衡。
警告!
大多数这些选项都会降低浏览器的安全性!使用它们需要您自担风险。
我在 Vivaldi 3.3(Chrome 85)上测试了这些选项,其中包含 5 个超级用户选项卡、3 个其他选项卡和 4 个扩展程序。以下是我得到的结果:
Default: 24 processes, ~920 MB
Default - Site Isolation: 19 processes, ~835 MB, -9%
Process per Site: 19 processes, ~770 MB, -16%
Process per Site - Site Isolation: 13 processes, ~665 MB, -27%
Process per Site - Site Isolation + Renderer Limit: 10 processes, ~665 MB, -27%
答案3
您可以使用一个插件将未使用的打开选项卡的内存写入交换。它会释放该数量的内存,因此 CHrome/chromium 会显示更少的内存消耗。
在插件网上商店搜索 Tab-suspender。
https://chrome.google.com/webstore/detail/tab-suspender/fiabciakcmgepblmdkmemdbbkilneeeh
答案4
举一个极端的例子,我仅将 Chromium 用于 Gmail(应用模式),并使用一些适用于 Gmail 的 Chrome 扩展程序。为了减少内存占用,我设置了该--single-process
模式,这在这种情况下很有意义。
我不会将 Chromium 用于其他用途,但如果您的情况并非如此,您可能希望更改应用模式窗口的用户数据目录,以便它和常规浏览器窗口在不同的进程上运行仅应用程序窗口处于单进程模式Gmail.desktop
。这些是我的文件的相关行:
Exec=/usr/bin/chromium-browser --single-process --class=gmail --user-data-dir=.config/gmail --app=https://mail.google.com/mail
StartupWMClass=gmail