Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 找出我的nodejs线程挂在哪里?_Node.js_Debugging - Fatal编程技术网

Node.js 找出我的nodejs线程挂在哪里?

Node.js 找出我的nodejs线程挂在哪里?,node.js,debugging,Node.js,Debugging,我有一个节点服务器正在运行。偶尔,主线程会挂起并达到100%的CPU使用率。线程完全挂起,不处理任何进一步的事件 不幸的是,正因为如此,即使附加节点调试器也没有用,因为线程挂起在某个地方(我运行了节点的调试器并附加到已暂停的进程,但[例如]“pause”或“bt”不会返回) 我怎么才能知道它挂在哪里?是否可以让节点跟踪当前的闭包堆栈,以便在错误再次出现时可以追溯访问它?一种低级检查方法是使用类似strace的实用程序。您可以像这样使用它:strace-p。但是,这将只显示系统调用,因此如果您的程

我有一个节点服务器正在运行。偶尔,主线程会挂起并达到100%的CPU使用率。线程完全挂起,不处理任何进一步的事件

不幸的是,正因为如此,即使附加节点调试器也没有用,因为线程挂起在某个地方(我运行了节点的调试器并附加到已暂停的进程,但[例如]“pause”或“bt”不会返回)


我怎么才能知道它挂在哪里?是否可以让节点跟踪当前的闭包堆栈,以便在错误再次出现时可以追溯访问它?

一种低级检查方法是使用类似strace的实用程序。您可以像这样使用它:
strace-p
。但是,这将只显示系统调用,因此如果您的程序处于某种无限循环中,并且没有进行任何系统调用(如执行I/O),那么您将看不到任何输出

您还可以尝试使用toattachtolive进程,以获得一个对节点进程更友好的接口(与使用gdb相比)


关于查看节点进程中哪些句柄/请求处于活动状态,如果您喜欢冒险,可以使用两种“private”(下划线前缀)方法:
process.\u getActiveHandles()
process.\u getActiveRequests()
。您可以将这些函数与这样的模块结合使用,该模块有助于检测事件循环的执行速度是否低于您想要的阈值。

我非常感谢您的回答和一些非常有用的建议。不幸的是,这些都不能解决问题的关键(如何确定主线程中挂起节点的闭包堆栈)。不过,我会研究你的建议,看看它们是否有帮助。谢谢