3

我读了这个,但它不适合我的解决方案。我需要找出我的 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);
}

}
4

1 回答 1

4

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

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

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

在使用 CakePHP 构建东西时,以及在 CakePHP 本身的核心上构建时,这一直是一个有价值的工具。

于 2012-08-06T00:58:29.003 回答