【发布时间】:2018-07-01 11:34:25
【问题描述】:
我正在使用的节点应用程序在某些负载下遇到性能问题。我正在尝试使用 V8 分析器找出问题所在,基本上遵循 this guide。
我在问题加载期间使用node --prof app.js 生成了一个日志文件,并使用node --prof-process isolate-0xnnnnnnnnnnnn-v8.log > processed.txt 对其进行了分析。这一切似乎都很好,但似乎几乎所有的滴答声都花在了节点可执行文件本身中:
[Summary]:
ticks total nonlib name
3887 5.8% 38.2% JavaScript
5590 8.4% 55.0% C++
346 0.5% 3.4% GC
56296 84.7% Shared libraries
689 1.0% Unaccounted
和:
[Shared libraries]:
ticks total nonlib name
55990 84.2% /usr/bin/node
225 0.3% /lib/x86_64-linux-gnu/libc-2.19.so
68 0.1% /lib/x86_64-linux-gnu/libpthread-2.19.so
7 0.0% /lib/x86_64-linux-gnu/libm-2.19.so
4 0.0% [vdso]
2 0.0% /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20
这是什么意思?应用程序一直在做什么?如何找到性能问题?
【问题讨论】:
-
当然好!首先,您需要查看堆栈样本,以便了解为什么它会花费时间。常规百分比不会告诉你任何事情。其次,它可能几乎将所有时间都花在等待像 I/O 这样的系统调用上,如果是这样,您将需要查看导致 I/O 的堆栈样本,以便您可以看到它在等待什么。大多数分析器都吹嘘自己是CPU Profiler。知道这意味着什么吗?它们对 I/O 视而不见,无论它浪费了多少时间。