当服务器繁忙或过度拥挤或类似的东西时,是否可以使用php将用户重定向到页面i.e. busy.php
?谢谢:))
答案 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/loadavg
或uptime
时的值相同。
可以在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();
}
}