【问题标题】:How to get a thread dump of a running Node.js process?如何获取正在运行的 Node.js 进程的线程转储?
【发布时间】:2018-04-27 07:03:03
【问题描述】:

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

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


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

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

【问题讨论】:

  • @PaulDraper 我不知道是不是只有我,但 Q 似乎假设其他人在使用 kill -3 JVM 时对 OP 的用例有一个公平的想法。我建议您提出修改以获得适当的解决方案。
  • @AdityaGuru 这里描述了这个想法(查看堆栈跟踪,有时称为穷人的分析器):stackoverflow.com/a/378024/783510
  • @AdityaGuru 一个类似的案例是调试一个“挂起”的程序。
  • 所以要点是“它无法完成” - 至少不是针对已经运行的任意 NodeJS 进程,就像我们 可以kill -3 做的那样?
  • @JanakaBandara 我也这么认为。当然有一些方法可以识别 NodeJs 中的性能问题,但它们不能像运行“kill -3”那样容易地应用在生产环境中。我在生产中识别性能的第一种方法往往是现在运行“perf top”。有时它会给你第一条线索,但也有明显的缺点:它不理解 NodeJ,因此输出可能难以解释。此外,它还监控 CPU 使用率,因此可能会误导 IO 绑定进程。它仍然很容易运行,并且不会过多地减慢生产系统的速度,所以我先尝试一下。

标签: node.js profiling stack-trace v8


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    在此线程上,您有一个想法:

    # 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
    

    【讨论】:

      【解决方案3】:

      Node 已完全加载诊断,上面的技巧(如果我理解正确的话)将是多余的,但请随时纠正我。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-22
        相关资源
        最近更新 更多