Мониторинг загрузки apache с помощью php - PullRequest
2 голосов
/ 30 ноября 2009

ОБНОВЛЕНИЕ: спасибо за все ответы, но все они касаются загрузки системы, а не 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>

edit я работаю в Debian

p.s: я также хотел бы услышать, может ли это решение быть хорошим подходом, но это был бы другой вопрос ... не стесняйтесь комментировать, если хотите.

Ответы [ 3 ]

4 голосов
/ 30 ноября 2009

Взгляните на mod_status . Как только вы его настроите, вы захотите запросить и проанализировать

http://example.com/server-status?auto

Возможно, вы захотите кешировать результат как минимум на несколько секунд, а не повторять один и тот же запрос для каждого входящего запроса.

2 голосов
/ 30 ноября 2009

Вы можете узнать общую загрузку системы, используя функцию php sys_getloadavg () . Это не дает никакой информации о apache или сервере lighttpd, но вы можете получить представление о том, какова нагрузка на весь ваш сервер.

0 голосов
/ 30 ноября 2009

Вы ничего не рассказали о своей системе. Я предполагаю, что вы используете Linux или Unix. Лучший способ получить текущую нагрузку - выполнить системную команду uptime, которая даст строку с некоторым состоянием и средними значениями нагрузки.

Точный расчет этого значения зависит от системы, и «высокая нагрузка» также зависит от вашей системы (сколько ядер зависит от ввода-вывода вашего приложения или от процессора ...). Таким образом, чтобы получить нагрузку, такую ​​как

preg_match("#load average: ([0-9\.]+), ([0-9\.]+), ([0-9\.]+)#", `uptime`, $matches);
print_r($matches);

может добиться цели.

...