使用php监控apache的负载

时间:2009-11-30 16:54:37

标签: php apache apache2

更新:感谢所有给出的答案,但它们都与系统负载有关,而不是apache。

我的目标是在我的php脚本(模板化的脚本)中理解,当apache负载很高并且可以在lighttpd上分配一些流量时,这就是长轮询并点亮apache的负载

大家好,在this question之后我开始在我的服务器上使用lighttpd进行长轮询服务,以免在这种请求中使用apache和数据库。

然后,我开始将lighttpd用于静态内容(图像,css,js等)。

所以,实际上,我的example.com由apache提供服务,polling.example.com由lighttpd服务,两者都使用memcache来减少数据库命中率。

在apache中,我已将代理模块设置为在polling.example.com / *

中代理所有对example.com/polling/*的请求。

现在,我想知道是否有办法在php中检索apache服务器负载,以便在apache负载较高的情况下重定向lighttpd上的其他ajax请求。

我的意思是,像:

<?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上运行

p.s:我也想听听这个解决方案是否是一个不错的方法,但是另一个问题......如果你愿意,可以随意评论。

3 个答案:

答案 0 :(得分:4)

看看mod_status。设置完成后,您需要请求并解析

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

您可能希望将结果缓存至少几秒钟,而不是针对每个请求重新执行相同的请求。

答案 1 :(得分:2)

您可以使用php函数sys_getloadavg()找出常规系统负载。这不提供有关apache或lighttpd服务器的任何信息,但您可以了解整个服务器上的负载是如何的。

答案 2 :(得分:0)

您没有告诉您有关系统的任何信息。我假设你正在使用Linux或Unix。获取当前负载的最佳方法是执行uptime系统命令,该命令将为某条线提供一些状态和负载平均值。

这个的确切计算取决于系统,“高负载”也取决于你的系统(你的应用程序IO或CPU绑定了多少个核心......)所以要获得类似

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

可能会成功。