如何识别Xhprof的瓶颈?

时间:2015-09-02 21:16:54

标签: php performance profiling call-graph xhprof

我遇到了一个非常慢的API调用问题,并希望使用Xhprof找出它所导致的内容:默认的GUI和调用图。该如何分析这些数据?

在代码中找到应该优化的地方的方法是什么,尤其是最昂贵的瓶颈?

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

在所有这些专栏中,重点关注名为“IWall%”的专栏,第5栏。 请注意,senddoRequestreadfgets每个都有72%的挂钟时间。

这意味着如果您使用了100个堆栈样本,那么每个例程都会发现自己的72个,给予或接受,我怀疑它们会一起出现。 (你的图表也应该显示出来。)

因此整个过程需要23秒,这意味着大约需要17秒才能阅读。 如果你能发现某些阅读是不必要的,你可以减少17秒的唯一方法就是这样。你能吗?

剩下的28%(6秒)怎么样? 首先,值得吗? 即使你可以将其减少到零(总共17秒,你不能),加速因子将是1 /(1-0.28)= 1.39,或39%。 如果你可以减少一半(总共20秒),它将是1 /(1-0.14)= 1.16,或16%。 20秒对23秒,由你来决定是否值得这么麻烦。

如果您认为是这样,我建议采用random pausing方法,因为它不会让您充满噪音。 它是正确的问题的核心,不仅告诉你哪些例程,而且告诉你哪些代码行,以及它们为什么被执行。 (为什么是最重要的,因为如果绝对必要,你不能替换它。 对于分析器,您倾向于认为这是必要的,因为您无法另行说明。)

由于你正在寻找占据大约14%时间的东西,你平均需要检查2 / 0.14 = 14个样本才能看到它两次,这将告诉你它是什么。 请记住,大约14 * 0.72 = 10个样本将落在fgets(及其所有调用者)中,因此您可以忽略它们或使用它们来确保所有I / O都是必需的。 (例如,你是否有可能两次读东西,因为一些晦涩难懂的原因,比如这样做更容易?我已经看过了。)