PHP内存分析

什么是分析PHP页面的内存使用情况的好方法? 例如,要查看我的数据正在使用多less内存,和/或哪些函数调用正在分配最多的内存。

  • xdebug似乎没有提供内存信息的分析function。

  • xdebug在它的跟踪function提供了它。 这与我想要的非常接近,除了绝对数量的数据是压倒性的,因为它显示了每个函数调用的内存增量。 如果可以将呼叫隐藏在某个深度以下,那么可以使用一些GUI工具,这将解决我的问题。

还有别的事吗?

正如你可能知道的那样,自从2. *版本以来,Xdebug放弃了内存分析支持。 请在这里search“删除的函数”string: http : //www.xdebug.org/updates.php

删除了function

由于无法正常工作,删除了对内存分析的支持。

所以我已经尝试了另一种工具,它对我很好。

https://github.com/arnaud-lb/php-memory-profiler

这是我在Ubuntu服务器上完成的,

sudo apt-get install libjudy-dev libjudydebian1 sudo pecl install memprof echo "extension=memprof.so" > /etc/php5/mods-available/memprof.ini sudo php5enmod memprof service apache2 restart 

然后在我的代码中:

 <?php memprof_enable(); // do your stuff memprof_dump_callgrind(fopen("/tmp/callgrind.out", "w")); 

最后用KCachegrind打开callgrind.out文件

使用Google gperftools(推荐!)

首先在这里下载最新的软件包来安装Google gperftools : https : //code.google.com/p/gperftools/

然后一如既往:

 sudo apt-get update sudo apt-get install libunwind-dev -y ./configure make make install 

现在在你的代码中:

 memprof_enable(); // do your magic memprof_dump_pprof(fopen("/tmp/profile.heap", "w")); 

然后打开你的terminal并启动:

 pprof --web /tmp/profile.heap 

pprof将在您现有的浏览器会话中创build一个新窗口,如下所示:

用memprof和gperftools进行PHP内存分析

Xhprof + Xhgui(在我看来最好的configurationCPU和内存)

有了XhprofXhgui,你可以分析CPU使用情况,或者只是内存使用情况,如果这是你的问题。 这是一个非常完整的解决scheme,它可以让你完全控制,日志可以写在mongo或文件系统中。

欲了解更多详情, 请参阅我的答案 。

黑火

Blackfire是SensioLabs的一个PHP profiler,Symfony2的家伙https://blackfire.io/

如果你使用puphpet来设置你的虚拟机,你会很高兴知道它的支持;-)

那么,这可能不是你正在寻找的,但PHP确实有一些内置的function,将输出内存使用情况。 如果您只想查看函数调用正在使用多less内存,则可以在调用之前和之后使用memory_get_peak_usage() ,并采取差异。

你使用类似的memory_get_usage()在你的数据中使用相同的技术。

相当简单的方法,但它是检查一段代码的快速方法。 我同意xdebug mem deltas可能太冗长,有时候很有用,所以我经常用它来缩小一段代码,然后手工转储出小块的特定内存使用情况。

http://geek.michaelgrace.org/2012/04/tracing-php-memory-usage-using-xdebug-and-mamp-on-mac/

我在Mac上,所以如果你在Windows上,你将不得不testing这个,但这对我有用。

我修改了我的tracefile-analyzer.php文件,并将path添加到顶层的PHP二进制文件中,以便可以在terminal中将其作为普通的unix脚本调用。

 #!/Applications/MAMP/bin/php5.3/bin/php <?php if ( $argc <= 1 || $argc > 4 ) { 

不要忘记把这个文件改为755。

您可以轻松创build一个ruby watchr脚本,在每次创build内存configuration文件(* .xt)时自动调用该脚本。 这样,您可以继续testing并查看您的改进,而不必一遍又一遍地执行命令。