Мониторинг загрузки apache с помощью php
ОБНОВЛЕНИЕ: спасибо всем ответам, но они все о загрузке системы, а не apache.
Моя цель состоит в том, чтобы понять, в моих php-скриптах (шаблонных), когда у apache высокая нагрузка и он невыгоден, чтобы разветвлять некоторый трафик на lighttpd, то есть только для длинного опроса и для облегчения загрузки apache.
Привет, ребята, после этого вопроса я начал использовать lighttpd для службы длинных опросов на моем сервере, чтобы не обнулять apache и базу данных для таких запросов.
Затем я начал использовать lighttpd также для статического контента (изображения, CSS, JS и т. Д.).
Итак, на самом деле, у меня example.com обслуживается apache, а polling.example.com обслуживается lighttpd, оба используют memcache для уменьшения попаданий в базу данных.
В Apache я установил прокси-модуль для отправки всех запросов на example.com/polling/* на polling.example.com/*
Теперь мне интересно, есть ли способ получить нагрузку на сервер apache в php, чтобы перенаправить даже другие запросы ajax на lighttpd, если у apache высокая нагрузка.
Я имею в виду, что-то вроде:
<?php
$apache_server_load = /*hot to retrieve this value?*/;
if($apache_server_load >= $my_defined_max_load){
$ajax_domain = '/polling';
}else{
$ajax_domain = '';
}
?>
<script>
[...]
$.ajax({
url: '<?php echo $ajax_domain; ?>/mypage.php',
[...]
});
[...]
</script>
редактировать я работаю на Debian
PS: я также хотел бы услышать, может ли это решение быть хорошим подходом, но был бы другой вопрос.. не стесняйтесь комментировать, если хотите.
3 ответа
Посмотрите на mod_status. Как только вы его настроите, вы захотите запросить и разобрать
http://example.com/server-status?auto
Вы, вероятно, захотите кешировать результат как минимум на несколько секунд, а не повторять один и тот же запрос для каждого входящего запроса.
Вы можете узнать общую загрузку системы, используя функцию php sys_getloadavg (). Это не дает никакой информации о apache или сервере lighttpd, но вы можете получить представление о том, какова нагрузка на весь ваш сервер.
Вы ничего не рассказали о своей системе. Я предполагаю, что вы используете Linux или Unix. Лучший способ получить текущую нагрузку - выполнить uptime
системная команда, которая даст строку с некоторым статусом и средними значениями нагрузки.
Точный расчет зависит от системы, и "высокая нагрузка" также зависит от вашей системы (сколько ядер зависит от ввода-вывода вашего приложения или от процессора...). Таким образом, получить нагрузку можно примерно так:
preg_match("#load average: ([0-9\.]+), ([0-9\.]+), ([0-9\.]+)#", `uptime`, $matches);
print_r($matches);
может сделать трюк.