我正在使用 Golang 的 pprof 来分析我的应用程序。我得到这个 .pb 文件,我可以使用它打开
go tool pprof profile.pb
从我输入的工具中
(pprof) raw
根据文档,“输出原始配置文件的文本表示”。这输出
PeriodType: wall nanoseconds
Period: 10000000
Time: 2020-06-09 08:56:49.487 -0400 EDT
Duration: 20s
Samples:
sample/count wall/nanoseconds
1950 19490080000: 1 2 3 4 5 6
0 3040000: 7
0 80000: 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2 3 4 5 6
0 80000: 32 33 34 35 36 37 38 23 24 25 26 27 28 29 30 31 2 3 4 5 6
0 4000000: 39 40 41 42 43 44 45 46 29 30 47 2 3 4 5 6
.
.
.
Locations
1: 0x0 M=1 start /usr/local/lib/python2.7/site-packages/tornado/ioloop.py:863 s=0()
2: 0x0 M=1 main app/web.py:485 s=0()
3: 0x0 M=1 main /home/myapp.py:196 s=0()
4: 0x0 M=1 <module> /home/myapp.py:227 s=0()
.
.
.
我不明白的
我的理解是 pprof 是一个基于样本的分析器。这反映在上面的转储中,因为每一行似乎代表某个样本的一个实例。右边的数字必须是位置表的索引。
令人困惑的部分是第一个表的标题中的“样本/计数”,以及这么多样本似乎计数为零的事实。如果他们的计数为零,为什么他们一开始会在那里?那么“样本/计数”究竟是什么意思呢?