使用Valgrind分析PHP执行过程

一. valgrind简介

Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。 Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-OReilly开源代码奖。

该工具是个神器,用途非常广泛,不过主要来事用来调试C的性能与内存泄露检测;

二.通过valgrind查看PHP执行情况

因为PHP是C语言写的,所以通过该工具检测PHP程序也非常简单,下面是详细步骤:

  1. 安装valgrind;
    Mac下安装:
    1
    brew install valgrind

Windows下安装: https://sourceforge.net/projects/valgrind4win/
安装完之后Mac下终端中运行 valgrind –help 能看到效果;

  1. 安装php-valgrind扩展;
    到github上下载安装包即可:https://github.com/laruence/php-valgrind/archive/master.zip 通过phpize安装:

    PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 $ unzip master.zip
$ cd php-valgrind
$ PHP_PATH/bin/phpize //PHP_PATH为PHP的安装目录
$ ./configure --with-php-config=PHP_PATH/bin/php-config
$ make
$ sudo make install

//成功的话会提示: Installing shared extensions: **/extensions/no-debug-non-zts-20131226/

$ vim PHP_PATH/etc/php.ini //添加 extension = valgrind.so
$ PHP_PATH/bin/php -m //检查valgrind.so模块是否安装成功

//创建一个PHP文件 index.php

<?php
$a =array();
callgrind_toggle();
for ($i=0;$i<100;$i++) {
$a[$i] = 2;
}
callgrind_toggle();
callgrind_dump();

//php文件内容入上所示

$ valgrind --tool=callgrind --collect-atstart=no --instr-atstart=no PHP_PATH/bin/php index.php

//当前目录会生成一个或多个callgrind.out.* 文件
  1. 使用qcachegrind GUI程序查看callgrind.out.* 文件;

    Mac下安装:
    none brew install qcachegrind

    Windows下安装: https://sourceforge.net/projects/qcachegrindwin/

    效果如下: