微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – chrome私有内存不明原因的增长

我正在分析我编写的javascript库,寻找内存泄漏.该库为后端提供API和服务.它不做任何html或dom操作.它不加载任何资源(图像等).它唯一做的就是发出xhr请求(使用jquery),包括一个长轮询,并通过事件(使用Backbone事件总线)传递和接收来自UI的数据.

我测试了这个库,一夜之间运行了16个小时.加载它的页面只会加载库并发送启动服务的登录请求.在测试过程中没有html,css或其他dom更改.

在测试过程中发生的所有事情都是图书馆每15秒向服务器发送一次心跳(xhr请求),并且每隔30秒通过长轮询收到一次心跳.

我在打开chrome任务管理器的情况下运行测试,并打开chrome调试器,以便从时间轴强制GC.

在测试开始时,在我强制初始GC之后 – 这些是来自chrome任务管理器的统计数据:
记忆 – 11.7mb

Javascript内存 – 6.9 mb / 2.6mb直播

共享内存 – 21.4 mb

私人记忆19mb

16小时后我强迫GC – 这些是新的统计数据:
记忆 – 53.8mb

Javascript内存 – 6.9 mb / 2.8mb live

共享内存 – 21.7 mb

私人记忆60.9mb

正如您所看到的,JS堆只增长了200k.

私人记忆增长了42mb!

任何人都可以提供可能解释导致私人记忆增长的原因吗?打开chrome调试器会导致或影响内存增长吗?

一个想法是强制GC从时间线调试器只从JS堆中回收内存 – 所以其他内存没有被回收.因此,这可能不是“泄漏”本身,因为它最终可能被收集 – 虽然我不知道如何确认这一点.特别是不知道这个记忆代表什么.

最后,我确实读到xhr结果也存储在私有内存中.有没有人知道这是不是真的?如果是这样,该应用确实在这段时间内执行了大约5700 xhr的请求.如果42mb中的大部分是由于这个原因,这将意味着大约7k被分配 – 考虑到有效载荷非常小,这似乎很高.如果是这样的话;什么时候会释放这个内存,我有什么办法可以让它被释放,并且让chrome调试器打开会影响这个吗?

最佳答案
我无法找到关于何时以及什么进入私人记忆与javascript记忆的信息.但是我可以回答这个问题:“让Chrome调试器打开会影响这个”……是的.

打开开发人员工具会导致浏览器收集/保留/显示有关正在制作的每个XHR的更多信息.当开发人员工具关闭时,这些数据不会被收集/保留(因为大多数人都知道,因为当你打开开发工具时,它有时很烦人,而且它错过了你关心的那个请求).

您可以打开开发工具,触发GC,然后关闭开发工具,再次打开它们以在需要获取指标时触发GC.此外,您可以使用此sucker chrome:// memory-redirect /来跟踪增长情况,而无需打开开发工具.

原文地址:https://www.jb51.cc/js/429761.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐