当前位置 : 主页 > 网页制作 > Nodejs >

node.js – Node v8垃圾收集器::如何调试长Mark-Sweep时间?

来源:互联网 收集:自由互联 发布时间:2021-06-16
我使用–trace_gc标志运行我的应用程序以尝试查找一些性能问题.好吧,看起来我可能已经发现了…… 1288678 ms: Mark-sweep 498.8 (549.0) - 488.8 (548.0) MB, 4085 ms [idle notification: finalize idle round] [GC
我使用–trace_gc标志运行我的应用程序以尝试查找一些性能问题.好吧,看起来我可能已经发现了……

1288678 ms: Mark-sweep 498.8 (549.0) -> 488.8 (548.0) MB, 4085 ms [idle notification: finalize idle round] [GC in old space requested].

Gadzooks! GC超过4秒钟.难怪我有问题.

现在,真正的问题是:如何找到GC的对象,更重要的是,它们被分配到哪里?我已经在nodetime中使用了堆快照,但是我没有看到足够的信息来帮助我发现这些对象的来源.我确实看到一些提示让我相信,或许我在某处有一个循环引用(例如,在单个用户进行几次API调用后,我在堆快照中看到了数百个“用户”属性).

是否有任何好的教程或其他关于如何追踪这些大型垃圾收集时间原因的好信息?或者也许我可以以某种方式打印分配的对象,试图找到循环引用…?

实际上没有任何工具,但我可以向您保证,循环引用不是问题所在.

我想知道你使用的是哪个版本的V8.

可能导致长时间停顿的一件事是非常大的物体. V8还不是很擅长增加数百万个元素阵列或具有数十万个对象的对象的扫描.

您可能希望在节点中或使用–nouse-idle-notification关闭空闲通知.我不确定通知是否总是在正确的时间触发.他们可以告诉V8 VM无事可做,现在是进行非增量停止世界GC的好时机.

网友评论