【问题标题】:Monitoring apache's load with php用 php 监控 apache 的负载
【发布时间】:2010-12-21 17:12:29
【问题描述】:

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

我的目标是了解,在我的 php 脚本(模板脚本)中,当 apache 具有高负载并且可能会在 lighttpd 上分叉一些流量时,这只是为了进行长轮询并减轻 apache 的负载.

大家好,在this question 之后,我开始在我的服务器上使用 lighttpd 进行长轮询服务,以免因此类请求而破坏 apache 和数据库。

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

所以,实际上,我有由 apache 提供的 example.com 和由 lighttpd 提供的 polling.example.com,两者都使用 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:我也想听听这个解决方案是否是一个不错的方法,但这是另一个问题.. 如果您愿意,请随时发表评论。

【问题讨论】:

    标签: php apache apache2


    【解决方案1】:

    看看mod_status。一旦你设置好了,你会想要请求和解析

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

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

    【讨论】:

    • 这就是我要找的!
    【解决方案2】:

    您可以使用 php 函数sys_getloadavg() 找出一般系统负载。这并没有提供有关 apache 或 lighttpd 服务器的任何信息,但您可以大致了解整个服务器的负载情况。

    【讨论】:

    • 我更喜欢这种方式,与正常运行时间相同,但受php限制
    【解决方案3】:

    你没有告诉任何关于你的系统的事情。我假设您使用的是 Linux 或 Unix。获取当前负载的最佳方法是执行uptime 系统命令,该命令将给出带有某些状态和负载平均值的行。

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

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

    可能会成功。

    【讨论】:

    • 这可行,现在我需要检查负载何时高。谢谢!
    猜你喜欢
    • 2014-05-03
    • 1970-01-01
    • 2015-10-22
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    相关资源
    最近更新 更多