找出我的nodejs线程挂起的位置?

时间:2016-12-20 19:58:03

标签: node.js debugging

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

不幸的是,因此,即使附加节点调试器也没用,因为线程挂在某处(我运行节点的调试器并附加到停顿的进程但是[例如]' pause&#39 ;或者' bt'不返回)。

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

1 个答案:

答案 0 :(得分:1)

一种低级别的检查方法是使用像strace这样的实用程序。您可以像 automationName: 'XCUITest' 一样使用它。这只会显示系统调用,所以如果你的程序处于某种无限循环中而没有进行任何系统调用(比如执行I / O),你将看不到任何输出。

您也可以尝试使用llnode附加到实时进程,以获得更节点友好的节点进程接口(与使用gdb相比)。

至于查看节点进程中哪些句柄/请求处于活动状态,如果您有冒险精神,可以使用几种“私有”(下划线前缀)方法:{{1} }和 rescue_from CanCan::AccessDenied do |exception| redirect_to :back, :alert => exception.message end 。您可以将这些函数与blocked之类的模块结合使用,这有助于检测事件循环的执行速度是否比您想要的任何阈值慢。