我为Node.Js编写了一个脚本,它收集大量数据,处理,保存然后完成。不幸的是,我所做的就是阻止脚本完成和节点关闭,而是保持打开状态。
我可能只是通过我所做的更改来尝试跟踪它,但是......是否有一种简单的方法来调试节点并找出代码/事件/回调/连接或其他什么,它还在等什么?
我已经看过node-inspector但是我无法弄清楚如何跟踪任何保持打开状态的东西。有什么建议吗?
答案 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将告诉您原因。