如何知道什么使节点进程停止?
我hace一个非常复杂的脚本,它打开套接字,HTTP服务器,读/写文件,设置超时等。达到一些条件,所有这些应该停止 – 我清除所有的超时,closures所有的服务器等。
但是有时候这个过程会停下来,有时它会一直等待发生。 我可以杀死节点进程,但是我想找出造成这个行为的原因,修复它并让进程自行停止。 是否有可能debugging什么让它退出?
更新:
我跟随了Jan的build议,这是我在尝试“debugging”一个简单的setTimeout
调用时所得到的结果:
/tmp/node2/bin/node test.js [debug] UV_TIMER 0x1cdfd20 (fd:910168617, refs:0, flags:0x0) [debug] UV_ASYNC 0xc096e8 (fd:0, refs:-1, flags:0x0) [debug] UV_ASYNC 0xc09658 (fd:0, refs:0, flags:0x0) [debug] UV_IDLE 0xc09778 (fd:0, refs:-2, flags:0x0) [debug] UV_ASYNC 0xc041c0 (fd:0, refs:-1, flags:0x0) [debug] UV_ASYNC 0xc03de0 (fd:0, refs:-1, flags:0x0) [debug] UV_TIMER 0xc03d40 (fd:0, refs:-1, flags:0x0) [debug] UV_IDLE 0xc03ca0 (fd:0, refs:-1, flags:0x0) [debug] UV_CHECK 0xc03c00 (fd:0, refs:-1, flags:0x0) [debug] UV_IDLE 0xc03a00 (fd:0, refs:-1, flags:0x0) [debug] UV_CHECK 0xc03b60 (fd:0, refs:-1, flags:0x0) [debug] UV_PREPARE 0xc03ac0 (fd:0, refs:-1, flags:0x0)
所以这对我来说并不是很有用,但我想没有别的select。
不容易。 你可以编译这个补丁版本的node.js,用它启动你的应用程序( node appname.js
),然后运行:
pkill -USR2 node
这将打印出当前事件循环中的所有活动句柄。
注意这是一个四个月的版本,所以这是有点过时了。 它应该一点点进入节点,但还没有计划。