2012-08-05 39 views
3

我讀this,但它不符合我的解決方案。 我需要找出CakePHP 2應用程序中的內存和CPU時間瓶頸。 在控制器動作中使用microtimememory_get_usage我發現了一些線索。我用這個解決了一些問題。但是,要逐個診斷每個控制器的操作是非常困難的。在CakePHP中查找內存和CPU時間瓶頸

我需要爲每個操作記錄CPU和內存負載。我打算在我的控制器中放置2個全局變量。然後在beforeFilter和afterFilter裏面計算它們並記錄下來以供檢查。 這是正確的方式還是您可以推薦另一種解決方案?

class AppController extends Controller { 

var $requestStartTime = 0; 
var $requestDifTime = 0; 
var $memoryBefore = 0; 
var $memoryAfter = 0; 

function beforeFilter() { 
    $requestStartTime = microtime(true); 
    $memoryBefore =memory_get_usage(true); 
} 

function afterFilter() { 
    $requestDifTime = microtime(true) - $requestStartTime; 
    $memoryAfter = memory_get_usage(true); 

    $myFile = TMP.'logs'.DS.'mylog.txt'; 
    $fh = fopen($myFile, 'a'); 
    $string = "start time:" . $requestStartTime . 
       " dif time: " . $requestDifTime 
       " memory usage: " . $memoryBefore . " and " . $memoryAfter 
       ."\n"; 
    fwrite($fh,$string); 
    fclose($fh); 
} 

} 
+2

不要忘記xdebug。它可以提供有關您的瓶頸的信息。 – 2012-08-05 20:20:06

回答

4

的最佳工具PHP工作時,我發現,和包括CakePHP的任何PHP框架「Xdebug」。 Xdebug是一個PHP擴展,可以啓用提供分析輸出文件,可以使用「Webgrind」(或CallGrind等)工具對其進行分析。

Webgrind將採用xdebug跟蹤文件,併爲您提供花費時間和資源分配的可視化樹。這使您能夠選擇性地深入到系統執行過程中進行的方法和函數調用,並找出時間丟失的地方以及資源分配的位置。

此外,Xdebug使您能夠開始調試您的應用程序。您可以分配斷點,並暫停執行,修改值並逐步執行代碼,爲您提供更靈活的開發調試方法。

這是一個有價值的工具,同時使用CakePHP構建,同時也構建了CakePHP本身的核心。

+0

謝謝你的回答。但對於該網站我使用共享主機,我沒有shell訪問。儘管我可以在本地副本中嘗試性能,但可能無法訪問我的主機的shell。 – trante 2012-08-06 03:56:51

+1

您的性能測試和性能分析應該在本地完成。切勿在生產環境中使用Xdebug,否則會導致服務器上的額外負載。 – Predominant 2012-08-06 04:31:09

+0

在蛋糕應用程序的代碼配置文件中,我可以在哪裏看到我的代碼? – styks 2015-06-09 18:36:33