2013-09-26 88 views
1

我见过一些显示消息的网站说他们“超载”。不知道这是否与数据库连接最大化。检查网站是否过载

这是以编程方式完成的吗?或通过服务器设置?

+1

我们应该知道每个站点是如何做到这一点的?也许有一个“areyouoverloaded.com”网站,直到他们停止响应,在这一点上,他们通过美国邮政优先邮件派遣一封信,通知网站管理员,他们应该登录到系统,并将他们的页面改为超载版。或者可能有一些代码监视平均SQL查询持续时间,并在执行时间超过0.5s时自动切换到超载状态 –

+2

对不起,您看到@Marc B的日子不好,并且不知道我正在进入这里的雷区。我只是问一个简单的问题。标签应该提供足够的上下文。如果没有传统的方式,那么就说出来。 –

+1

对于一个拥有你的个人资料的用户来说,这是一个无知的问题你不觉得吗?如果你能提供一个例子,它会有所帮助。 – samayo

回答

4

一般来说,这通常是一个负载平衡器的设置,而不是你直接写入你的应用程序的东西。负载均衡器偶尔会检查您的站点的服务器运行状况,如果检测到它们不可用或具有高延迟等,则会将流量路由到其他服务器/站点。

将它编码到您的应用程序中意味着如果您的服务器负载过重并且应用程序速度变慢,那么检查它是否过载的代码也会变慢。如果这是有道理的。

编辑: 为了扩大这是如何与负载均衡器做了一些,你一般会在你的应用程序页面运行的一些基本检查,并返回一个HTTP 200,如果一切正常,或HTTP 503如果事情不好。然后,负载平衡器会在您的服务器上点击该URL并检查响应代码以查看它是否正常运行(它检查的频率是您可以配置的)。如果它起来,很酷。如果发生故障,它将开始在其他地方发送流量。

由于您控制了检查页面,因此您可以根据需要编写支票。通常你会在那里进行一些快速的健全检查。例如尝试连接到数据库,如果它给你一个“连接太多”的错误,那么返回一个503,负载平衡器会知道你已经超负荷。

如果您只关心数据库情况而不关心服务器负载或延迟等情况,只需在连接到数据库时捕获任何错误,并在发生此情况时将用户重定向到静态页面,即可获得类似的结果。例如,

try 
{ 
    $dbh = new PDO("mysql:host=localhost;dbname=whatever", $user, $pass); 
} 
catch (PDOException $e) 
{ 
    header("Location: /site_overloaded_message.html"); exit(); 
} 
+1

它确实有道理。 –