Chrome堆快照 - 为什么它不显示所有分配的内存?

23

我正在进行一些内存使用测试,针对我所拥有的一个WebGL项目。如果我在Google Chrome上启动页面,并在开发者工具的“Profiles”选项卡中进行堆快照,则会显示我的页面占用了7.5 MB。

问题是,如果我查看任务管理器,实际使用的内存值接近1 GB!这是可以预料的,因为我确实强制页面具有数千个对象,但问题是:为什么Chrome向我显示我只使用了7.5 MB?


Chrome的进程分散在插件、标签和主要的Chrome服务中。您到底想要哪个快照? - TheZ
@TheZ 我真正想知道的是我的页面正在使用的内存量。 - Daniel Pereira
你应该在http://crbug.com上报告一个错误。 - gman
2个回答

14

更新

以前有一个本地内存快照可以显示本地内存图表。 不幸的是,我们删除了它,因为它是一段脆弱的代码。 它需要在数百个类中进行非平凡的检测,并影响二进制文件大小。 希望我们以后能重新实现它。

曾经

它拍摄 JavaScript 堆的快照。所有你的 JavaScript 对象使用了 7.5mb 的内存。这个大小不包括图片、画布、音频文件、插件数据等。

DevTools 中有一个本机内存快照。 它计算呈现器进程使用的非 JavaScript 内存,但这是一个试验性功能。

您需要在 chrome://flags 中启用 DevTools 实验功能,重启浏览器,在 DevTools 设置面板中启用 Native Memory Profiler 实验功能,然后重新打开 DevTools。

完成这些步骤后,您将能够在 Profiler 面板中获取本地内存快照。 并不是本地内存堆中的所有内存块都会被计算,但我们正在努力解决这个问题。

请使用 Chrome 的 Canary 版本。 它每天更新,并与其他版本的 Chrome 并行使用。

如果您的页面占用了几个 gigabytes 的内存,并且有一个大的“Other”条,超过 10%-20%,请向 Google Chrome Developer Tools 论坛发送邮件。


不幸的是,谷歌已经从实验性开发工具中删除了本地内存快照功能。我不知道为什么。但这意味着这个答案不再有效:/ - UpTheCreek
很遗憾,我们移除了原生内存快照功能,虽然它能够展示原生内存图形,但这部分代码非常脆弱。它需要在数百个类中进行重要的检测,并且会影响二进制文件的大小。我希望我们以后能够重新实现它。 - loislo
谢谢您的更新 - 看起来我不能再授予赏金了,但是我会点个赞! - UpTheCreek
多年过去了,但谷歌仍未提供一种分析本地内存的方法。 - Ezee
现在在2018年有没有办法做到这一点?我看到Chrome v69中有“本地内存采样分析器”标志,但启用并重新启动后,我仍然无法在DevTools中看到获取本地内存快照的选项。 - Pascal Lindelauf

-1

您仍然可以在个人资料选项卡下进行快照,并单击“获取头部快照”,从而获得深入的内存使用统计信息。


这些快照只是给你一个堆的视图。正如问题所述,问题在于分析 Chrome 任务管理器中显示但不显示在堆中的内存使用情况。 - UpTheCreek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接