2012-08-05 2 views
3

나는 this을 읽었지만 내 솔루션에 맞지 않습니다. CakePHP 2 애플리케이션에서 메모리와 CPU 시간 병목 현상을 찾아야합니다. microtimememory_get_usage 컨트롤러 동작에서 나는 몇 가지 단서를 발견했습니다. 나는 이것으로 몇 가지를 고쳤다. 그러나 모든 컨트롤러 동작을 하나씩 진단하는 것은 매우 어렵습니다.CakePHP에서 메모리 및 CPU 시간 병목 현상 찾기

각 작업마다 CPU 및 메모리 부하를 기록해야합니다. 내 컨트롤러에 2 개의 전역 변수를 넣을 계획입니다. 그리고 필터를 필터하기 전에 내부에서 계산하고 나중에 점검하기 위해 필터에 기록하십시오. 올바른 방법입니까 아니면 다른 솔루션을 권장 할 수 있습니까?

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를 잊지 마세요. 병목 현상에 대한 중요한 정보를 제공 할 수 있습니다. –

답변

4

PHP로 작업 할 때 내가 찾은 가장 좋은 도구 및 CakePHP를 포함한 모든 PHP 프레임 워크는 "Xdebug"입니다. Xdebug는 "Webgrind"(또는 CallGrind 등)과 같은 도구로 분석 할 수있는 프로파일 링 출력 파일을 제공 할 수있는 PHP 확장입니다.

Webgrind는 xdebug 추적 파일을 사용하고 소요 시간 및 자원 할당에 대한 시각적 트리를 제공합니다. 이를 통해 시스템을 실행하는 동안 수행 된 메소드 및 함수 호출을 선택적으로 드릴 다운하고 시간이 손실되는 위치와 자원이 할당되는 위치를 찾을 수 있습니다.

또한 Xdebug를 사용하면 응용 프로그램 디버깅을 시작할 수 있습니다. 중단 점을 할당하고 실행을 일시 중지하고 값을 수정하고 코드를 단계별로 실행하여 개발에보다 유연한 디버깅 방식을 제공 할 수 있습니다.

이것은 CakePHP를 사용하여 물건을 만드는 동안 그리고 CakePHP 자체의 핵심을 구축하는 동안 유용한 도구였습니다.

+0

답변 해 주셔서 감사합니다. 하지만 그 웹 사이트에서는 공유 호스팅을 사용하고 쉘 액세스 권한이 없습니다. 로컬 복사본에서 성능을 시험해 볼 수는 있지만 가능하면 호스트의 셸에 액세스 할 수 없습니다. – trante

+1

성능 테스트 및 프로파일 링은 로컬에서 수행해야합니다. 프로덕션 환경에서 Xdebug를 사용하면 서버에 추가로드가 발생하므로 절대로 사용하지 마십시오. cake 앱의 코드 프로필에 – Predominant

+0

이 있으면 내 코드는 어디서 볼 수 있습니까? – styks

관련 문제