Apache重载后崩溃

我有一个Apache的HTTP服务器。 最近,我的服务器变得超载,导致服务不再回答任何http请求(最后一个答案是503)。 即使服务器不再过载,服务也没有回来。 只有在50分钟后重新启动服务,复活服务(从此一切正常)。 我的网站是由一个PHP脚本运行。 这可能是因为一个很长的循环已经超载了服务器的资源。 我的问题是,我如何使Apache,容忍这种重载,而不是完全崩溃。 谢谢。

你的问题太广泛了。 您将需要处理您的PHP脚本,以使其扩展…这一切取决于它在做什么。

除此之外,如果以prefork方式使用Apache,则可以限制同时操作的数量,例如MaxClients设置。

您可能最好优化PHP的内存使用情况,并确保Apache不“抖动”。

确保你的PHP memory_limit是合理的,即。 尝试将其设置为64MB或96MB。 searchini_set('memory_limit')的所有代码

接下来确保Apache不接受比你能处理的服务器内存更多的请求,例如2048MB服务器内存,96MB PHP:

例如2048MB服务器内存,96MB PHP:为您可能运行的MySQL保留一个合理的金额,以及其他的东西,比如512MB。 留下1500MB / 96MB – > 15个并行请求。

Apache的限制设置有所不同,具体取决于运行Apache mpm worker或prefork,或者您正在运行PHP-FPM。

由于这些变化,一旦超载,您的网站仍然会变得缓慢,并且人们会得到错误。 但是,在浪潮平息之后,Apache将立即能够再次提供页面。

在你的例子中可能发生的事情是,你已经打开了交换空间,所以Apache将开始使用磁盘作为内存,并且很大程度上忙于将内存交换到磁盘并返回

调整Apache是​​复杂的,但这应该给你几个指针

最重要的是开始测量东西 – 内存使用情况,CPU,负载,并发连接 – 所以你知道哪些资源用完。

(恕我直言,对php的内存使用设置一个任意限制的build议是不build设性的)。

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

不要猜测。 测量。

一个有很多迭代的循环是不太可能会杀死你的服务器的。 OTOH如果这个脚本很慢并且使用大量内存并且经常被访问,那么这个脚本可能是造成这个问题的一个主要原因,但是根据你提供的信息是不可能的