Как мой PHP-скрипт может определить, занят ли сервер? - PullRequest
8 голосов
/ 10 марта 2009

Я хочу запустить задачу cron, которая выполняет очистку, которая требует много ресурсов процессора и Mysql. Я хочу, чтобы он работал только в том случае, если сервер не слишком занят.

Какой самый простой способ определить это из PHP? (например, есть ли запрос, который возвращает, сколько запросов было сделано за последнюю минуту? ...)

Ответы [ 4 ]

12 голосов
/ 11 марта 2009
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.');
    }
}

Попробуйте обновить эту функцию в соответствии с вашими потребностями

4 голосов
/ 11 марта 2009

В Linux вы можете загрузить файл /proc/loadavg.

$load = split(' ',file_get_contents('/proc/loadavg'))
$loadAvg = $load[0]
3 голосов
/ 11 марта 2009

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

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

2 голосов
/ 11 марта 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...