【问题标题】:Chrome tab memory keeps growing, heap size stays the sameChrome 选项卡内存不断增长,堆大小保持不变
【发布时间】:2015-06-15 12:27:14
【问题描述】:

我正在与一个团队合作开发一个单页应用程序,该应用程序有很多计时器,每秒大约有 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 内存使用情况:)

【问题讨论】:

  • 我也有类似的问题。堆大小和节点数总是回到底部值(我假设 gc 不断清理)。内存大小不断增加......这也适用于必须存活数月的应用程序;)
  • 我也遇到了同样的问题,有没有新的见解?我将尝试通过分析 about:blank 来确定是什么触发了 Chrome 中的内存泄漏,并从中构建以查看泄漏开始的时间点。
  • @tylermauthe 我不认为这是泄漏。我认为 Chrome 只是使用内存进行优化,如果机器上有可用的内存。增长似乎总是与可用内存量成正比。

标签: javascript google-chrome memory memory-leaks


【解决方案1】:

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

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

【讨论】:

  • 即使没有打开开发工具,我们也体验到了标签内存的增长。事实上,这就是促使我们首先对其进行调查的原因。
  • 在当前的 chrome 版本中是否仍然发生?这听起来像是 chrome 中的错误,应该报告
  • 我已经五年没有从事这个项目了,不确定它是否仍然会发生。我不认为这是一个错误。我仍然认为我对 2015 年 6 月 9 日更新的解释很可能是正在发生的事情。
猜你喜欢
  • 2016-02-24
  • 1970-01-01
  • 2014-06-15
  • 2013-01-09
  • 2013-09-27
  • 1970-01-01
  • 2018-07-11
  • 2013-10-20
  • 1970-01-01
相关资源
最近更新 更多