gpt4 book ai didi

javascript - 追踪 Vue.js 服务器端渲染中的内存泄漏?

转载 作者:搜寻专家 更新时间:2023-10-30 22:15:29 25 4
gpt4 key购买 nike

我们有一个 Vue.js (v2.2.6) 应用程序在生产环境中运行,基于 Hacker News demo app structure 的服务器端渲染。 .我们遇到了内存泄漏,导致进程在大约 6-12 小时后耗尽内存并崩溃,我们已经开始在服务器上拍摄堆快照以尝试跟踪问题。

但是,我们已经研究了好几天,但一无所获。突出的一点(正如您在下面的屏幕截图中看到的那样)是,有许多 VueComponentVue$2 实例被创建并且从未从内存中删除。我对 Vue 的服务器端渲染的内部结构了解不多,无法知道这是否是真正的线索,如果是的话,从哪里可以看到。

enter image description here enter image description here

有没有人遇到过这样的事情,或者有什么想法可以帮助我们确定是什么导致了这种情况?

最佳答案

我最终通过切换到比单独使用堆快照更强大的调试工具来追踪这个问题:LLDB 和 llnode 插件。如果您使用过 Joyent 的 SmartOS 和 mdb,这应该非常熟悉,它为您提供了比标准堆快照更多的数据来钻取。

我使用了 dumpme节点模块在我的生产应用程序中触发核心转储(还有其他方法可以做到这一点,但我发现这是最简单的)。

然后我按照在 https://developer.ibm.com/node/2016/09/27/advances-in-core-dump-debugging-for-node-js/ 找到的说明进行操作并开始跟踪对保存在内存中的 VueComponents 的引用。

> lldb node -c core
(lldb) plugin load ./node_modules/llnode/llnode.so
(lldb) v8 findjsobjects
(lldb) v8 findjsinstances VueComponent
(lldb) v8 inspect ...

在这种情况下,事实证明有一个递归的 setTimeout 在组件被销毁时永远不会被清除,因此对整个应用程序的引用保留在内存中。

关于javascript - 追踪 Vue.js 服务器端渲染中的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43143278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com