이 글은 프로덕션 환경에서 PHP 성능 테스트 도구 xhprof를 사용하는 방법에 대한 자세한 분석 및 소개입니다. 필요한 친구는 참고할 수 있습니다.
xhprof는 PHP 성능 테스트 도구입니다. Facebook에서 오픈 소스로 제공되며 프로필 도구라고도 할 수 있습니다. 이 단어를 어떻게 번역하여 그 의미를 표현해야 할지 모르겠습니다. 기존에 사용하던 xdebug와 비교하면 비슷한 점이 많습니다. 예전에는 참고할 수 있는 xdebug의 기록이 몇 개 있었는데, profiler_enable_trigger 파라미터를 켜도 프로덕션 환경에서 사용하면 끔찍하고, 성능에 큰 영향을 미친다는 점이 단점이다. CPU는 즉시 최고 수준에 도달합니다.
xhprof는 매우 가볍고, 프로필 기록 여부를 프로그램으로 제어할 수 있으므로 프로덕션 환경에서 사용이 가능해졌습니다. 문서에서 이러한 사용법을 볼 수 있습니다:
10,000분의 1의 확률로 xhprof를 활성화하고 평소에는 조용히 촬영하지 마십시오.
코드 복사코드는 다음과 같습니다.
if (mt_rand(1, 10000) = = 1) {
코드 복사
if ($xhprof_on) { // 프로파일러 중지 $xhprof_data = xhprof_disable(); // $xhprof_data를 어딘가에 저장합니다(예: 중앙 DB) ...}
register_shutdown_function 메소드를 사용할 수도 있습니다 프로그램 마지막에 xhprof 정보를 저장하도록 지정하려면 끝까지 가서 재작성의 불완전한 예를 판단하고 제시할 필요가 없습니다.
복사 코드
if (mt_rand(1, 10000) == 1) { xhprof_enable(XHPROF_FLAGS_MEMORY); Register_shutdown_function(create_funcion('', "$xhprof_data = xhprof_disable(); save $xhprof_data;"));}로그의 경우 현재 가장 원시적인 파일 형식을 사용하여 저장하고 정기적으로 지우십시오. 그런데 xhprof가 생성한 그래픽 프로필은 어떤 코드가 병목 현상이 되었는지 한 눈에 알 수 있어 정말 멋집니다.
by phpe: 다음은 예시입니다:
xhprof 사용 개선에 대한 아이디어
지난해 프로덕션 환경에서 xhprof를 사용한 이후 프로덕션에서 프로그램 디버깅이 진행되었습니다. 환경, 성능 최적화는 많은 편의성을 제공합니다. 하지만 아직 사용 중 개선해야 할 세부 사항이 있습니다.
이 문제에 관해 몇 가지 작은 아이디어가 있습니다.
로그 저장
중앙 로그 서버를 배포하고 Facebook의 스크라이브를 사용하여 로그를 수집합니다. 프로덕션 환경에서 서버가 생성한 xhprof 로그는 스크라이브 클라이언트에 기록되며, 클라이언트는 이를 자동으로 동기화하여 로컬 저장 공간을 차지하지 않고 중앙 로그 서버에 스크라이브합니다. 코드의 변경 사항도 비교적 작습니다. iXHProfRuns 인터페이스를 기반으로 XhprofRuns 클래스를 구현하고 save_run 메서드의 저장 메서드를 조정하면 됩니다.
직렬화 방법 변경
xhprof는 기본적으로 PHP의 기본 직렬화 방법으로 프로필 정보를 처리한 후 저장하는 것으로 지난 이틀 동안 igbinary vs serialize vs json_encode의 성능과 성능을 비교했습니다. 점유된 바이트 수 측면에서 igbinary는 이 테스트의 모든 측면에서 특정 이점을 가지고 있으며, 특히 점유하는 저장 공간이 크게 줄어들므로 개선을 위해 직렬화 방법을 igbinary_serialize로 변경하기만 하면 됩니다.
목록 표시 최적화
프로필 로그의 큰 그림을 하나씩 보는 것은 시간이 많이 걸리고 노동 집약적이며 대상이 아닙니다. 그래서 지금 하고 있는 작업은 프로필 로그 목록 중 처음 1000개 로그의 전체 실행 시간을 목록에 직접 출력하고, 실행 시간이 너무 긴 로그는 빨간색 굵은 글씨로 표시하는 것입니다. 이렇게 작은 변경을 한 후 작업 상태를 확인하고 싶을 때 로그 목록의 빨간색 링크를 클릭하기만 하면 살펴보므로 시간과 노력이 정말 절약됩니다.
xhprof 로그 파일에서 실행 시간을 얻는 방법은 무엇입니까? 간단한 코드는 다음과 같습니다
코드 복사
코드는 다음과 같습니다
* xhprof 로그에서 실행 시간 가져오기** @param string $log xhprof 로그 파일 경로* @return int 실행 시간*/function getSpentTime($log) { $profile = unserialize(file_get_contents($log));
return $profile['main()']['wt '] / 1000;}
이상에서는 xhprof 및 성능 테스트 도구를 포함하여 프로덕션 환경에서 PHP 성능 테스트 도구 xhprof의 사용을 기반으로 자세한 설명을 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.