有什麼免費軟件或商業軟件可以幫助分析PHP應用程序的內存使用情況?我知道xdebug可以生成通過函數調用顯示內存使用情況的跟蹤文件,但是如果沒有圖形工具,數據很難解釋。用於直觀分析PHP應用程序的內存使用情況的工具
理想情況下,我希望不僅能夠查看總內存使用情況,還能夠查看堆上的對象以及與Jprofiler類似的對象。
有什麼免費軟件或商業軟件可以幫助分析PHP應用程序的內存使用情況?我知道xdebug可以生成通過函數調用顯示內存使用情況的跟蹤文件,但是如果沒有圖形工具,數據很難解釋。用於直觀分析PHP應用程序的內存使用情況的工具
理想情況下,我希望不僅能夠查看總內存使用情況,還能夠查看堆上的對象以及與Jprofiler類似的對象。
xdebug輸出的圖形工具是KCacheGrind。
我知道KCacheGrind和WinCacheGrind。據我所知,這兩種工具都不允許分析內存使用情況。 – 2008-11-01 19:12:32
嘗試webgrind。它以簡單易讀的基於瀏覽器的格式爲您提供CacheGrinder的分析。我在Mac上,它已經使分析變得輕而易舉。
不幸的是,webgrind不報告內存使用情況 - 只是執行速度。 – 2008-11-02 00:13:59
phpDesigner 2008可以使用xdebug和KCacheGrind對網站進行調試和基準測試。它也有一個內置的顯示器。
它處理內存使用情況分析或只是性能分析?從他們的網站我只看到性能分析。 – 2008-11-02 18:37:58
不能告訴你。這個程序的程序員是一個非常好的人。不會傷害他射擊他的電子郵件,問問自己! – user29772 2008-11-09 21:47:10
最近我遇到了同樣的問題,不幸的是找不到任何特定的工具。
但是有幫助的是在啓用mem增量(INI設置,xdebug.show_mem_deltas或我認爲是的東西)時以可讀格式輸出xdebug跟蹤。然後在輸出上運行排序(如果你在* nix上):
sort -bgrk 3 -o sorted.txt mytracefile.xt
這種排序在第三列,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
在http://www.xdebug.org/updates.php爲Xdebug的2.0.4他們寫節「已刪除的函數」:「...因爲無法正常工作,刪除了對內存分析的支持......」。因此xdebug不會成爲一個選項
正如你可能知道的那樣,Xdebug從2. *版本開始就拋棄了內存分析支持。請在這裏搜索了「刪除功能」字符串:http://www.xdebug.org/updates.php
Removed functions
Removed support for Memory profiling as that didn't work properly.
所以我嘗試另一種工具,它的工作很適合我。
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"));
最後打開callgrind.out
文件, KCachegrind
首先,安裝谷歌點擊這裏下載最新的軟件包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將與一些現有的瀏覽器會話創建一個新的窗口,像圖所示:
With Xhprof and xhgui你可以分析CPU使用情況,或者只是內存使用情況,如果這是你的問題在t他一刻。 這是一個非常完整的解決方案,它可以讓你完全控制,日誌可以寫在mongo或文件系統中。
欲瞭解更多詳情see my answer here。
Blackfire是SensioLabs一個PHP探查時,Symfony2的傢伙https://blackfire.io/
如果使用puphpet設置你的虛擬機,你會很高興地知道它的支持;-)
可能重複的[PHP內存分析](http://stackoverflow.com/questions/880458/php-memory-profiling) – 2015-11-26 13:31:56