Linux下PHP 应用提速工具--KCachegrind[整理学习]
2014-02-28 17:09
701 查看
本人系统是ubuntu
[Xdebug]
xdebug.profiler_append = 1 #append one file
xdebug.profiler_enable=on
xdebug.trace_output_dir="/home/eboss/xdebug/"
xdebug.profiler_output_dir="/home/eboss/xdebug/"
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
;xdebug.remote_host=localhost
xdebug.remote_port=9999
从终端窗口启动
cachegrind.out.951917687。将立即打开一个类似于图 3 的新窗口。
图 3. KCacheGrind 应用程序
单击 Callees 选项卡,双击源代码中突出显示的行,并从 Grouping 列表选择 Source
File 。所看到的视图应变为类似图 4 所示的内容。
图 4. 查看结果
正如您预期的一样,实际上全部的处理时间(70,989 毫秒的 99.87%)都花费在 3193 次对
Fibonacci 序列,程序会随之变慢),应该避免重新计算 Fibonacci 数字这样代价高昂的重复工作。事实上,ACME Fibonacci Maker 能够很好地进行计算重用。
下面展示了
5 展示了分析结果:与上次的 3192 次函数调用相比,这里仅需要 30 次调用(并且只有一半的调用需要计算结果),而时间则减少为只有 20 毫秒。
清单 6. 更新了的 fib() 函数
图 5. 加快了的 Fibonacci 函数
虽然单次运行应用程序能够指出一些问题(可以试试上面原始的应用程序中的 Fibonacci 序列的第 50 个元素 ),通常,还是需要通过几次调用收集统计信息以及查看模式。
如果保留默认的 “crc32” 命名模式,每次运行 fibonacci.php 时,将重写数据文件。然而,可以通过在 php.ini 中设置
图 6 显示了三次运行 Fibonacci Maker 之后数据合计的示例。总时间稍大于两秒;其中 99.97% 的时间花费在了
6 显示了 Call Graph 选项卡,它由
图 6. 合计分析数据
1.安装KCachegrind 命令如下:
apt-get install kcachegrind2.安装xdebug
apt-get install php5-xdebug3.配置php的xdebug
vim /etc/php5/fpm/php.ini[Xdebug]
xdebug.profiler_append = 1 #append one file
xdebug.profiler_enable=on
xdebug.trace_output_dir="/home/eboss/xdebug/"
xdebug.profiler_output_dir="/home/eboss/xdebug/"
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
;xdebug.remote_host=localhost
xdebug.remote_port=9999
从终端窗口启动
KCacheGrind并打开/home/eboss/xdebug/目录下的
cachegrind.out.951917687。将立即打开一个类似于图 3 的新窗口。
图 3. KCacheGrind 应用程序
单击 Callees 选项卡,双击源代码中突出显示的行,并从 Grouping 列表选择 Source
File 。所看到的视图应变为类似图 4 所示的内容。
图 4. 查看结果
正如您预期的一样,实际上全部的处理时间(70,989 毫秒的 99.87%)都花费在 3193 次对
fib()函数的调用上了。要加快该应用程序(随着进一步执行
Fibonacci 序列,程序会随之变慢),应该避免重新计算 Fibonacci 数字这样代价高昂的重复工作。事实上,ACME Fibonacci Maker 能够很好地进行计算重用。
下面展示了
fib()函数的优化版本。新的版本用内存换来了时间上的节省,因为它保留了中间的计算以便以后使用。图
5 展示了分析结果:与上次的 3192 次函数调用相比,这里仅需要 30 次调用(并且只有一半的调用需要计算结果),而时间则减少为只有 20 毫秒。
清单 6. 更新了的 fib() 函数
function fib($nth = 1) { static $fibs = array(); if ( ! empty ($fibs[$nth] ) ) { return( $fibs[$nth] ); } if ( $nth < 2 ) { $fibs[$nth] = $nth; } else { $fibs[$nth - 1] = fib( $nth - 1 ); $fibs[$nth - 2] = fib( $nth - 2 ); $fibs[$nth] = $fibs[$nth - 1] + $fibs[$nth -2]; } return( $fibs[$nth] ); } ?>
图 5. 加快了的 Fibonacci 函数
虽然单次运行应用程序能够指出一些问题(可以试试上面原始的应用程序中的 Fibonacci 序列的第 50 个元素 ),通常,还是需要通过几次调用收集统计信息以及查看模式。
如果保留默认的 “crc32” 命名模式,每次运行 fibonacci.php 时,将重写数据文件。然而,可以通过在 php.ini 中设置
xdebug.profiler_append = 1改变这种行为并将后续运行追加到相同的文件。更改之后重新启动 Web 服务器。
图 6 显示了三次运行 Fibonacci Maker 之后数据合计的示例。总时间稍大于两秒;其中 99.97% 的时间花费在了
fib()上。图
6 显示了 Call Graph 选项卡,它由
GraphViz的
dot工具生成。关于
KCacheGrind的具体用法不在本文讨论的范围之内,但是可以从网上获得其完整的文档。
KCacheGrind可以以很多种方法对数据进行交叉分析,根据您希望解决的问题选择合适的方法。
图 6. 合计分析数据
相关文章推荐
- Linux内核中内存相关的操作函数
- Linux 指令篇:档案目录管理--mkdir
- Linux6.x 双网卡绑定
- 分析容灾备份建设需求
- linux中fork()函数详解
- winscp 登录后连上远程linux机器后自动执行 sudo su -
- 嵌入式Linux系统挂载NFS系统
- linux chkconfig 命令的使用
- VM下安装Linux的MySQL版本
- 【CentOS 6.5】【转】新版本linux生成xorg.conf
- Linux 编译时钟偏移“Clock skew detected, your build may be incomplete” 报错解决
- Linux下运行Java
- LINUX常用命令(基础)
- Linux grep命令用法
- Linux sed命令用法
- Linux sed命令用法
- linux下的常用命令总结
- centos建立网站服务器iptables设置
- linux字符设备驱动开发模板及Makefile
- Linux tar打包命令