分析PHP页面内存使用情况的好方法是什么?例如,查看我的数据使用了多少内存,和/或哪些函数调用分配的内存最多 .
xdebug似乎没有在其分析功能中提供内存信息 .
xdebug does 在其跟踪功能中提供它 . 这非常接近我想要的,除了大量的数据是压倒性的,因为它显示了每个函数调用的内存增量 . 如果可以隐藏一定深度以下的调用,可能使用一些GUI工具,这将解决我的问题 .
还有别的事吗?
Xdebug reimplemented memory tracing in 2.6(2018-01-29)可以在Qcachegrind或类似工具中使用 . 只是make sure to select the memory option :)
来自文档:
从Xdebug 2.6开始,探查器还会收集有关正在使用多少内存的信息,以及aGnd方法增加内存使用量的功能 .
我不熟悉文件的格式,但是Qcachegrind在跟踪几个内存问题时对我很有帮助 .
您可能知道,自从2. *版本以来,Xdebug删除了内存分析支持 . 请在此处搜索"removed functions"字符串: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
然后在我的代码中:
<?php memprof_enable(); // do your stuff memprof_dump_callgrind(fopen("/tmp/callgrind.out", "w"));
最后用KCachegrind打开 callgrind.out 文件
callgrind.out
首先在这里下载最新的软件包安装 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.heap
pprof将在您现有的浏览器会话中创建一个新窗口,如下所示:
使用 Xhprof 和 Xhgui ,你可以分析cpu的使用情况,或者只是内存使用情况,如果_2622423是一个非常完整的解决方案,它可以让你完全控制,并且可以在mongo或文件系统中写入日志 .
有关详细信息see my answer here .
Blackfire是SensioLabs的PHP探查器,Symfony2人https://blackfire.io/
如果您使用puphpet设置虚拟机,则支持'll be happy to know it' ;-)
好吧,这可能不是你想要的,但PHP确实有几个内置函数可以输出内存使用量 . 如果您只想查看函数调用使用了多少内存,可以在调用之前和之后使用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上,你将不得不测试它,但这对我有用 .
我修改了我的tracefile-analyzer.php文件,并在顶部添加了PHP二进制文件的路径,以便您可以在终端中将其作为普通的unix脚本调用 .
#!/Applications/MAMP/bin/php5.3/bin/php <?php if ( $argc <= 1 || $argc > 4 ) {
不要忘记将此文件chmod到755 .
您可以轻松创建ruby watchr脚本,以便在每次创建内存配置文件(* .xt)时自动调用该脚本 . 这样,您可以不必一遍又一遍地执行命令,继续测试和查看您的改进 .
4 回答
Xdebug reimplemented memory tracing in 2.6(2018-01-29)可以在Qcachegrind或类似工具中使用 . 只是make sure to select the memory option :)
来自文档:
我不熟悉文件的格式,但是Qcachegrind在跟踪几个内存问题时对我很有帮助 .
您可能知道,自从2. *版本以来,Xdebug删除了内存分析支持 . 请在此处搜索"removed functions"字符串:http://www.xdebug.org/updates.php
所以我尝试了另一种工具,它对我来说效果很好 .
https://github.com/arnaud-lb/php-memory-profiler
这是我在Ubuntu服务器上完成的启用它:
然后在我的代码中:
最后用KCachegrind打开
callgrind.out
文件使用谷歌gperftools(推荐!)
首先在这里下载最新的软件包安装 Google gperftools :https://code.google.com/p/gperftools/
然后一如既往:
现在在您的代码中:
然后打开终端并启动:
pprof将在您现有的浏览器会话中创建一个新窗口,如下所示:
Xhprof Xhgui(在我看来,最好的配置cpu和内存)
使用 Xhprof 和 Xhgui ,你可以分析cpu的使用情况,或者只是内存使用情况,如果_2622423是一个非常完整的解决方案,它可以让你完全控制,并且可以在mongo或文件系统中写入日志 .
有关详细信息see my answer here .
Blackfire
Blackfire是SensioLabs的PHP探查器,Symfony2人https://blackfire.io/
如果您使用puphpet设置虚拟机,则支持'll be happy to know it' ;-)
好吧,这可能不是你想要的,但PHP确实有几个内置函数可以输出内存使用量 . 如果您只想查看函数调用使用了多少内存,可以在调用之前和之后使用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上,你将不得不测试它,但这对我有用 .
我修改了我的tracefile-analyzer.php文件,并在顶部添加了PHP二进制文件的路径,以便您可以在终端中将其作为普通的unix脚本调用 .
不要忘记将此文件chmod到755 .
您可以轻松创建ruby watchr脚本,以便在每次创建内存配置文件(* .xt)时自动调用该脚本 . 这样,您可以不必一遍又一遍地执行命令,继续测试和查看您的改进 .