【发布时间】:2018-04-27 07:03:03
【问题描述】:
在 Java JVM 中,kill -3 强制进程打印所有正在运行的线程的当前堆栈跟踪。我发现快速定位瓶颈非常有效。
V8 中是否有等价物?我可以让 V8 打印当前的堆栈跟踪吗?
澄清: 我认为,由于节点的异步特性,它不如典型的非异步程序有用。不过,如果有一种简单的方法可以访问一些堆栈跟踪,那么查看它并不需要太多时间。
根据我的经验,在您需要切换到更高级的工具之前,可以通过这种方式快速定位一些明显的瓶颈。
【问题讨论】:
-
@PaulDraper 我不知道是不是只有我,但 Q 似乎假设其他人在使用
kill -3JVM 时对 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