限制在Chrome中使用RAM?


22

当在Google Chrome浏览器中打开几个选项卡达数小时/天时,我注意到某些页面最终会占用大量RAM,以至于整个操作系统(XP)由于分页而无法响应。幸运的话,我最终可以为打开的URL列表添加书签,关闭Chrome,然后重新启动;如果不是,我必须杀死Chrome,并希望我可以恢复打开的URL列表。

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

谢谢。


你有多少RAM?
巴恩

@OverTheRainbow -为什么不考虑页贪睡- chrome.google.com/webstore/detail/...
PeanutsMonkey

我有4GB,足够了,除非某些网页最终占用500MB的空间。感谢您在Page Snooze和Session Buddy上的链接。
OverTheRainbow 2012年

Answers:


-2

我认为您应该选择购买尽可能多的RAM,以使操作系统能够处理。您不应该限制Chrome的RAM使用量,因为它只会破坏您在网络上的浏览体验。假设您大部分时间都是使用计算机上网,则应该让Chrome获得所需的所有资源,以提供您希望“享受”同时运行这些标签的性能。

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

/programming/192876/set-windows-process-or-user-memory-limit

如果我是你,如果我想要流畅的网络冲浪,我宁愿不这样做。


16
当您无法控制使用的计算机(即工作计算机)的内容时,这并不是真正的解决方案
Gnoupi 2012年

在这种情况下,最好是可以为选定的选项卡设置“优先级”(例如,活动选项卡将获取大部分内存),因为内存有限且计算机不属于您,而用户不属于该用户应该适应(通过减少打开的选项卡的数量)适得其反。
WikiWitz

4
Chrome会消耗掉尽可能多的RAM,因此增加RAM就像将更多的木材投入火中一样,它会燃烧更多。
JDuarteDJ 2015年

5
@WikiWitz,您低估了Chrome占用的RAM。我有16 GB的物理RAM,但仍然不够用。
起搏器

2
“假设您大部分时间都在使用计算机进行Internet冲浪”-这是一项主要的任务。并非所有内容都是Chromebook。
Piskvor '17

12
  1. 我写了一个Python 2.5程序,当chrome渲染器使用了一定数量的内存时,它们会杀死它们。我在下运行此程序watch。(请注意,它使用的是Python不附带的psutil模块。)

    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无法还原打开的标签页时,我依靠会话伙伴来恢复打开的标签页。


Chrome如何处理渲染器被杀死的情况?选项卡的渲染器被杀死后,该选项卡表现出什么行为?哦,我刚刚看到您的Session Buddy评论,所以这意味着Chrome有时无法恢复它们,可以。这经常发生吗?这真的很好,谢谢!
马修

1
@Human使用已终止的渲染器进程的选项卡变为崩溃的选项卡。但是,尽管上面的脚本在更高版本的Chrome 12中可以很好地工作,但是它也杀死了扩展程序,这与Chrome 12中的渲染程序进程而不是扩展程序进程不同。
Dan D.

@Human如果您单击“ 还原”失败,可能会丢失最后一个选项卡。同样,即使您拥有该Last Tabs文件,也无法从该文件还原选项卡。我曾尝试确定格式并从中提取URL。没有成功。而且,我对SQLite的信任比Chrome用于存储当前会话标签的二进制格式要多,这就是SB更好的原因。
Dan D.

@DanD。,此脚本安全吗?最终会导致整个Chrome崩溃吗?
起搏器

@Pacerier是的,除非Chrome在重启后仍处于延迟的标签页加载阶段,否则不是。
Dan D.

4

到目前为止,我唯一能做到的是在容器内运行chrome限制容器ram

但是,这有一些主要警告,

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

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

  • 您几乎肯定会松开GPU加速

  • 使音频正常工作很复杂,但是可以在链接的容器模型中处理。

  • 保修失效时,无论您期望出什么问题,Chrome都会强烈反对您不要使用更多的ram,并会采取行动并发脾气。

但是它最终确实起作用。

我对将这些内存限制应用于没有预先构建的Docker映像来为您处理的Electron Shell应用程序更感兴趣。


不在主题之列,但我想指出,Firefox在有限的硬件上表现良好,但我认为这并不是真正的答案。


我应该更新此答案,以更多地了解容器如何只是cgroup接口,您可以自己使用cgroup来完成相同操作
ThorSummoner

1

它不一定是插件。请注意,网页不再是静态的。某些网页只是发生了大量的异步活动。通过插件添加活动,您会发现一些未知数。

我发现最好的补救方法是杀死该网页并重新加载它。AFAIK,无法限制网页使用的RAM数量。


1

使用TabsOutliner扩展-它将为您提供“关闭”选项卡的简便方法,而无需实际将其从上下文和当前会话列表中删除。很有用。

Tabs Outliner扩展


0

取消使用大量内存的Tab进程(我注意到,使用Flash的任何东西都倾向于使用500MB +)。当您想继续使用失效的标签时,您可以稍后重新加载它们。


0

TabMemFree将自动挂起不活动的选项卡。您可以确定挂起非活动标签的时间,至少15分钟。您还可以指示它忽略固定的选项卡。

Tab Wrangler是另一个扩展,可以考虑在您需要更多控制权时自动挂起不活动的选项卡。与TabMemFree一样,您可以确定一个选项卡被视为不活动之前的时间长度,并将其设置为忽略固定的选项卡,但是您可以添加选项来锁定其他选项卡并在不同计算机之间同步选项卡设置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.