2008-11-01 44 views
23

有什麼免費軟件或商業軟件可以幫助分析PHP應用程序的內存使用情況?我知道xdebug可以生成通過函數調用顯示內存使用情況的跟蹤文件,但是如果沒有圖形工具,數據很難解釋。用於直觀分析PHP應用程序的內存使用情況的工具

理想情況下,我希望不僅能夠查看總內存使用情況,還能夠查看堆上的對象以及與Jprofiler類似的對象。

+1

可能重複的[PHP內存分析](http://stackoverflow.com/questions/880458/php-memory-profiling) – 2015-11-26 13:31:56

回答

0

xdebug輸出的圖形工具是KCacheGrind

+2

我知道KCacheGrind和WinCacheGrind。據我所知,這兩種工具都不允許分析內存使用情況。 – 2008-11-01 19:12:32

0

嘗試webgrind。它以簡單易讀的基於瀏覽器的格式爲您提供CacheGrinder的分析。我在Mac上,它已經使分析變得輕而易舉。

+4

不幸的是,webgrind不報告內存使用情況 - 只是執行速度。 – 2008-11-02 00:13:59

0

phpDesigner 2008可以使用xdebug和KCacheGrind對網站進行調試和基準測試。它也有一個內置的顯示器。

+0

它處理內存使用情況分析或只是性能分析?從他們的網站我只看到性能分析。 – 2008-11-02 18:37:58

+0

不能告訴你。這個程序的程序員是一個非常好的人。不會傷害他射擊他的電子郵件,問問自己! – user29772 2008-11-09 21:47:10

8

最近我遇到了同樣的問題,不幸的是找不到任何特定的工具。

但是有幫助的是在啓用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 
6

http://www.xdebug.org/updates.php爲Xdebug的2.0.4他們寫節「已刪除的函數」:「...因爲無法正常工作,刪除了對內存分析的支持......」。因此xdebug不會成爲一個選項

10

正如你可能知道的那樣,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

使用Google gperf (!推薦)工具

首先,安裝谷歌點擊這裏下載最新的軟件包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和內存)

With Xhprof and xhgui你可以分析CPU使用情況,或者只是內存使用情況,如果這是你的問題在t他一刻。 這是一個非常完整的解決方案,它可以讓你完全控制,日誌可以寫在mongo或文件系統中。

欲瞭解更多詳情see my answer here

Blackfire

Blackfire是SensioLabs一個PHP探查時,Symfony2的傢伙https://blackfire.io/

如果使用puphpet設置你的虛擬機,你會很高興地知道它的支持;-)

相關問題