Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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进程的线程转储?_Node.js_Profiling_Stack Trace_V8 - Fatal编程技术网

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

如何获取正在运行的Node.js进程的线程转储?,node.js,profiling,stack-trace,v8,Node.js,Profiling,Stack Trace,V8,在Java JVM中,kill-3强制进程打印所有运行线程的当前堆栈跟踪。我发现快速定位瓶颈非常有效 V8中是否有同等的发动机?我可以让V8打印当前堆栈跟踪吗 澄清: 我假设,由于节点的异步性质,它不如典型的非异步程序有用。尽管如此,如果有一种简单的方法可以访问几个堆栈跟踪,那么查看它并不需要很多时间 根据我的经验,在您需要切换到更高级的工具之前,可以通过这种方式快速找到一些明显的瓶颈。Node具有完全加载的诊断功能,上面的技巧(如果我理解正确)将是多余的,但请随意更正 必须阅读:NodeSo

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

V8中是否有同等的发动机?我可以让V8打印当前堆栈跟踪吗


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


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

Node具有完全加载的诊断功能,上面的技巧(如果我理解正确)将是多余的,但请随意更正

必须阅读:NodeSource的精彩博客

我将尝试列出我发现有用的所有工具:

其他人(只是在谷歌上搜索。)


在这个线程中,您可以使用以下方法:

#节点--调试端口5858上侦听的brk buggy.js调试器

在另一个终端:

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

您可以使用heapdump工具完成相同的操作。我在下面找到了同样的文章(它也适用于我):


@PaulDraper我不知道是否只有我一个人,但Q似乎认为其他人在使用
kill-3
JVM时对OP的用例有一个合理的想法。我建议您提出一个编辑以获得适当的解决方案。@AdityaGuru在这里描述了这个想法(查看堆栈跟踪,有时被称为穷人档案器):@AdityaGuru类似的情况是调试一个“挂起”的程序。所以要点是“无法完成”——至少不能针对已经运行的任意NodeJS进程,就像我们可以用
kill-3
做什么一样?@JanakaBandara我也这么认为。当然有一些方法可以识别NodeJ中的性能问题,但它们在生产中的应用不如运行“kill-3”那么容易。在确定生产中的性能时,我的第一种方法是现在就运行“perf top”。有时,它会给您提供第一条线索,但也有明显的缺点:它不理解NodeJs,因此输出可能很难解释。此外,它还监视CPU使用情况,因此可能会误导IO绑定进程。它仍然很容易运行,并且不会使生产系统太慢,所以我先尝试一下。我认为最好在您的答案中总结一下链接的重要部分。