3

これを読みましたが、私の解決策には合いません。私の CakePHP 2 アプリケーションでメモリと CPU 時間のボトルネックを見つける必要があります。コントローラーのアクションを使用microtimememory_get_usageて、いくつかの手がかりを見つけました。これで一部を修正しました。しかし、すべてのコントローラー アクションを 1 つずつ診断するのは非常に困難です。

アクションごとに 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 は、" Webgrind " (または CallGrind など) などのツールで分析できるプロファイリング出力ファイルを提供するために有効にできる PHP 拡張機能です。

Webgrind は xdebug トレース ファイルを取得し、費やされた時間とリソース割り当てのビジュアル ツリーを提供します。これにより、システムの実行中に行われたメソッドと関数の呼び出しを選択的にドリルダウンし、時間が失われている場所やリソースが割り当てられている場所を見つけることができます。

さらに、Xdebug を使用すると、アプリケーションのデバッグを開始できます。ブレークポイントを割り当て、実行を一時停止し、値を変更し、コードをステップ実行して、開発に対するより柔軟なデバッグ アプローチを提供できます。

これは、CakePHP で何かを構築している間、また CakePHP 自体のコア上に構築している間、貴重なツールでした。

于 2012-08-06T00:58:29.003 に答える