我有一个为 Node.Js 编写的脚本,它收集大量数据、处理它、保存然后完成。不幸的是,我所做的事情是阻止脚本完成和节点关闭,而是保持打开状态。
我可能只是通过我所做的更改并尝试追踪它,但是......是否有一种简单的方法来调试节点并找出它的代码/事件/回调/连接或其他什么等待?
我看过 node-inspector 但我不知道如何追踪任何保持它打开的东西。有什么建议吗?
我有一个为 Node.Js 编写的脚本,它收集大量数据、处理它、保存然后完成。不幸的是,我所做的事情是阻止脚本完成和节点关闭,而是保持打开状态。
我可能只是通过我所做的更改并尝试追踪它,但是......是否有一种简单的方法来调试节点并找出它的代码/事件/回调/连接或其他什么等待?
我看过 node-inspector 但我不知道如何追踪任何保持它打开的东西。有什么建议吗?
您可以使用wtfnode运行您的 node.js 程序,或者require('wtfnode').init();
在第一行或您的程序中添加。ctrl然后,当您按+c终止进程时,它将打印保持节点打开的所有事物的列表。
当我发生这种情况时,通常是 mongodb、amqp 等。即数据库连接、网络连接。确保在完成处理后关闭它们。
我想你可以使用lsof -p <PID>
看看它说了什么。我可以在那里看到 mongodb 和 amqp。
在您希望它关闭的地方添加
console.log(process._getActiveHandles());
您还可以添加处理程序
process.on('SIGINT', () => console.log(process._getActiveHandles()) );
所以如果节点没有正确关闭,Ctrl + C 会告诉你原因。