在我的其中一个主机上,我有时会收到生成 503 响应的错误。
[通知] [客户端 mod_overload: 超载,1 分钟平均负载,当前负载:101,允许最大负载:90
我尝试用谷歌搜索,但是没有找到太多关于这个错误以及 mod_overload 本身的信息。
我的猜测是,如果一次请求的数量超过允许的数量,这个模块就会发送 503 代码。
有人可以确认我是否正确吗?如果不正确,它会做什么?
附言:我已向托管公司发送电子邮件寻求解释,但也希望从独立来源获得答复。
编辑:
Apache 模块检查平均负载,当负载高于定义值时,停止当前请求(也可以停止其他请求)。从 0.2 开始,可以按目录/虚拟主机/位置设置设置。
对我来说,这一段并没有解释这个模块是如何工作的,或者更准确地说,它是如何计算平均负载的。它考虑了哪些变量,是只有 CPU 和内存使用率,还是并行请求的数量?网站代码可能有多大的影响?
我遇到这个问题的网站不是我开发的,但我必须修改它并找到这个错误的根源。它的代码质量很差,每次请求时都会出现大量 PHP 警告,这些警告总是写入日志文件。这可能是负载增加的原因吗?
答案1
听起来您使用的是共享网络托管服务器,它无法处理传入的 http 请求(不仅是针对您的网站,而是针对所有人)。确保不会发生这种情况的一种方法是拥有一定程度的专用资源,并通过使用 VPS 或专用服务器来托管您的网站来控制其分配。否则,您对这类事情无能为力;除了找到不会让服务器超载的网络托管商 - 即使这样,您也容易受到与您共享同一台服务器的网站流量高峰的影响。
如果您不了解服务器上的平均负载代表什么,我建议您进一步了解该服务器正在满足哪些资源以及它如何对您的个人网站性能产生不利影响。Apache 正在丢弃 http 请求,因为 CPU 目前正在忙于做其他事情 - 很可能正在处理其他 http 请求。根据我对http://sourceforge.net/projects/modoverload/这似乎是这个 apache 模块的确切目的,基本上为虚拟主机和站点提供可调元素,以确保它们中的任何一个或一组都不会导致服务器上其他站点缺乏基本资源。