Chrome标签页内存不断增长,堆大小保持不变。

16
我正在与团队一起开发一个单页应用程序,其中有许多计时器,每秒约10个REST API调用。我们使用Chrome内存分析工具定位了所有内存泄漏--目前堆大小保持不变(即在垃圾收集之间)。然而,我们注意到应用程序运行时间越长,Chrome选项卡本身使用的内存就越多。几个小时后,我们发现选项卡内存增长到约350MB,而堆大小仍为6MB。如果运行一整夜,选项卡将消耗超过500MB,并在早上变得无法使用。
我们需要应用程序长时间运行(我们希望每周只重启一次),所以这是一个问题。
以下是一个小时内堆时间轴的截图。最后,选项卡的私有内存大小为350MB,而堆的大小保持在大约5.4MB左右。
我们在Windows 7上的Chrome 40和Chrome 38中看到了这种情况。我们已禁用缓存,在隐身模式下运行应用程序。
任何想法为什么选项卡内存大小会增长到Chrome无法使用的程度,而JS堆使用率仍然很小?
编辑:我们运行了应用程序几天,选项卡内存大小增加到800MB,堆大小仍然差不多。
编辑(6/9/15):我不确定这是否有文档记录,但似乎Chrome根据系统上的可用内存量更改将分配给选项卡的内存量。因此,如果您有大量可用内存,则选项卡将使用大量内存,而如果没有太多,则不会使用太多。这似乎与堆大小不成比例,可能只是Chrome保留的为使自己更快而存在的东西。这只是一种理论,基于对Chrome内存使用情况的监视 :)

我有一个类似的问题。堆大小和节点计数总是回到底部值(我认为垃圾收集器一直在清理)。内存大小持续增加......这也适用于必须保持运行数月的应用程序;) - Guntram
我遇到了同样的问题,有没有新的见解?我将尝试通过对about:blank进行分析并从那里开始逐步构建来确定触发Chrome内存泄漏的原因。 - tylermauthe
3
我认为这不是泄漏。如果机器上有多余的内存,Chrome会使用内存进行优化。内存增长似乎总是与可用空闲内存的数量成比例。 - Cully
1个回答

6

这可能已经过时了,不再相关,但对于其他遇到这个问题的人来说:很可能是因为打开了开发者工具。我有一个应用程序会随着时间累积内存,但堆大小保持不变,当我关闭开发工具时,内存大幅下降,并且不像开发工具打开时那样再次提升。在长期内存占用量分析时,请先使用 Chrome 任务管理器。

我猜测在你的情况下,这是因为开发者工具必须存储所有这些 REST API 调用(以在 Network 标签中显示它们),而我不确定 Chrome 是否会暂时将它们保存到磁盘上以节省内存。


我们发现在没有打开 dev 工具的情况下,标签页的内存使用量会增长。事实上,这就是导致我们首次对它进行调查的原因。 - Cully
在当前的Chrome版本中是否仍然发生这种情况?这听起来像是Chrome中的一个错误,应该进行报告。 - Numbnut
我已经五年没参与这个项目了,不确定它是否仍在进行中。我认为这不是一个错误。我仍然认为我在2015年6月9日的更新中所提供的解释可能是发生的情况。 - Cully
我在我的视频通话项目中遇到了类似的问题。每当两个用户中的一个刷新时,选项卡内存显示内存使用量增加,每次刷新都会增加。但是堆快照大小保持相对不变。但是,如果我不打开浏览器任务管理器并刷新,则不会增加太多。我猜测浏览器任务管理器是开发工具的一部分。 - Quan To
仍然发生在安装了Chrome 110和Redux Dev-Tools的情况下。为寻找内存泄漏搜索了数小时。谢谢 :) - araisch

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