性能报告的函数在 0xffffffffffffffff
Perf report's function at 0xffffffffffffffff
我正在尝试了解 myApp 忙于处理什么(90% cpu 单线程)。这是我不应该重新启动的服务器。我通过
收集了样本
perf record -p 5068 -F 99 --call-graph dwarf sleep 10
perf report
给我这个:
+ 100.00% 0.00% myApp [unknown] [.] 0xffffffffffffffff ◆
+ 80.67% 0.67% myApp myApp [.] pipeline_run ▒
+ 67.71% 0.00% myApp myApp [.] QueryProcessor::process
我花了一些时间谷歌搜索和阅读文档,我怀疑 0xffffffffffffffff 无法解决,因为 perf
不知道堆栈底部在哪里,因为它没有启动该过程。但是有人可以确认一下或指出正确的方向吗?
在我的例子中,这是由于 perf
使用的堆栈转储大小太小造成的。那会导致截断的栈底变成0xffffffffffffffff
,这会让perf report
和朋友认为函数0xffffffffffffffff
用的很多
当我使用最大堆栈转储捕获大小时,我摆脱了大部分 0xffffffffffffffff
。如果您传递 --call-graph dwarf
,将使用 8192
的默认堆栈转储大小。要最大化它,请更改为 --call-graph dwarf,65528
.
来自 perf record --help
:
When "dwarf" recording is used, perf also records (user) stack dump
when sampled. Default size of the stack dump is 8192 (bytes).
User can change the size by passing the size after comma like
"--call-graph dwarf,4096".
如果您尝试使用大于 65528
的值,您会得到
callchain: Incorrect stack dump size (max 65528): 128000
我正在尝试了解 myApp 忙于处理什么(90% cpu 单线程)。这是我不应该重新启动的服务器。我通过
收集了样本perf record -p 5068 -F 99 --call-graph dwarf sleep 10
perf report
给我这个:
+ 100.00% 0.00% myApp [unknown] [.] 0xffffffffffffffff ◆
+ 80.67% 0.67% myApp myApp [.] pipeline_run ▒
+ 67.71% 0.00% myApp myApp [.] QueryProcessor::process
我花了一些时间谷歌搜索和阅读文档,我怀疑 0xffffffffffffffff 无法解决,因为 perf
不知道堆栈底部在哪里,因为它没有启动该过程。但是有人可以确认一下或指出正确的方向吗?
在我的例子中,这是由于 perf
使用的堆栈转储大小太小造成的。那会导致截断的栈底变成0xffffffffffffffff
,这会让perf report
和朋友认为函数0xffffffffffffffff
用的很多
当我使用最大堆栈转储捕获大小时,我摆脱了大部分 0xffffffffffffffff
。如果您传递 --call-graph dwarf
,将使用 8192
的默认堆栈转储大小。要最大化它,请更改为 --call-graph dwarf,65528
.
来自 perf record --help
:
When "dwarf" recording is used, perf also records (user) stack dump
when sampled. Default size of the stack dump is 8192 (bytes).
User can change the size by passing the size after comma like
"--call-graph dwarf,4096".
如果您尝试使用大于 65528
的值,您会得到
callchain: Incorrect stack dump size (max 65528): 128000