- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我试图理解左侧面板中 Kcachegrind 中显示的值
我有包括。 (我在手册中读到的是包容性的),Self, Called an Function
现在我正在分析这个 cachegrind 文件,我有
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 命令在两者中具有相同的值。
这里的“ self ”是什么意思?
此外,这些百分比如何相互关联?我不明白 item->close 如何占用 83% 而 mysql_query 占用 78%
谢谢
最佳答案
“self”表示该函数所用的时间,而不是它调用的任何函数所用的时间。如果“ self ”低而“含”。很高,那么优化的最佳位置可能是其中一个子项(例如称为函数)。在这种情况下,看起来 mysql-query 占用了大部分时间,因此您可能想要优化查询(如果可能)。 mysql_qeury
之所以有 "self"== "incl."是探查器无法查看该函数,因为它在 php 运行时之外(例如,在 mysql 客户端库中)进行工作
我可能会补充说,对 mysql_query
的 10067 次调用看起来非常可疑。数据库查询是一项非常昂贵的操作。您确定不能以某种方式减少查询数量吗?
编辑:
I can try. But what about the Incl.? How is it 80 in the close and then 70 in the mysql query how does that relate to the total percentage which should be 100%
数字不需要相加。您正在查看的是这些函数所占用的整体时间的排序列表。它不是调用图(尽管它经常会以某种方式模仿它)。
假设以下代码:
function fn1() {
sleep(1);
fn2();
}
function fn2() {
sleep(98);
}
function fn3() {
sleep(1);
}
fn1();
fn3();
这可能会生成以下输出:
name | incl. | self
main | 100% | 0%
fn1 | 99% | 1%
fn2 | 98% | 98%
fn3 | 1% | 1%
当您按“包括”对列表进行排序时,您看到的是总体上速度较慢的函数。换句话说,那些在这里得分高的不一定慢,但它们调用了其他函数。如果一个功能在“包括”上得分很高。 and 有很多调用,您应该考虑尝试减少对此函数的调用次数,或者让函数缓存其结果(仅当它是查询而不是操作时才有效)。
当您按“自身”排序时,您会看到实际占用时间最多的调用。这些是您想要微调的功能。在大多数 PHP 脚本中,您会发现 mysql_query
支配着这个字段。如果您有很多电话,请再次尝试减少它们或缓存。如果您的调用很少,那么您可能需要优化 sql 查询。 PHP 调试器无法帮助您解决这个问题。相反,找到实际的查询并在 mysql 控制台中对其运行 explain
。这本身就是一整章。
关于php - KCachegrind 解释困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1093138/
我安装了 KCachegrind在 Ubuntu 14.10 上 当我单击“打开”按钮时,我看到“打开”对话框带有文件“Callgrind 配置文件数据”的默认过滤器,但看不到我的文件。我必须在过滤器
有时我运行 kcachegrind,点击一下,点击关闭左侧面板的小“x”(哎呀!不知道如何找回它),再点击一下,完全迷失,然后退出 kcachegrind。 然后我稍后在同一个输入文件上再次重新运行
我喜欢 kcachegrind 的调用图。但是我一直无法让它绘制完整的调用图。 我想我只需要设置: 图表 > 来电者深度 > 无限制 图形 > 被调用者深度 > 无限制 图表 > 最小值节点成本 >
目前,我无法让我的 kcachegrind 实例显示超过 499 个列表项。这给我留下了一个不完整的调用图。 有没有办法不跳过功能? 最佳答案 刚刚想通了... 在 Ubuntu 上:- 编辑这个文件
在访问他们的 github 页面并从他们的 kde 文档站点看到一些 pdf 手册后,我仍然感到困惑。假设一段测试代码中有这两行: double a1 {asinh(1 / ep)};
我正在尝试使用 $ valgrind --tool=callgrind ./myProgram 查看带注释的源代码,然后使用 $ kcachegrind 使用 Ubuntu 12.04(我有使用 Ma
我想分析我的代码。所以我这样做: valgrind --tool=callgrind my_program [programm arguments] kcachegrind callgrind.out
我试图理解左侧面板中 Kcachegrind 中显示的值 我有包括。 (我在手册中读到的是包容性的),Self, Called an Function 现在我正在分析这个 cachegrind 文件,
Kcachegrind 非常棒,它是我最喜欢的工具,但有时我无法在远程服务器上的终端(例如使用 ssh)中运行它。 我知道可以设置 VNC 或 X-server 转发,但它很笨拙,而我需要一些简单的东
我正在使用 kcacheGrind 来可视化由 xdebug 保存的 symfony 应用程序的调试输出。我指的是“调用图”来查看执行图及其时间。 我在 kCacheGrind 中设置了以下选项,如下
我有一个 kcachegrind/callgrind 报告奇怪结果的模型代码。这是一种调度程序功能。调度员从 4 个地方调用;每个电话都说,实际do_J要运行的函数(所以 first2 将只调用 do
我在以下代码生成的可执行文件上运行 valgrind --tool=callgrind ./executable: #include #include using namespace std; c
您好,我是这个工具的新手,我没有太多关于它的文档,除了我能够通过谷歌搜索的内容。我有一个编译的 c++ 程序,我正在运行 callgrind,我看到了调用图,但如果我不使用相对 %。这些数字代表着什么
我正在尝试查看与可执行文件 lab13 关联的源代码。当我单击 KCachegrind 中的 Source 选项卡时,我只看到以下内容: There is no source available fo
我正在尝试使用 kcachegrind 生成调用图,最好清楚地指示调用图中的哪些 block 对应于我的函数。我关注了this answer作为测试运行,并得到不同的输出。我不明白我需要做什么来重复这
我正在尝试获取有关大型程序流程的一些信息。 KCachegrind 过去曾经非常适合这个。但是我的系统 (Kubuntu 10.10) 上的最新版本 (0.6kde) 不会显示调用树和调用者映射。它只
谁能告诉我如何对 kcachegrind 的结果感兴趣。 我有两个版本的代码(v1、v2)都在 Debug模式下编译。我通过带有选项的 valgrind 运行它们: valgrind --tool=c
我希望能够看到我的应用程序中的每个线程使用 callgrind 有多“昂贵”。我用 --separate-thread=yes 进行了分析选项,它为您提供整个应用程序的 callgrind 文件,然后
我正在使用 callgrind 来分析一小段代码。 Callgrind 输出文件生成良好,它们的内容看起来不错,但我无法使用 kcachegrind 打开它们:我收到以下错误消息: Could not
我通常使用 valgrind+kcachegrind 来分析 C++ 代码。我正在使用的新代码使用了很长的函数名称,因此图形结果一团糟。我想知道如何缩短函数名称以使其适合一个小盒子。 最佳答案 这是一
我是一名优秀的程序员,十分优秀!