如何获取正在运行的Node.js进程的线程转储?

时间:2017-11-14 10:58:07

标签: node.js profiling stack-trace v8

在Java JVM中,kill -3强制进程打印所有正在运行的线程的当前堆栈跟踪。我发现快速找到瓶颈非常有效。

V8中是否有等效物?我可以让V8打印当前的堆栈跟踪吗?

澄清: 我假设,由于节点的异步性质,它不如典型的非异步程序有用。尽管如此,如果有一种简单的方法可以访问一些堆栈跟踪,那么查看它并不需要花费太多时间。

根据我的经验,在您需要切换到更高级的工具之前,可以快速找到一些明显的瓶颈。

3 个答案:

答案 0 :(得分:2)

您可以使用 heapdump 工具完成相同的操作。我发现以下相同的以下文章(也对我有用):

https://medium.com/better-programming/make-a-dump-of-the-v8-heap-and-inspect-for-your-node-app-b69f7b68c162

答案 1 :(得分:1)

Node已满载诊断信息,上面的技巧(如果我理解正确的话)将是多余的,但可以随时纠正我。

必读:NodeSource的精彩博客1 2 3

我将尝试列出所有我认为有用的工具:

其他人(只需用Google搜索。)

答案 2 :(得分:1)

在此主题上,您有以下想法:

# node --debug-brk buggy.js Debugger listening on port 5858

在另一个终端中:

connecting to 127.0.0.1:5858 ... ok
break in buggy.js:16
 14 }
 15 
>16 z();
 17 
 18 });
debug> cont```

(wait for the node process to start using 100% CPU)

```debug> step
break in buggy.js:3
  1 function x() {
  2     var i = 0;
> 3     while(1) {
  4             i++;
  5     }
debug> bt
#0 buggy.js:3:8
#1 buggy.js:9:2
#2 buggy.js:13:2
#3 buggy.js:16:1```

Source:
https://github.com/nodejs/node-v0.x-archive/issues/25263