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

时间:2015-04-09 22:46:16

标签: javascript google-chrome memory memory-leaks

我在一个单页应用程序上与一个团队合作,有很多计时器,每秒约有10个REST API调用。我们使用Chrome内存分析工具来查找所有内存泄漏 - 此时堆大小保持不变(即在垃圾收集之间)。

但是,我们注意到应用程序运行的时间越长,Chrome标签本身使用的内存就越多。几个小时后,我们已经看到标签内存增长到大约350MB,而堆大小仍然是6MB。如果一夜之间运行,标签消耗超过500MB并且在早上变得无法使用。

我们需要应用程序运行很长一段时间(我们希望每周只重启一次),所以这是一个问题。

这是一小时内堆时间线的截图。最后,标签的私有内存大小为350MB,而堆的大小保持在5.4MB左右。

enter image description here

我们已经在Windows 7的Chrome 40和Chrome 38中看到过这种情况。我们已禁用缓存,并以隐身模式运行该应用程序。

知道为什么标签内存大小会增长到Chrome无法使用的程度,而JS堆的使用量仍然很小?

编辑:我们运行应用程序几天,标签内存大小高达800MB,堆大小仍然大致相同。

编辑(6/9/15):我不确定这是否记录在任何地方,但Chrome似乎会更改它将分配给标签的内存量关于系统上的可用内存量。因此,如果你有大量的可用内存,标签会占用大量内存,如果你没有多少内存,它就不会使用那么多内存。这似乎与堆大小成正比,它可能只是Chrome保留的东西,使自己更快。这只是一个基于监控Chrome内存使用情况的理论:)

1 个答案:

答案 0 :(得分:1)

这可能已经太旧了,不再适用了,但是对于其他经历过这种情况的人来说:这可能是由于开发工具已打开。我有一个应用程序,该应用程序会随着时间的推移在堆大小不变的情况下累积内存,但是当我关闭开发工具时,内存下降了,并且没有像打开开发工具时那样恢复。在分析长期内存占用量时,请首先使用chrome任务管理器。

在您的情况下,我可以猜测是因为devtools必须存储所有这些REST API调用(以在“网络”标签中显示),而且我不确定chrome是否将它们临时保存到磁盘上以节省内存。