Chrome进程(选项卡)的最大内存使用量及如何增加它?

57

我正在通过Chrome的一个选项卡在运行数千个Https客户端,但是浏览器似乎达到了限制,在我检查任务管理器时,该选项卡的Chrome进程使用了高达897MB的内存,因此我认为存在某种限制(900MB〜)。

有没有Chrome巫师能够解释这个问题?如果我能够增加最大限制,那么在单个选项卡中运行更多的客户端将会是理想的。


1
我认为这可能与Chrome是32位有关。下载64位的beta版似乎允许标签达到约1.5-1.7 GB。 - Henrik Karlsson
4个回答

39

缺省情况下,32位系统上v8的内存限制为512MB,在64位系统上为1.4GB。可以通过将--max_old_space_size设置为32位系统上最大1024 (1 GB),64位系统上最大4096(4GB)来提高限制。您应该能够在Linux shell中启动Chrome时设置此参数,或者在Windows快捷路径作为参数。


13
要将标志传递给V8引擎,实际上需要使用 --js-flags 选项:open /Applications/Google\ Chrome.app --args --js-flags="--max_old_space_size=8192"。请注意,这是命令行操作系统的指令。 - Luc
@Luc 有没有办法验证哪种语法是正确的?此外,“--args”是否有文档记录?我在这里https://peter.sh/experiments/chromium-command-line-switches/上没有看到它。 - johny why
1
@johnywhy --args 是如何将标志从OSX的open命令传递给正在打开的进程的方法:https://brettterpstra.com/2014/08/06/shell-tricks-the-os-x-open-command/#other-handiness - ericsoco
2
@Stefan 真的,x64上的限制已经过时了。根据 https://github.com/v8/v8/blob/0cad8a53c8aa7d072419a42c3d26745386210ef9/src/flags/flag-definitions.h#L929 中定义的标志,max_old_space_size 现在默认为 0。我测试了一个默认的 node v12.20.0 安装,它在大约 2GB 处无法分配内存。顺便说一下,我只是指每个选项卡/v8进程的最大内存使用量,而不是 window.performance.memory 的所有选项卡的总使用量。 - Mihai Tomescu
2
在Windows上,命令是 chrome.exe --js-flags="--max_old_space_size=1024" - Holistic Developer
显示剩余3条评论

19

结合Mihai Tomescu的回答和其他资源进行汇总:

  1. 在运行x64 Windows操作系统时,每个标签页的最大内存似乎约为1.8GB,根据此回答

  2. 通过将Chrome链接地址从"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"更改为"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --max_old_space_size=4096,可以成功增加标签页内存

可以使用这张巨大的图片快速测试差异。该图片将在默认内存设置下使Chrome崩溃(“Google Chrome已耗尽内存,无法显示此网页”),但在增加内存限制后可以正常渲染。


2
以下是如何使用不同用户添加标记打开Chrome:--profile-directory="Profile 7"。您可以通过访问chrome://version并查找配置文件路径来获取配置文件目录。代码如下:"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --max_old_space_size=4096 --profile-directory="Profile 7" - Salman
2
“巨大图像”有什么变化吗?我刚打开它,并没有增加内存。 - Angela P
1
@AngelaP 是的,它在他们的网站上已经不可见了,你必须下载大版本。我会尝试用相关资源来替换它。 - Alexei - check Codidact

8

看起来 --max_old_space_size 不再起作用了。 我在 Ubuntu 22.04 (版本 106.0.5249.119) 上测试过,它什么也没做,而且我在 Google 支持论坛上找到了 this thread,说它在 Chrome 104 中被移除了。

在 Ubuntu 23.04 上,它仍然不起作用,但至少在我的笔记本电脑上限制似乎超过了 4Gio。

以下是如何自行检查:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="Author" content="Laurent LYAUDET">
  <meta name="Publisher" content="Laurent LYAUDET">
  <meta name="Description"
    content="Check if Chrome still limits tab memory">
  <meta name="Keywords"
    content="debug Chrome">
  <title>All your memory are belong to us! XD</title>
</head>
<body>
  <h1>Check if Chrome still limits tab memory</h1>
  <p>
  Step 1: Open Chrome with command line in incognito mode
  to avoid messing with your profile (adapt this line to your OS):
  <pre>
  /usr/bin/google-chrome-stable --incognito --max_old_space_size=4096
  </pre>
  </p>
  <p>
  Step 2: Open Chrome Task Manager to check your memory (Menu > More Tools > Task manager)
  </p>
  <p>
  Step 3: Look at how much RAM used it crashes.
  </p>
  <p>
  Step 4: Repeat from step 1 with --max_old_space_size=1024.
  Currently "Version 112.0.5615.165 (Build officiel) (64 bits)",
  max_old_space_size seems to do nothing.
  Webpage loads fine with both if fine_tune_me = 400000.
  Webpage crashes with both if fine_tune_me = 1000000.
  </p>
  <script>
  // let fine_tune_me = 400000; // This value should be ok if you have enough RAM.
  let fine_tune_me = 1000000; // This value should crash.
  document.addEventListener("DOMContentLoaded", function () {
    for(let i = 0; i < fine_tune_me; ++i){
      let myTextArea = document.createElement("textarea");
      myTextArea.textContent = "All your memory are belong to us!";
      document.body.appendChild(myTextArea);
    }  
  });
  </script>
</body>
</html>

仍未支持吗?能否请您确认一下。 - Zaheer Ahmed
1
是的,它似乎仍然没有做任何事情,但现在硬编码限制至少为4Gio。 - Laurent Lyaudet
1
自从 Chrome 104 版本以后,这个问题在其他平台上也无法工作,我还在 Windows 11 下的 Chrome 115.0.5790.171 中复现了这个问题。 - gouessej

1

I don't believe electron has a hard limit of 4gb. That may be its default, but I've been able to get to 16gb by doing the following in main.js:

  const { app } = require('electron');
  app.commandLine.appendSwitch('js-flags', '--max-old-space-size=16384');

Unfortunately no such switch exists for the Chrome browser.

参考:


这对我不起作用。至少,它不能提高渲染进程的 jsHeapSizeLimit 。我能够使用此命令减少堆大小限制,但无法增加其大小。 - z80crew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接