如果服务器过度拥挤或忙于使用PHP,重定向用户?

时间:2010-10-27 09:29:31

标签: php .htaccess

当服务器繁忙或过度拥挤或类似的东西时,是否可以使用php将用户重定向到页面i.e. busy.php?谢谢:))

3 个答案:

答案 0 :(得分:4)

我是第二个using a dedicated load balancer,而不是用PHP做这个。但如果出于某种原因这不是一个选项,您可以尝试使用sys_getloadavg

  

分别返回三个样本,分别代表过去1分钟,5分钟和15分钟内的平均系统负载(系统运行队列中的进程数)。

手册中的示例:

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

implementation in php-src使用了getloadavg。因此,返回的值与运行cat /proc/loadavguptime时的值相同。

可以在Linux load averages找到http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages的简单说明:

  

在多处理器系统上,负载与可用处理器核心数相关。单核系统的“100%利用率”标记为1.00,双核为1.00,四核为4.00。

另见https://superuser.com/questions/23498/what-does-load-average-mean-on-unix-linux

答案 1 :(得分:1)

您可以使用PHP内部函数(如memory-get-usage http://php.net/manual/de/function.memory-get-usage.php)或访问Shell脚本,它可以为您提供有关服务器当前负载的某种信息。然后根据该信息设置通过标题重定向。

但是,请记住,如果您的服务器发生故障,很可能不会执行PHP脚本,也不会发生重定向。因此,根据您的基础结构,您可以通过辅助服务器(也许是负载均衡器)处理此问题。

如果您可以缩小最可能导致故障的原因,请尝试在那里获取它,例如,如果您的MySQL连接失败,请将其取出,并将用户定向到您的“忙碌页面”。

答案 2 :(得分:1)

最好的方法是使用负载均衡器,但以防万一您可以使用安装类中的这段代码重定向到忙碌页面(完全不能使用数据库连接):

class [...] {
    [...]
    public function connect(){
        $this->conn = @mysql_connect ([...]) 
            or $this->dbError("Failed MySQL connection");
        [...]
    }

    private function dbError($msg){
        include("busy.php");
        die();
    }
}