현재 위치: > 최신 기사 목록> PHP 스크립트의 성능을 측정하기 위해 Microtime ()과 함께 getUsage ()를 사용하는 것이 정말로 신뢰할 수 있습니까?

PHP 스크립트의 성능을 측정하기 위해 Microtime ()과 함께 getUsage ()를 사용하는 것이 정말로 신뢰할 수 있습니까?

M66 2025-06-15

PHP 성능 튜닝 과정에서 스크립트의 실행 시간과 리소스 소비를 정확하게 측정하는 것이 매우 중요합니다. 일반적인 관행은 스크립트 런타임 및 시스템 리소스 사용량을 모니터링하기 위해 Microtime ()GetUsage () 의 두 기능을 결합하는 것입니다. 그러나이 방법은 정말로 신뢰할 수 있습니까? 이 기사는이 두 가지 사용 방법과 정확성에 대해 자세히 설명합니다.

1. 소액 소개 ()

마이크로 타임 ()은 현재 유닉스 타임 스탬프의 마이크로 초 부분을 반환하며, 이는 종종 고정밀 타이밍에 사용됩니다. 일반적인 사용법은 스크립트의 시작 부분에서 한 번 호출 한 다음 끝에서 한 번 호출하는 것입니다. 두 가지를 빼면 스크립트의 실행 시간이 발생합니다.

 <?php
$start = microtime(true);

// 시뮬레이션 시간 소모 작업
usleep(500000); // 500밀리 초

$end = microtime(true);
$elapsed = $end - $start;
echo "스크립트 실행 시간: {$elapsed} 두번째\n";
?>

이 접근법의 장점은 간단하고 간단하며 대부분의 PHP 스크립트의 성능을 측정하기에 충분한 정밀도가 있다는 것입니다.

2. getUsage 소개 ()

GetUsage ()는 사용자 CPU 시간, 시스템 CPU 시간, 메모리 사용량 등을 포함하여 현재 프로세스 리소스 사용 배열을 반환합니다. 일반적으로 세분화 된 성능 분석에 일반적으로 사용됩니다.

 <?php
$usage_start = getrusage();

// 시뮬레이션 시간 소모 작업
usleep(500000);

$usage_end = getrusage();

$user_cpu_start = $usage_start["ru_utime.tv_sec"] + $usage_start["ru_utime.tv_usec"] / 1e6;
$user_cpu_end = $usage_end["ru_utime.tv_sec"] + $usage_end["ru_utime.tv_usec"] / 1e6;

$user_cpu_time = $user_cpu_end - $user_cpu_start;
echo "사용자 상태CPU시간: {$user_cpu_time} 두번째\n";
?>

사용자 상태 CPU 시차를 계산하면 대기 시간이 포함 된 전체 실행 시간이 아닌 CPU가 실제로 스크립트를 처리하는 데 걸리는 시간을 알 수 있습니다.

3. getUsage ()Microtime ()을 조합하여 사용하십시오

누군가는 스크립트 성능을 판단하기 위해 둘 다 사용합니다.

  • Microtime ()을 사용하여 총 시간을 계산하십시오 (벽 클록 시간)

  • getUsage ()를 사용하여 CPU 시간을 계산하십시오 (사용자 상태 + 시스템 상태)

샘플 코드 :

 <?php
$start_time = microtime(true);
$start_usage = getrusage();

// 시뮬레이션 시간 소모 작업
usleep(500000);

$end_time = microtime(true);
$end_usage = getrusage();

$elapsed_time = $end_time - $start_time;

$user_cpu_start = $start_usage["ru_utime.tv_sec"] + $start_usage["ru_utime.tv_usec"] / 1e6;
$user_cpu_end = $end_usage["ru_utime.tv_sec"] + $end_usage["ru_utime.tv_usec"] / 1e6;
$user_cpu_time = $user_cpu_end - $user_cpu_start;

$system_cpu_start = $start_usage["ru_stime.tv_sec"] + $start_usage["ru_stime.tv_usec"] / 1e6;
$system_cpu_end = $end_usage["ru_stime.tv_sec"] + $end_usage["ru_stime.tv_usec"] / 1e6;
$system_cpu_time = $system_cpu_end - $system_cpu_start;

echo "총 시간 소비: {$elapsed_time} 두번째\n";
echo "사용자CPU시간: {$user_cpu_time} 두번째\n";
echo "체계CPU시간: {$system_cpu_time} 두번째\n";
?>

4.이 측정은 신뢰할 수 있습니까?

이점

  • 마이크로 타임 ()은 모든 대기 및 차단 시간을 포함하여 실시간 스팬을 측정합니다.

  • getUsage ()는 CPU의 실제 처리 시간을 반영하고 I/O와 같은 대기 시간을 제거 할 수 있으며 스크립트의 CPU 리소스 점령을보다 현실적으로 반영 할 수 있습니다.

  • 이 둘을 결합하면 스크립트 실행 효율성 및 시스템로드에 대한보다 포괄적 인 이해가 제공 될 수 있습니다.

한정

  • GetUsage ()는 모든 운영 체제에서 지원되지 않으며 Windows Systems의 PHP 가이 기능을 완전히 지원하지는 않습니다.

  • getUsage ()는 현재 프로세스 리소스 만 측정하며 외부 통화 또는 아동 프로세스의 리소스 소비를 다룰 수 없습니다.

  • 스크립트에 많은 양의 I/O 대기 또는 네트워크 요청이 포함 된 경우 CPU 시간은 실시간과 거리가 멀고 GetUsage ()는 I/O 병목 현상을 반영 할 수 없습니다.

  • 마이크로 타임 () 은 시스템 클록 정확도의 영향을 받고 매우 짧은 시간 내에 측정이 부정확 할 수 있습니다.

실용적인 조언

  • CPU 집약적 인 PHP 스크립트의 경우 두 측정을 결합하면보다 정확한 성능 정보를 제공 할 수 있습니다.

  • I/O 집약적 인 스크립트의 경우 getTrusage () 만 사용하는 것만으로는 전반적인 성능을 반영하기에 충분하지 않으며 마이크로 타임 () 이 더 중요합니다.

  • 포괄적 인 분석을 위해 다른 성능 도구 (예 : Xdebug, Blackfire 등)를 결합하는 것이 좋습니다.

  • GetTrusage ()를 사용할 때, 특히 크로스 플랫폼 환경에서 호환성 문제에주의하십시오.

5. 요약

getUsage ()마이크로 타임 ()은 고유 한 장점이 있으며, 사용의 조합은 실제로 PHP 스크립트의 성능을보다 신중하게 평가할 수 있습니다. 그러나 신뢰할 수 있는지 여부는 특정 사용 시나리오, 스크립트의 특성 및 테스트 환경에 따라 다릅니다. 전능 한은 총알이 아니라 성능 분석을위한 기본 도구입니다. 비즈니스 특성과 더 많은 성능 지표를 결합함으로써 만 성능을 과학적으로 판단하고 최적화 할 수 있습니다.