2009-03-10 3 views
8

Я хочу запустить задание cron, которое выполняет очистку, которая требует много ресурсов процессора и Mysql. Я хочу, чтобы он запускался только в том случае, если сервер не занят.Как мой 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.'); 
    } 
} 

Попробуйте обновить эту функцию для ваших нужд

+0

Примечание: будет работать только в PHP 5.1.3 или новее, а не в Windows. –

+1

Thx, Chad Birch. Просто забыл об этом :) Никогда не видел сервер с «тяжелой нагрузкой» на выигрыше :) – SMka

+0

@ С PHP <5.1.3 вы можете заменить sys_getloadavg() версией из моего ответа: split ('', file_get_contents ('/ proc/loadavg ')) – vartec

3

Если это система Unix, проанализируйте вывод uptime. Это показывает загрузку процессора, которая обычно считается хорошей мерой «занят». Все, что находится рядом или выше 1.0, означает «полностью занят».

В этом выводе имеется три «нагрузки нагрузки» процессора, которые дают нагрузку в среднем более 1, 5 и 15 минут. Выберите, что имеет смысл для вашего скрипта. Определение «нагрузка» is here.

2

Вы, вероятно, можете использовать информацию в функции Mysql List Processes, чтобы увидеть, сколько активны против сна, приличный показатель о нагрузке на БД.

Если вы используете Linux, вы можете использовать функцию Sys GetLoadAvg, чтобы увидеть общую загрузку системы.

4

В Linux вы можете получить нагрузку от /proc/loadavg.

$load = split(' ',file_get_contents('/proc/loadavg')) 
$loadAvg = $load[0] 
Смежные вопросы