오프라인으로 진행중인 SO Documentation 베타에서 내 참조를 교차 게시합니다.
XDebug로 프로파일 링
Xdebug라는 PHP 확장을 사용하여 PHP 디버깅 및 런타임 디버깅 을 지원할 수 있습니다 . 프로파일 러를 실행할 때 출력은 "cachegrind"라는 이진 형식으로 파일에 기록됩니다. 이러한 파일을 분석하기 위해 각 플랫폼에서 응용 프로그램을 사용할 수 있습니다. 이 프로파일 링을 수행하기 위해 애플리케이션 코드를 변경할 필요가 없습니다.
프로파일 링을 활성화하려면 확장 기능을 설치하고 php.ini 설정을 조정하십시오. 일부 Linux 배포판에는 표준 패키지 (예 : Ubuntu php-xdebug
패키지)가 제공됩니다. 이 예에서는 요청 매개 변수를 기반으로 선택적으로 프로파일을 실행합니다. 이를 통해 설정을 정적으로 유지하고 필요한 경우에만 프로파일 러를 켤 수 있습니다.
# php.ini settings
# Set to 1 to turn it on for every request
xdebug.profiler_enable = 0
# Let's use a GET/POST parameter to turn on the profiler
xdebug.profiler_enable_trigger = 1
# The GET/POST value we will pass; empty for any value
xdebug.profiler_enable_trigger_value = ""
# Output cachegrind files to /tmp so our system cleans them up later
xdebug.profiler_output_dir = "/tmp"
xdebug.profiler_output_name = "cachegrind.out.%p"
다음으로 웹 클라이언트를 사용하여 프로파일 링하려는 애플리케이션의 URL을 요청하십시오. 예 :
http://example.com/article/1?XDEBUG_PROFILE=1
페이지가 처리됨에 따라 비슷한 이름의 파일에 기록됩니다
/tmp/cachegrind.out.12345
기본적으로 파일 이름의 숫자는 파일 이름을 쓴 프로세스 ID입니다. 이것은 xdebug.profiler_output_name
설정 으로 구성 할 수 있습니다.
실행되는 PHP 요청 / 프로세스마다 하나의 파일을 작성합니다. 예를 들어, 양식 게시물을 분석하려는 경우 HTML 양식을 표시하기 위해 GET 요청에 대해 하나의 프로파일이 작성됩니다. XDEBUG_PROFILE 매개 변수는 양식을 처리하는 두 번째 요청을 분석하기 위해 후속 POST 요청으로 전달되어야합니다. 따라서 프로파일 링 할 때 curl을 실행하여 양식을 직접 POST하는 것이 더 쉬운 경우가 있습니다.
출력 분석
작성된 후 KCachegrind 또는 Webgrind 와 같은 응용 프로그램에서 프로파일 캐시를 읽을 수 있습니다 . 널리 사용되는 PHP IDE 인 PHPStorm 도이 프로파일 링 데이터를 표시 할 수 있습니다 .
예를 들어 KCachegrind는 다음과 같은 정보를 표시합니다.
- 실행 된 기능
- 자체 및 후속 함수 호출을 포함한 호출 시간
- 각 함수가 호출 된 횟수
- 통화 그래프
- 소스 코드에 대한 링크
찾아야 할 것
분명히 성능 조정은 각 응용 프로그램의 사용 사례에 따라 매우 다릅니다. 일반적으로 다음을 찾는 것이 좋습니다.
- 예상치 못한 동일한 함수를 반복해서 호출합니다. 데이터를 처리하고 쿼리하는 함수의 경우 응용 프로그램이 캐시 할 수있는 주요 기회가 될 수 있습니다.
- 느리게 실행되는 기능. 응용 프로그램은 대부분의 시간을 어디에 소비합니까? 성능 조정에서 가장 좋은 결과는 가장 많은 시간을 소비하는 애플리케이션 부분에 초점을 맞추는 것입니다.
참고 : Xdebug, 특히 프로파일 링 기능은 리소스를 많이 사용하며 PHP 실행 속도를 늦 춥니 다. 프로덕션 서버 환경에서는이를 실행하지 않는 것이 좋습니다.