节点V8垃圾收集器::如何debugging长马克扫描时间?
我用–trace_gc标志运行我的应用程序,试图find一些性能问题。 好吧,看起来我可能已经find了…
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秒钟。 难怪我有问题。
现在,真正的问题是:我怎样才能find哪些对象正在GC中进行更为重要的分配? 我已经在nodetime中使用堆快照,但是我没有看到足够的信息来帮助我发现这些对象来自哪里。 我看到一些提示,让我相信,也许,我有一个循环引用的地方(例如,我看到数百个“用户”属性在一个简单的用户只需几个API调用堆快照)。
有没有什么好的教程或其他有关如何追踪这些大型垃圾收集时间的原因的良好信息? 或者,也许我可以打印分配的对象,试图find循环参考…?
这里没有任何工具,但我可以向你保证循环引用不是问题。
我不知道你正在使用哪个版本的V8。
有一件事情会造成很长时间的停顿是非常大的事情。 V8还不是非常擅长使用数十万个对象来增加对数百万元素数组或对象的扫描。
您可能需要closures节点中的闲置通知或使用–nouse-idle-notification。 我不确定通知总是在正确的时间开火。 他们可以告诉V8虚拟机无事可做,现在是做非增量停止GC的好时机。
- 在Node.js中的字数计数例子中的closures的必要性
- 如何正确创build一个HTTPS透明代理服务器与节点?
- 导出node.js模块中的对象
- TCPconfiguration的Amazon Elastic Load Balancer上的Socket.io Websockets
- MongoDb,NodeJs,Express和Angular 2,来自两个集合的数据join,复制和显示
- fs.createWriteStream不会立即创build文件?
- 检查文件是否被node.js损坏
- 如何通过API使用BookshelfJS在SQL DB中find一个INT和所有INT
- 使用npm卸载时自动从package.json中删除依赖项