Chinaunix首页 | 论坛 | 博客
  • 博客访问: 214762
  • 博文数量: 42
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-09 10:55
个人简介

每天改变一点点,生活充满了惊喜。

文章分类

全部博文(42)

文章存档

2016年(8)

2015年(29)

2014年(5)

我的朋友

分类: PHP

2015-10-30 16:12:01

forp 简介
forp 是一个轻量级的PHP扩展,用于提供PHP相关的分析数据。
可以提供以下分析数据:
1. 每个函数执行时间和分配的内存;
2. CPU使用率;
3. 函数调用发生的文件名和代码行;
4. 与 Google 事件跟踪 格式一致的输出;
5. 函数说明(可以用
#符号引用函数参数);
6. 函数所属的分组;
7. 函数的别名,(如果使匿名函数,会十分有用)。

forp 安装

获取 源代码文件:
git clone
进入安装目录:
cd forp-PHP-profiler/ext/forp

如果需要使用指定版本的 php 环境来安装forp,就需要指定 phpize、php-config脚本的路径,否则默认由PATH环境变量来指定。

1.执行 phpize 脚本,为PHP扩展准备构建环境
Shell>  /home/sunny/x86_64/php5/bin/phpize  -c /home/sunny/x86_64/php5/etc/php.ini

2.配置编译选项
Shell> ./configure  --with-php-config=/home/sunny/x86_64/php5/bin/php-config 
php-config 脚本用于获取安装的PHP配置信息
执行完上面的命令行后,会生成Makefile文件,检查下Makefile文件, 变量的 目录设置能会不正确,这与PHP版本编译时的环境有关系。

php-config -h 检查下PHP版本的路径信息是否一致
否则手动修改(也可以修改php-config脚本):
Shell> sed s#/home/xxx/php-5.5.27#/home/sunny/x86_64/php5#g -i Makefile


3.编译
Shell> make

4.安装
Shell>make install
/usr/bin/make64 MAC=64 install
Installing shared extensions:     /home/sunny/x86_64/php5/lib/php/extensions/

注意点:
(1)PHP 5.3以上版本才支持 forp。
(2)如果你的PHP版本是从其他地方Copy获取的,可能实际的环境和php配置文件、脚本的配置的地址不一致,
        可以手动对 php.ini、phpize、php-config文件做下修改。

以上安装过程,也可以用于在源码编译安装其他PHP 扩展时做参考。

forp 实例
以源代码中的实例做一个简单的解释:

  1. <?php
  2. // first thing to do, enable forp profiler
  3. forp_start();

  4. // here, our PHP code we want to profile
  5. function foo()
  6. {
  7.     echo "Hello world !\n";
  8. };

  9. foo();

  10. // stop forp buffering
  11. forp_end();

  12. // get the stack as an array
  13. $profileStack = forp_dump();

  14. print_r($profileStack);
执行后输出:
Hello world !
  1. Array
  2. (
  3.     [utime] => 0
  4.     [stime] => 0
  5.     [stack] => Array
  6.         (
  7.             [0] => Array
  8.                 (
  9.                     [file] => /home/users/chenguang02/sunny/programe/php/forp.php
  10.                     [function] => {main}
  11.                     [usec] => 23
  12.                     [pusec] => 10
  13.                     [bytes] => 32
  14.                     [level] => 0
  15.                 )

  16.             [1] => Array
  17.                 (
  18.                     [file] => /home/users/chenguang02/sunny/programe/php/forp.php
  19.                     [function] => foo
  20.                     [lineno] => 11
  21.                     [usec] => 15
  22.                     [pusec] => 0
  23.                     [bytes] => 32
  24.                     [level] => 1
  25.                     [parent] => 0
  26.                 )

  27.         )

  28. )
全局输出:
utime:用户函数调用CPU耗时
stime:系统调用CPU耗时

调用栈输出:
file:函数调用发生的文件路径
function:函数名
usec:函数调用时长(不包含分析的开销
pusec:内部分析时长(不执行函数
bytes:函数消耗
level:函数调用的深度(从forp_start调用开始计算
还有可能出现:
class:类名
groups:函数所属分组
caption:函数说明
parent:父函数栈(调用当前函数的函数)索引

阅读(1528) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~