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

StackOverflow https://stackoverflow.com/questions/632245

  •  08-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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.');
    }
}

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top