有没有什么免费软件或商业可以促进PHP应用程序的内存使用分析?我知道xdebug可以生成跟踪文件,通过函数调用显示内存使用情况但没有图形工具,数据很难解释.
理想情况下,我希望不仅能够查看总内存使用情况,还能查看堆上的对象以及与Jprofiler类似的引用它们的对象.
您可能知道,自从2.*版本以来,Xdebug删除了内存分析支持.请在此处搜索"已删除的函数"字符串:http://www.xdebug.org/updates.php
删除了功能
删除了对内存分析的支持,因为它无法正常工作.
所以我尝试了另一种工具,它对我来说效果很好.
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
然后在我的代码中:
最后
使用谷歌gperftools(推荐!)callgrind.out
用KCachegrind打开文件首先在此处下载最新的软件包来安装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"));然后打开终端并启动:
pprof --web /tmp/profile.heappprof将在您现有的浏览器会话中创建一个新窗口,如下所示:
Xhprof + Xhgui(在我看来,最好的配置cpu和内存)使用Xhprof和Xhgui,您可以分析cpu的使用情况,或者只是内存使用情况,如果这是您目前的问题.这是一个非常完整的解决方案,它可以让您完全控制,并且可以在mongo或文件系统中编写日志.
有关详细信息,请参阅我的答案.
黑火Blackfire是SensioLabs的PHP探查器,Symfony2人员https://blackfire.io/
如果您使用puphpet设置您的虚拟机,您会很高兴知道它的支持;-)
2> EvilPuppetMa..:我最近遇到了同样的问题,遗憾的是找不到任何具体的工具.
但有帮助的是以启用mem deltas的人类可读格式输出xdebug跟踪(INI设置,xdebug.show_mem_deltas或我认为的东西?).然后在输出上运行sort(如果你在*nix上):
sort -bgrk 3 -o sorted.txt mytracefile.xt对第三个col,即mem deltas进行排序.您还可以对第二列进行排序,在这种情况下,您可以找到应用程序总共使用最多内存的行.
当然,这无法检测到对象的内存使用何时仅以较小的增量爬升,但最终会占用大量内存.我有一个相当愚蠢的方法,试图使用对象迭代和序列化的组合来做到这一点.它可能并不完全等同于内存使用情况,但希望能够了解从哪里开始查看.请记住它会耗尽内存本身,并且还没有经过广泛测试,所以买家要小心:
function analyzeMem($obj, $deep=false) { if (!is_scalar($obj)) { $usage = array('Total'=>strlen(serialize($obj))); while (list($prop, $propVal) = each($obj)) { if ($deep && (is_object($propVal) || is_array($propVal))) { $usage['Children'][$prop] = analyzeMem($propVal); } else { $usage['Children'][$prop] = strlen(serialize($propVal)); } } return $usage; } else { return strlen(serialize($obj)); } } print_r(analyzeMem(get_defined_vars()));另外,刚刚由同事建议这种方法(欢呼丹尼斯;-)这隐藏了低于2级缩进的步骤,你可以很容易地看到整体内存使用量上升的点,并可以通过增加来缩小范围缩进:
egrep '[0-9]+ ( ){1,2}-> ' mytracefile.xt
3> 小智..:在http://www.xdebug.org/updates.php上,对于Xdebug 2.0.4,他们在"删除的函数"部分写道:"...删除了对内存分析的支持,因为它无法正常工作......".因此xdebug不会是一个选择