Apache 因超载而崩溃

Apache 因超载而崩溃

我有一个 apache http 服务器。最近,我的服务器超载了,导致服务不再响应任何 http 请求(最后一个响应是 503)。即使服务器不再超载,服务也没有恢复。大约 50 分钟后重新启动服务,服务才恢复(从那时起一切都很好)。我的网站由 php 脚本运行。这可能是因为一个非常长的循环已经使服务器的资源超载。我的问题是,我如何让 apache 能够容忍这种超载,而不是完全崩溃。谢谢。

答案1

你的问题太宽泛了。你需要改进你的 PHP 脚本,让它具有可扩展性……而这一切都取决于它正在做什么。

除此之外,如果您以预分叉方式使用 Apache,您可以限制同时操作的数量,例如使用设置MaxClients

答案2

您最好优化 PHP 的内存使用情况,并确保 Apache 不会“崩溃”。

确保您的 PHP memory_limit 合理,即尝试将其设置为 64MB 或 96MB。在所有代码中搜索 ini_set('memory_limit')

接下来确保 Apache 接受的请求不超过您的服务器内存可以处理的数量,例如 2048MB 服务器内存、96MB PHP:

例如 2048MB 服务器内存、96MB PHP:为可能正在运行的 MySQL 和其他程序保留合理数量的内存,例如 512MB。这样您就有 1500MB/96MB -> 15 个并行请求。

Apache 的限制设置不同,这取决于您运行 Apache mpm worker 还是 prefork,或者您是否运行 PHP-FPM。

由于这些更改,您的网站在超载时仍然会很慢,并且人们会遇到错误。但是,在激增平息后,Apache 将立即能够再次提供页面。

您的示例中可能发生的情况是,您已打开交换空间,因此 Apache 将开始使用磁盘作为内存,并主要忙于将内存交换到磁盘并交换回来

答案3

调整 Apache 很复杂,但是这应该能给你一些建议

最重要的是开始测量一些东西 - 内存使用情况、CPU、负载、并发连接数 - 这样你就知道哪个资源即将耗尽。

(恕我直言,jdog 对 php 内存使用设置任意限制的建议是没有建设性的)。

可能是因为一个很长的循环已经使服务器的资源超载

不要猜测,要测量。

单独进行大量迭代的循环不太可能导致服务器崩溃。另一方面,如果此脚本运行缓慢、占用大量内存且被频繁访问,则它可能是导致问题的主要原因,但从您提供的信息来看,无法判断

相关内容