调试节点,是什么让它保持运行?

时间:2013-02-11 09:21:22

标签: node.js

我为Node.Js编写了一个脚本,它收集大量数据,处理,保存然后完成。不幸的是,我所做的就是阻止脚本完成和节点关闭,而是保持打开状态。

我可能只是通过我所做的更改来尝试跟踪它,但是......是否有一种简单的方法来调试节点并找出代码/事件/回调/连接或其他什么,它还在等什么?

我已经看过node-inspector但是我无法弄清楚如何跟踪任何保持打开状态的东西。有什么建议吗?

3 个答案:

答案 0 :(得分:7)

您可以使用wtfnode运行node.js程序,也可以在第一行或程序中添加require('wtfnode').init();。然后,当您按 ctrl + c 以终止该过程时,它将打印保持节点打开的所有事物的列表。

答案 1 :(得分:3)

当我发生这种情况时,最常见的是像mongodb,amqp等。这就是数据库连接,网络连接。确保在完成处理后关闭它们。

我猜你可以使用lsof -p <PID>并查看内容。我可以在那里看到mongodb和amqp。

答案 2 :(得分:1)

在您希望它关闭的位置添加

console.log(process._getActiveHandles());

您还可以添加处理程序

process.on('SIGINT', () => console.log(process._getActiveHandles()) );

因此,如果节点未正确关闭,Ctrl + C将告诉您原因。