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

Cul*_*lly 12 javascript memory memory-leaks google-chrome

我在一个单页应用程序上与一个团队合作,有很多计时器,每秒约有10个REST API调用.我们使用Chrome内存分析工具来查找所有内存泄漏 - 此时堆大小保持不变(即在垃圾收集之间).但是,我们注意到应用程序运行的时间越长,Chrome选项卡本身使用的内存就越多.几个小时后,我们看到标签内存增长到大约350MB,而堆大小仍然是6MB.如果在一夜之间运行,标签消耗超过500MB并且在早上变得无法使用.

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

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

在此输入图像描述

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

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

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

编辑(2015年6月9日):我不确定这是否记录在任何地方,但似乎Chrome会根据系统上的可用内存量更改它将分配给选项卡的内存量.因此,如果你有大量的可用内存,那么选项卡将占用大量内存,如果你没有太多内存,它将不会使用那么多内存.这似乎与堆大小不成比例,它可能只是Chrome保留的东西,使自己更快.这只是一个基于监控Chrome内存使用情况的理论:)

Num*_*nut 5

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

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