Chrome 选项卡内存不断增长,堆大小保持不变

问题描述 投票:0回答:2

我正在与一个团队合作开发一个单页应用程序,该应用程序有相当多的计时器,每秒大约有 10 个 REST API 调用。我们已经使用 Chrome 内存分析工具来定位所有内存泄漏——此时堆大小保持大致相同(即在垃圾回收之间)。

但是,我们注意到应用程序运行的时间越长,Chrome 选项卡本身使用的内存就越多。几个小时后,我们看到选项卡内存增长到约 350MB,而堆大小仍为 6MB。如果整夜运行,该选项卡会消耗超过 500MB 的空间,到早上就会变得无法使用。

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

这是一个小时内堆时间线的屏幕截图。最后,选项卡的私有内存大小为 350MB,而堆大小保持在 5.4MB 左右。

enter image description here

我们已经在 Windows 7 上的 Chrome 40 和 Chrome 38 中看到了这一点。我们禁用了缓存,并以隐身模式运行应用程序。

知道为什么选项卡内存大小会增长到 Chrome 无法使用的程度,而 JS 堆使用量仍然如此之小吗?

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

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

javascript google-chrome memory memory-leaks
2个回答
7
投票

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

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


0
投票

这个 docs 说这是由于 DOM 节点随着时间的推移而添加的事实。

© www.soinside.com 2019 - 2024. All rights reserved.