PHP内存分析

JW.*_*JW. 92 php memory profiling

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

  • xdebug似乎没有在其分析功能中提供内存信息.

  • xdebug 确实在其跟踪功能提供了它.这非常接近我想要的,除了大量的数据是压倒性的,因为它显示了每个函数调用的内存增量.如果可以隐藏一定深度以下的调用,可能使用一些GUI工具,这将解决我的问题.

还有别的事吗?

Fra*_*ula 66

您可能知道,自从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
Run Code Online (Sandbox Code Playgroud)

然后在我的代码中:

<?php

memprof_enable();

// do your stuff

memprof_dump_callgrind(fopen("/tmp/callgrind.out", "w"));
Run Code Online (Sandbox Code Playgroud)

最后callgrind.outKCachegrind打开文件

使用谷歌gperftools(推荐!)

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

然后一如既往:

sudo apt-get update
sudo apt-get install libunwind-dev -y
./configure
make
make install
Run Code Online (Sandbox Code Playgroud)

现在在您的代码中:

memprof_enable();

// do your magic

memprof_dump_pprof(fopen("/tmp/profile.heap", "w"));
Run Code Online (Sandbox Code Playgroud)

然后打开终端并启动:

pprof --web /tmp/profile.heap
Run Code Online (Sandbox Code Playgroud)

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

使用memprof和gperftools进行PHP内存分析

Xhprof + Xhgui(在我看来,最好的配置cpu和内存)

使用XhprofXhgui,您可以分析cpu的使用情况,或者只是内存使用情况,如果这是您目前的问题.这是一个非常完整的解决方案,它可以让您完全控制,并且可以在mongo或文件系统中编写日志.

有关详细信息,请参阅我的答案.

黑火

Blackfire是SensioLabs的PHP探查器,Symfony2人员https://blackfire.io/

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

  • 注意:最新版本仅支持php7.如果您使用php5,请使用`sudo pecl install memprof-1.0.0`进行安装. (4认同)

zom*_*bat 17

好吧,这可能不是你想要的,但PHP确实有几个内置函数可以输出内存使用量.如果您只想查看函数调用使用了多少内存,可以在调用之前和之后使用memory_get_peak_usage(),并获取差异.

您可以使用非常相似的memory_get_usage()在数据周围使用相同的技术.

非常简单的方法,但它是检查一段代码的快速方法.我同意xdebug mem deltas有时候太冗长了,所以我经常只是用它来缩小代码的一部分,然后手动转出小块的特定内存使用量.


Sea*_*ney 9

Xdebug 在2.6(2018-01-29)中重新实现了内存跟踪,可以在Qcachegrind或类似工具中使用.只需确保选择内存选项 :)

来自文档:

从Xdebug 2.6开始,探查器还会收集有关正在使用多少内存的信息,以及aGnd方法增加内存使用量的功能.

我不熟悉文件的格式,但是Qcachegrind在跟踪几个内存问题时对我很有帮助.

qcachegrind样本

  • 他们甚至用我的票.:) (2认同)