为什么Firefox每几秒钟会引起CPU使用率高的“峰值”?


9

当我启动Firefox时,有一段时间没有任何问题,但是几天后,CPU峰值开始出现。在峰值期间,Firefox冻结,然后停止。尖峰每七到十秒钟发生一次,每个尖峰持续两到三秒钟。如果在出现尖峰时输入内容,则仅在尖峰之后才输出字符。我最初以为这个问题是由于Flash引起的,所以我禁用了它,但是问题仍然存在。

此外,几天后Firefox的内存使用量增加到600 MB以上。

我使用的Firefox插件和扩展列表在此处提供


6
Firefox一直存在内存泄漏,这是正常的。
约翰T

错误490122中跟踪了症状。我似乎再也没有在Firefox 4+中体验过这些了-谢天谢地。
RomanSt 2011年

1
并且他们承诺每个新版本都将修复它!google.com.au/…–
马修·洛克

1
@MatthewLock什么这个?似乎只有Reddit上的用户才觉得每个版本都可以解决此问题……
Daniel Beck

Answers:


8

我怀疑它是垃圾收集器还是自行车收集器。

about:config变化javascript.options.mem.logtrue。现在,有关GC和CC的通知应该在错误控制台(Crtl+ Shift+ J)中可用。如果它们的时间和持续时间匹配器冻结了,那么这就是您的问题。

遇到此问题时,我通过销毁Firefox配置文件并从头开始创建新的配置文件来解决此问题。随着时间的流逝,Firefox配置文件趋向于收集大量杂物。

即使这不是一个完美的解决方案。如果您在Firefox(100+)中打开许多标签页或许多扩展程序,并使Firefox连续运行数天,则不可避免地会降低速度。您需要不时地重新启动Firefox。

如果您像我一样并且有收集大量选项卡的趋势,则需要在某个时候进行处理。我使用的另一个技巧是将其设置browser.sessionstore.max_concurrent_tabs为0。这将阻止Firefox在启动时加载会话的所有选项卡。当您切换到它们时,它将加载它们。我发现,加上偶尔重新启动Firefox,大大减轻了拥有大量标签页的负担。


2
有一个名为BarTab的Firefox插件。我认为它对browser.sessionstore.max_concurrent_tabs
Boris_yo 2011年

1
是的,虽然我相信它不会更新火狐4
阿尔法先生


1
Firefox 40(2015-08)中似乎没有“ max_concurrent_tabs”。
彼得·莫滕森

我认为max_concurrent_tabs的当前等效项是“常规”下的首选项中的设置,该设置称为“在选定之前不加载选项卡”。
miyalys 2015年

9

在中about:config,设置browser.sessionstore.interval为一个大数字(应为10,00015,000;将其设置为左右600,000)。

基本上,这是Firefox更新“保存的会话”的时间之间的毫秒数。如果您打开了许多标签,或者浏览历史很长(或者经常出现两种情况),那么这可能是sessionstore.js每10或15秒将大量数据写入文件中,这可能会导致Flash视频无法播放短暂冻结,甚至每隔几分钟冻结整个计算机一次。

将此值设置为较大值的缺点是,如果Firefox崩溃,则在尝试还原时会丢失最后几分钟的浏览历史记录。我认为这是一个很小的代价。

您的CPU高峰应该变得那么频繁了。


2
我安装了会话管理器插件。它还可以保存会话,从而可以更好地进行管理和自定义。如果Firefox和此插件都更新会话导致CPU使用率高并崩溃怎么办?有没有办法禁用Firefox的会话更新功能并保留会话管理器?
Boris_yo 2012年

1
在Firefox 40中,似乎将其保存在文件“ \ sessionstore-backups \ recovery.js”(请注意:在子文件夹“ sessionstore-backups”中),而不是“ sessionstore.js”(以及以前的版本在“ \ sessionstore- backups \ recovery.js“)。
彼得·莫滕森

1
OK,这似乎与Firefox 33变(2014-06),而不是Firefox的40
彼得·莫特森

4

它本身无法修复内存泄漏。但是启用“在选择之前不加载选项卡”至少将不会在重新启动后单击这些选项卡时才加载这些选项卡,这会使内存减少。

我还发现使用CCleaner清理Firefox“会话”有所帮助。请先备份所有打开的选项卡,因为这会删除会话恢复信息。在运行CCleaner之前,我的sessionstore.js文件约为800 KB,但是此后减小到约6 KB。

有关会话存储的更多信息,请参见已解决:Firefox每10秒冻结一次,滚动为Jumpy

卸载Flashblock解决了Firefox的CPU问题。也许Flashblock和Adblock Plus或其他一些扩展功能不兼容?

生命太短了,无法与Firefox混为一谈。我只是导出了书签,然后卸载了Firefox,然后删除了计算机上的所有Firefox文件夹,然后从头开始重新安装了Firefox,并还原了书签。现在,它比全新安装的Google Chrome浏览器运行速度更快。


2

这很难说。仅仅是引起这种情况的一般用途,还是您正在访问特定站点?(我们有一个问题,由于jQuery发生内存泄漏,浏览器会随着时间的推移获得内存)。

假设您使用的是Microsoft操作系统,则可以尝试使用Microsoft的Process Monitor工具。它会散发大量的消息,但是您应该能够将消息的范围缩小到“冻结”发生的时间间隔,并且也许可以查看是什么进程在进行阻止。


jQuery会发生内存泄漏吗?Hrmmmmm
Jeff F.

1
这有可能发生。请参阅以下jQuery Bug故障单列表:bugs.jquery.com/search?q=leak&go=& ticket= on。我们遇到的原因是,我们不断(通过以一定间隔触发的AJAX请求)连续访问单个页面,这导致了相当大的泄漏。
詹姆士·怀斯曼

1
听起来更像是浏览器问题,而jQuary问题则更少,因为它无法运行,但在浏览器中运行(无论如何,大多数情况下都是这样):)(如果while(1 == 1){}崩溃了,浏览器我责怪浏览器:P)
Jeff F.

1
尽管您断言浏览器存在错误是正确的(以上链接中的某些错误与IE无法正确处理循环引用有关),但是开发人员可以采取一些步骤来改善其JS代码。在C / C ++中,您必须清理您手动分配的内存,因为没有GC可以执行此操作。如果不是,这是代码或运行时中的错误吗?我认为,不考虑您的环境限制可以被认为是代表您的错误,并且看起来jQuery团队也是如此。
詹姆士·怀斯曼

1
好吧,这最终导致了一个愚蠢的论点:P。JavaScript不是代码,而是脚本。脚本在另一个程序中运行。一个写得不好的程序只能自己运行,因此需要适当的编写。一个可以接受脚本的好的程序可以防止其自身崩溃。因此,为什么检查Bugzilla会看到与未正确编写JavaScript导致Firefox崩溃有关的错误。不过,这个话题很自以为是,因此我将其保留!(由于浏览器没有泄漏jQuery,所以第一条评论更多是在开玩笑)
Jeff F.

0

如果尚未这样做,则可以尝试升级到最新的Firefox。他们努力减少了内存泄漏。


我总是升级,问题仍然存在。我更喜欢使用Firefox 3.6.17
Boris_yo,2011年
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.