我正在Windows 8.1 64位上开发Go 1.2。我有很多问题让go pprof工具正常工作,例如显示内存地址而不是实际的函数名称。
然而,我发现profile似乎在生成配置文件时做得很好,配置文件与pprof工具一起使用。我的猜测是,我如何使用这些配置文件进行图形可视化?
答案 0 :(得分:1)
如果你的目标是看到漂亮但基本没有意义的图片,那就去@Specode建议进行可视化。
如果您的目标是速度,那么我建议您忘记可视化。 可视化不会告诉您需要修复的内容。
This method does tell you what to fix. 你可以在GDB中非常有效地完成它。
编辑以回应@ BurntSushi5:
以下是我对“图表的抱怨”:)
首先,他们非常容易傻瓜。 例如,假设A1花费所有时间来调用C2,反之亦然。 然后假设插入一个新例程B,这样当A1调用B时,B调用C2,而当A2调用B时,B调用C1。 图形丢失每次调用C2时的信息,A1在堆栈上方,反之亦然。
再举一个例子,假设每次对C的调用都来自A. 然后假设A“调度”到一堆函数B1,B2,...,每个函数调用C. 图表丢失每次调用C的信息都来自A。
现在到链接的图表:
当包容时间更为重要时,它非常注重自我时间,制作巨型盒子。 (事实上,gprof
被发明的全部原因是因为自我时间与只有二手的时钟一样有用。)他们至少可以按包容时间缩放方框。
它说 nothing 关于调用来自或者花费自己时间的代码行。它基于所有函数都应该很小的假设。也许这是真的,也许不是,但它是否足以让配置文件输出无益?
满满的小盒子无关紧要,因为它们的时间微不足道。他们所做的只是占用大量房地产并分散你的注意力。
I / O中没有任何内容。图形显示的剖析器显然表明唯一的I / O是必需的I / O,因此不需要对其进行剖析(即使它需要90%的时间)。在大型程序中,I / O很容易完成并不是必需的,占用大部分时间,所谓的“CPU分析器”具有甚至不存在的偏见。
在该图中似乎没有任何递归实例,但递归很常见且很有用,并且图形很难通过有意义的测量来显示它。
只是指出,如果采取少量的堆栈样本,大约一半的样本将是这样的:
blah-blah-couldn't-read-it
blah-blah-couldn't-read-it
blah-blah-couldn't-read-it
fragbag.(*structureAtoms).BestStructureFragment
structure.RMSDMem
... a couple other routines
另一半的样本正在做其他事情,同样提供信息。 由于每个堆栈示例都显示了调用来自的代码行,因此您实际上被告知为何花费时间。 (不花费很多时间的活动很少被采样,这很好,因为你不关心那些。)
现在我不知道这段代码,但图表让我怀疑,就像我看到的很多代码一样,数据结构中的恶魔。
答案 1 :(得分:0)
你可以尝试go tool pprof /path/to/program profile.prof
解决功能不是真正的问题。
如果您想要图形可视化,请尝试在pprof中输入web
。