2009-03-10 5 views
8

많은 CPU 및 Mysql 리소스를 사용하는 정리 작업을 수행하는 cron 작업을 실행하고 싶습니다. 서버가 비교적 사용량이 많지 않은 경우에만 실행하고 싶습니다.PHP 스크립트가 서버가 사용 중인지 어떻게 알 수 있습니까?

PHP에서 확인하는 가장 간단한 방법은 무엇입니까? (예를 들어, 몇 분의 쿼리가 마지막 순간에 완료되었는지를 반환하는 쿼리가 있습니까?)

답변

12
if (function_exists('sys_getloadavg')) { 
    $load = sys_getloadavg(); 
    if ($load[0] > 80) { 
     header('HTTP/1.1 503 Too busy, try again later'); 
     die('Server too busy. Please try again later.'); 
    } 
} 

봅니다 당신은 아마, 자고 대 DB의 부하에 대한 괜찮은 지표 활성 얼마나 많은 볼 수 Mysql List Processes 함수에서 정보를 사용할 수 있습니다 귀하의 요구에

+0

참고 : PHP 5.1.3 이상에서만 작동하며 Windows에서는 작동하지 않습니다. –

+1

Thx, Birch. 단순히 이것에 대해 잊어 버렸습니다 :) "heavy load"로 승리 한 제작 서버는 결코 보지 못했습니다 :) – SMka

+0

@Chad PHP <5.1.3으로 내 대답에서 sys_getloadavg()를 대체 할 수 있습니다 : split ('', file_get_contents ('/ proc/loadavg ')) – vartec

3

이것은 유닉스 시스템 인 경우 uptime의 출력을 구문 분석합니다. 이것은 일반적으로 "사용 중"의 좋은 척도로 간주되는 CPU 부하를 보여줍니다. 1.0 근처 또는 이상은 "완전히 바쁜"을 의미합니다.

출력에 1, 5, 15 분에 걸쳐로드 평균을주는 CPU "로드"시간이 세 개 있습니다. 귀하의 스크립트에 맞는 것을 선택하십시오. "load"의 정의 is here.

2

이 기능을 업데이트합니다.

Linux를 사용하는 경우 Sys GetLoadAvg 기능을 사용하여 전체 시스템 부하를 확인할 수 있습니다.

4

Linux의 경우 /proc/loadavg 파일에서로드 할 수 있습니다.

$load = split(' ',file_get_contents('/proc/loadavg')) 
$loadAvg = $load[0] 
관련 문제