限制 Chrome 中的 RAM 使用?

限制 Chrome 中的 RAM 使用?

当我连续数小时/数天在 Google Chrome 中打开多个标签时,我发现有些页面最终会占用大量 RAM,甚至整个操作系统 (XP) 都会因分页而失去响应。如果我运气好,我终于可以将打开的 URL 列表添加到书签中,关闭 Chrome,然后重新启动;如果我运气不好,我只能关闭 Chrome,并希望能够恢复打开的 URL 列表。

  • 这是为什么?插件内存泄漏?
  • 有没有办法配置 Chrome,以便单个标签/页面不会使用超过设定数量的 RAM?

谢谢。

答案1

我认为你应该选择购买操作系统可以处理的内存。你不应该限制 Chrome 的内存使用量,因为这只会破坏你的网络冲浪体验。假设你大部分时间都使用电脑上网,你应该让 Chrome 获取所需的所有资源,以便提供你想要的性能,让你“享受”同时运行这些标签。

我认为没有办法限制每个选项卡的 RAM 使用量,但你可以完全限制 Chrome 的使用量。看这里:

https://stackoverflow.com/questions/192876/set-windows-process-or-user-memory-limit

如果我是你,如果我想要顺畅的网上冲浪,我宁愿不这么做。

答案2

  1. 我编写了一个 Python 2.5 程序,当 chrome 渲染器使用的内存超过一定数量时,它会终止渲染器。我在 下运行这个程序watch。(请注意,它使用了psutilPython 中未包含的模块。)

    import sys, os, psutil
    
    if len(sys.argv) == 2:
        try:
            limit = int(sys.argv[1])
        except:
            limit = 200 # default 200MB
    else:
        limit = 200
    
    uid = os.getuid()
    for p in psutil.get_process_list():
        try:
            if (p.name == 'chrome' and any('type=renderer' in part for part in p.cmdline)
               and p.uid == uid):
                m = p.get_memory_info()
                #print p.pid,m, m.rss / 1024 / 1024, m.vms / 1024 / 1024
                if (m.rss / 1024 / 1024) > limit: # kill if rss is greater than limit
                    print 'Killed', p.pid
                    p.kill()
        except psutil.error.NoSuchProcess:
            pass
        except psutil.error.AccessDenied:
            pass
    
  2. 我依靠会话好友当 Chrome 无法恢复打开的标签页时恢复它们。

答案3

到目前为止,我见过的唯一能做到这一点的是在容器内运行 chrome限制容器内存

然而这也有一些重要的警告,

  • dockerize 的设置和启动顺序使得 chrome 的运行变得复杂

  • 首先,Chrome 已经使用内核容器来沙盒化其线程;因此您必须使用某种允许其工作的 root 权限来运行容器。这可以规避,而链接容器模型就是这样做的。(它几乎可以完成它需要做的一切)

  • 你几乎肯定会失去 GPU 加速

  • 让音频工作起来很复杂,但可以在链接容器模型中处理。

  • 不管你认为当你的保修失效时还会出现什么问题,Chrome 都非常讨厌被告知不要使用更多内存,并且会因此而发脾气。

但它最终确实起作用了。

我更感兴趣的是将这些 RAM 限制应用于没有预先构建的 docker 镜像来为您整理的 Electron Shell 应用程序。


离题了,但我想指出的是,Firefox 在有限的硬件上表现非常好,但我不认为这是一个真正的答案。

答案4

它不一定是插件。请注意,网页不再是静态的。一些网页只是有大量的异步活动在进行。加上插件中的活动,你就会得到一些未知数。

我发现最好的补救措施是关闭网页并重新加载。据我所知,没有办法限制网页使用的 RAM 量。

相关内容