查找CakePHP中的内存和CPU时间瓶颈

时间:2012-08-05 20:13:07

标签: php cakephp memory-leaks cakephp-2.0 cpu-usage

我看过this,但它不符合我的解决方案。 我需要找出CakePHP 2应用程序中的内存和CPU时间瓶颈。 在控制器操作中使用microtimememory_get_usage,我发现了一些线索。我修了一些这个。但是逐个诊断每个控制器动作是如此困难。

我需要为每个操作记录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);
}

}

1 个答案:

答案 0 :(得分:4)

我在使用PHP时发现的最佳工具,包括CakePHP在内的任何PHP框架都是“Xdebug”。 Xdebug是一个PHP扩展,可以启用它来提供可以使用“Webgrind”(或CallGrind等)等工具进行分析的分析输出文件。

Webgrind将获取xdebug跟踪文件,并为您提供可用时间和资源分配的可视化树。这使您能够有选择地深入研究在执行系统期间进行的方法和函数调用,并找出时间丢失的位置以及资源的分配位置。

此外,Xdebug使您可以开始调试您的应用程序。您可以分配断点,暂停执行,修改值并逐步执行代码,为您提供更灵活的开发调试方法。

在使用CakePHP构建内容时,以及构建CakePHP本身的核心时,这是一个很有价值的工具。