PHP 内存分析使用谷歌gperftools(推荐!Xhprof + Xhgui(在我看来,最好的分析CPU和内存)黑火

2022-08-30 07:36:40

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

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

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

还有别的吗?


答案 1

您可能知道,Xdebug 自 2.* 版本以来就放弃了对内存分析的支持。请在此处搜索“已删除的函数”字符串: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

使用谷歌gperftools(推荐!

首先,通过在此处下载最新的软件包来安装Google gperftoolshttps://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将在您现有的浏览器会话中创建一个新窗口,如下所示:

PHP memory profiling with memprof and gperftools

Xhprof + Xhgui(在我看来,最好的分析CPU和内存)

使用XhprofXhgui,您也可以分析CPU使用情况,或者如果这是您目前的问题,则仅分析内存使用情况。这是一个非常完整的解决方案,它为您提供了完全控制,日志可以写入mongo或文件系统中。

有关更多详细信息,请参阅我的答案 请点击此处。.

黑火

Blackfire是SensioLabs的PHP分析器,Symfony2的家伙 https://blackfire.io/

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


答案 2

好吧,这可能不完全是您要寻找的,但是PHP确实内置了几个函数来输出内存使用情况。如果你只是想看看函数调用正在使用多少内存,你可以在调用之前和之后使用memory_get_peak_usage(),并取下差额。

您可以使用非常相似的memory_get_usage()对数据使用相同的技术。

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


推荐