【发布时间】:2018-02-23 23:06:45
【问题描述】:
我将使用perf -g -p 收集的样本提供perf report 的输出。我不知道如何实现第一列。有很多 Java_* 调用需要超过 90% 的时间。
在呈现的结果中有很多条目,我的意思是:
+ 98,78% 0,00% java libpthread-2.26.so
+ 95,77% 0,00% java libjvm.so
...
我的问题是:
为什么这样的条目多于 1 个?每个条目都是一种堆栈跟踪。单线程进程只有一个堆栈跟踪。
【问题讨论】:
-
这看起来像是一个累积总数,所以(几乎?)所有东西的顶级父级(几乎)获得了(几乎)所有的 CPU 时间给它自己 + 子级。相关:请参阅 Chandler Carruth 的 CppCon 2015 演讲:"Tuning C++: Benchmarks, and CPUs, and Compilers! Oh My!",了解有关使用
perf的一些提示/技巧。其中一些应该适用于 Java(例如关于解释输出的部分,而不是关于创建以您想要的方式编译的源代码而不优化您的微基准测试或在迭代之间进行优化的部分。)
标签: perf