首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KCachegrind解释混乱

KCachegrind解释混乱
EN

Stack Overflow用户
提问于 2009-07-07 15:47:45
回答 2查看 13.1K关注 0票数 39

我正在尝试理解左侧面板中Kcachegrind中显示的值

我有包含。(我在手册中读到的是包含的),Self,调用一个函数

现在我正在分析这个cachegrind文件,我有

代码语言:javascript
复制
Incl. ---- Self ---- Called ---- Function

100.05 ---- 0.04 ---- (0) ---- {main}

83.38 ---- 0.07 ---- 250 --- item->close

78.85 ---- 78.85 ---- 10 067 ---- php::mysql_query

这个列表还在继续..

但这是我的问题所在。

我认为item->close是我的瓶颈,但我不明白的是,它为什么有83.38的Inclusive,然后有0.07的Self,而mysql_query命令在这两个方面都是一样的。

“自我”在这里意味着什么?

另外,这些百分比之间是如何关联的?我不明白为什么item->close占83%,而mysql_query占78%

谢谢

EN

回答 2

Stack Overflow用户

发布于 2009-07-07 15:52:32

"self“指的是该函数所花费的时间,而不是它调用的任何函数所花费的时间。如果"self“较低,而"incl.”是高的,那么最好的优化位置可能是在其中一个孩子(例如。调用的函数)。在这种情况下,看起来mysql-query占用了大部分时间,因此您可能希望优化查询(如果可能)。mysql_qeury有"self“==的原因包括”是分析器不能看到函数内部,因为它在php运行时之外工作(例如。在mysql客户端库中)

我可能会补充说,打给mysql_query的10067个电话看起来非常可疑。数据库查询是一项非常昂贵的操作。你确定你不能以某种方式减少查询的数量吗?

编辑:

我可以试试。但是Incl.呢?在结束时为80,然后在mysql查询中为70,这与总百分比有什么关系?

这些数字不需要加起来。你所看到的,是这些函数所用时间的排序列表。它不是一个调用图(尽管它经常会以某种方式碰巧模仿它)。

假设代码如下:

代码语言:javascript
复制
function fn1() {
  sleep(1);
  fn2();
}
function fn2() {
  sleep(98);
}
function fn3() {
  sleep(1);
}
fn1();
fn3();

这可能会生成以下输出:

代码语言:javascript
复制
name | incl. | self
main | 100%  | 0%
fn1  | 99%   | 1%
fn2  | 98%   | 98%
fn3  | 1%    | 1%

当您按“包含”对列表进行排序时,您看到的是聚合速度较慢的函数。换句话说,那些在这里得分很高的函数并不一定很慢,但它们调用的是其他函数。如果一个函数在“包含”上得分很高。并且有很多调用,你应该考虑减少对这个函数的调用次数,或者让这个函数缓存它的结果(只有当它是一个查询,而不是一个动作时才有效)。

当您按"self“排序时,您将看到占用时间最多的实际调用。这些是您想要微调的函数。在大多数PHP脚本中,您会发现mysql_query在这一领域占据主导地位。如果您有许多调用,请再次尝试减少它们或缓存。如果您的调用很少,那么您可能需要优化sql查询。PHP调试器在这方面帮不了你。取而代之的是,找到实际的查询并在mysql-console中对其运行explain。这本身就是一个完整的章节。

票数 65
EN

Stack Overflow用户

发布于 2009-07-07 15:53:43

Self是指在函数中花费的时间,不包括它调用的任何函数。

例如:

代码语言:javascript
复制
function foo()
{
    bar();
}

function bar
{
    sleep(1);
}

foo();

这将为您提供:

代码语言:javascript
复制
Incl    Self   Func
1       0      foo
1       0      bar
1       1      sleep <- Here's the bottleneck!
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1093138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档