一个小玩意PHP-Valgrind的介绍
作者: Laruence( ) 本文地址: http://www.laruence.com/2013/08/14/2899.html 转载请注明出处 首先, 太久不更新博客了, 容我先啰嗦几句. 我一直以为人总是会挤出时间写博客的, 但现在看来我错了. 博客很久不更新, 倒不是说没有内容可以分享. 而是这一年来确
- 作者: Laruence()
- 本文地址: http://www.laruence.com/2013/08/14/2899.html
- 转载请注明出处
首先, 太久不更新博客了, 容我先啰嗦几句.
我一直以为人总是会挤出时间写博客的, 但现在看来我错了. 博客很久不更新, 倒不是说没有内容可以分享. 而是这一年来确实忙了很多, 本身工作上的事情就很多, 业余时间也被PHP项目上的事情, Zend的事情填满. 再加上一些小感悟也都在微博上牢骚了… 所以….
Anyway, 很感谢各位经常来我博客的朋友, 不过我建议大家如果是提问的话, 不要在留言里, 有的时候会被博客当做SPAM, 有一些小问题, 可以来微博At我 @laruence
言归正传, 今天分享个前天刚刚做的小工具, 代码可以在我的github上找到: php-valgrind. 这个工具主要是为PHP脚本提供了可以在脚本中开启Valgrind(严格说是Callgrind)的Profile能力.
一般来说, 我们用Callgrind的时候, 如果要分析某一个函数, 可以通过toggle-collect=”函数名”, 来告诉Callgrind在进入这个函数的时候开始Profile. 但是这样没有办法分析具体某一段代码..
其实Callgrind提供了一个机制, 可以让我们在代码中控制何时开启: CALLGRIND_TOGGLE_COLLECT
比如:
#include#include void foo(int a[100]) { int i = 0; } int main (int argc, char **argv) { int i, a[100]; CALLGRIND_START_INSTRUMENTATION; CALLGRIND_TOGGLE_COLLECT; for (i=0; i 然后, 编译成a.out以后, 我们就可以分析具体的这个循环代码断的相关Profile信息:
$ valgrind --tool=callgrind --collect-atstart=no --instr-atstart=no ./a.out之后生成的callgrind.out就可以被callgrind_annotate, kcachegrind等工具来分析了
$callgrind_annotate callgrind.out.27538 //OUTPUT: -------------------------------------------------------------------------------- Ir --------------------------------------- 617 PROGRAM TOTALS --------------------------------------- Ir file:function --------------------------------------- 617 test.c:main [***dev/a.out]是不是很方便呢?
但是呢, 有的时候, 比如我们做扩展, 或者其他的一类内部的性能分析的时候. 需要在PHP脚本也能做这样的触发. 就没有办法了. 于是我就写了这个小工具php-valgrind, 装好这个扩展以后, 来看个例子:
然后我们开始分析:
$valgrind --tool=callgrind --collect-atstart=no --instr-atstart=no php /tmp/1.php然后我们分析下输出:
------------------------- Ir -------------------------- 2,361,260 PROGRAM TOTALS //以下省略然后让我们用qcachegrind(带gui的callgrind分析工具), 来看看:
可见, PHP要实现同样的功能需要的各种代码数相比C语言来说, 那可是多了N倍的(所以当然要比C慢了.. 嘿嘿, 再次申明: “C语言是最好的语言, 没有之一!”)
好了工具介绍完毕, 大家有兴趣的可以去玩玩, 这个工具还可以用来让我们了解, 我们的一个PHP代码, 会触发调用那些底层的函数, 或者系统调用等等, Enjoy~
Comments
- 2013/08/14, 秋风 writes: 终于更新了,试试!
- 2013/08/14, 夜丶有雪 writes: 前排留名、广告位招租 C语言是最好的语言, 没有之一!
- 2013/08/14, pakey writes: 没有抢到沙发
- 2013/08/14, 微历史 writes: 保持更新很重要
- 2013/08/14, 风逐蓝天 writes: PHP 是最好的语言~~~
- 2013/08/14, php230 writes: V5
- 2013/08/14, 我叫张大熊 writes: 微博私信问了你一个问题 可是还没有得到回答 求回答啊
- 2013/08/14, 我叫张大熊 writes: 微博私信问了你一个问题 可是还没有得到回答 求回答啊
- 2013/08/15, eagle writes: 需要另行安装Callgrind吗?
- 2013/08/15, eagle writes: 需要另行安装Callgrind吗?
- 2013/10/14, wclssdn writes: 我也在微博问过大牛好几个问题.. 就是不理我... 汗... 还有. 类似大牛的这个工具可以用xhprof.. 有图片展示方式... 太直观了... 数据表格也更丰富...
- 2013/12/18, goodboy writes: “C语言是最好的语言” ......
- 2014/02/19, Winona writes: I was curious if you ever thought of changing the page layout of your website? Its very well written; I love what youve got to say. But maybe you could a little more in the way of content so people could connect with it better. Youve got an awful lot of text for only having one or two pictures. Maybe you could space it out better?
- 2014/02/27, real estate preview writes: ?e're a ?roup ?f volunteers and starting a brand new scheme in ?ur community. Your web site provided us with u?еful information to work on. You have done a formidable job and ouг whole gro?p can be thankful to you. ?ere i? my blog: real estate preview
- 2014/09/10, computer repairs, apple mac pro reviews, cell phone repair, computer support,mercadolibre writes: Its 23-inch screen is already written on Apple's website because "Discontinued. As a result, the smaller sized or thinner the notebook, the lesser the capabilities in view that they are pressured to go out some ports. Feel free to visit my web blog: computer repairs, apple mac pro reviews, cell phone repair, computer support,mercadolibre
- 2014/10/17, Nigel writes: 模板大神而来~~~~~
Related posts:
- 注意PHP对字符串的递增运算
- GCC优化引起的一个”问题”
Copyright © 2010 风雪之隅 版权所有, 转载务必注明. 该Feed只供个人使用, 禁止未注明的转载或商业应用. 非法应用的, 一切法律后果自负. 如有问题, 可发E-mail至my at laruence.com.(Digital Fingerprint: 73540ba0a1738d7d07d4b6038d5615e2)
上一篇: phpMyAdmin配置备忘