【发布时间】: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