PHP脚本的性能调优一贯是使用xdebug进行profile的脚本输出,在windows下有一款软件叫WinCacheGrind的软件进行图形界面的细节结果观察。今天就在找mac下有没有同样功能好用的软件。

第一款查到的软件叫MacCallGrind,非常好用。不用自己编译安装,直接下载就能使用了,和一般的mac软件没啥差别,而且图形界面做得也不错。可惜,要钱的,而且要价很高。500K的一个软件要$149,抢钱呢。

然后到xdebug的官方网站逛了逛,发现官方有介绍一个软件叫qcachegrind(kcachegrind)。虽然名字有两个,其实是一个软件,区别在于界面的安装是使用QT还是KDE。貌似使用QT作为界面被推荐得多一点,于是就决定用这个了。

安装步骤:

1. 首先要安装QT,macport当前的版本是4.7.4,官方网站上的最新版本是4.8.0。这玩意本身体积就不小,然后编译需要巨量的CPU运算,总之,需要耐心等待。。。

port -v install qt4-mac

2. 然后需要安装Graphviz,版本是2.28.0。这个。。。依赖包巨多,耐心,耐心。。。插一句,因为依赖包异常多,难免有的时候有网络问题之类导致某个安装包安装失败了,切记不要重复执行install命令。因为install会直接继续上次安装到一半的过程,某些错误就被继承进去了,导致最后还是失败。最好是先clean一次。

port -v clean [SOFTWARE_NAME]
port -v install graphviz

3. 接下来就是QCacheGrind自身了,到官方网站上下载源码包,当前版本是0.7.0。

cd /Users/jonathan/Downloads/
tar zxvf kcachegrind-0.7.0.tar.gz
cd kcachegrind-0.7.0/qcachegrind

因为该软件默认的文件打开类型限定为callgrind.*,不太方便profile某些脚本输出的文件。且打开的时候,默认的文件夹是程序所在文件夹,找文件很不方便。所以我们需要修改下源代码来绕过这两个限制。

vim  ./qcgtoplevel.cpp

查找“QFileDialog::getOpenFileName”,并将查到的两处函数调用中的第三个参数从“_lastFile”换成你所指定的文件夹地址,我这里是“/Users/jonathan/logs”。
查找"tr("Callgrind Files (callgrind.*);;All Files (*)"));",并将查到的两处中的"Callgrind Files (callgrind.*);;"删除,不对文件类型作限制。并保存退出。
编译:

qmake -spec 'macx-g++'
make

然后在当前目录下就应该有应用程序了:qcachegrind.app,把这个文件移动到“应用程序”文件夹里方便以后使用。

OK,安装到这里就顺利结束了。

有一点需要注意,界面上显示的时间长度单位都是微秒(1 / 1000000 秒),所以,面板上的时间你除以1000就是毫秒了。