未得到充分利用的Apache服务器引发MaxRequestWorkers达成:内存泄露?

在具有1Gb RAM的Ubuntu服务器上,具有默认configuration的Apache 2.4.7服务器开始偶尔停止响应请求。 它用于个人云+其他需求和低stream量的网站。

一个error.log检查揭示了这种模式,每次出现问题时都会反复出现:

[mpm_prefork:error] [pid 31950] AH00161: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting

之后access.log根本不logging任何访问。 一天后:

[mpm_prefork:notice] [pid 31950] AH00171: Graceful restart requested, doing restart

这显然没有任何区别。

我不得不每次手动重新启动服务器。

现在我正在看mpm_prefork.conf ,这是默认的,从我已经能够收集的信息,我不认为我需要改变任何东西。 我已经开始怀疑可能会有一些内存泄漏,并且读取MaxConnectionsPerChild 1000是防止内存泄漏的一种手段,所以我把它设置为1000,并且会看到它的行为。 由于曾经有一段时间的错误,所以很难理解究竟是什么导致了这个问题。

你认为在这种情况下使用MaxConnectionsPerChild是一个很好的策略(希望内存泄漏将在我所托pipe的站点的进一步发布中得到解决),还是这不表示内存泄漏?

注意:平均Apache进程消耗了大约20Mb的内存,我把MaxRequestWorkers从150减less到了30(考虑到服务器上Apache的500Mb可用内存)。 我现在有了:

 <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 30 MaxConnectionsPerChild 1000 </IfModule> 

我不认为记忆达到了顶峰,但是当我的穆宁客户倒下时,我意识到,现在我不能排除它。

从我的文档根目录中删除Owncloud 8.0.0是最终的答案。 之后,Apache就像预期的那样工作了…

理解是什么导致这个问题,以及如何configurationApache,以便它可以处理有问题的PHP应用程序将是很好的。 令人失望的是, MaxConnectionsPerChild在这种情况下无法处理问题,但是我不确定发生了什么事情,尽pipeMaxRequestWorkers错误日志似乎表明线程数量是问题。

也许我的情况是太独特了,我得到了同样的server reached MaxRequestWorkers setting错误,并认为我的也是一个低stream量的网站。 否则,日志是贫瘠的。 我发现一篇文章说我可以将Apache的日志logging级别从“警告”改为“debugging”,所以我改变了希望收集一些有用的东西。 当我重新启动Apache时,我正在拖拽/var/log/apache2/error.log ,输出立即爆炸成无尽的滚动混乱。 我读不懂,因为它是如此之快。 我注意到,每1000行左右都有一条正常的路线,但是其余的路线是相同的 – 全部来源于俄罗斯的知识产权。 我的第一个DOS!

我读过你可以使用iptables中的一行删除特定ip的数据包。 我跑了两行,滚动停止 – 冷。

 iptables -A INPUT -s <ip address here> -j DROP iptables -A INPUT -s <ip address here> -j DROP 

关于如何减轻DOS攻击有很多好的资源,但是对于我来说,我还不知道我是在一个人身上。 之后[mpm_prefork:error]线索是我的大突破。 我相信,不是每一个prefork错误是DOS攻击,但也许这个职位可以帮助别人!

https://linuxaria.com/howto/how-to-verify-ddos-attack-with-netstat-command-on-linux-terminal

https://stackoverflow.com/questions/38357269/mpm-preforkerror-ah00161-server-reached-maxrequestworkers-setting/38362719

iptables规则来对付最常见的DoS攻击?

你可能有一堆进程等待子请求到apache,而这些进程确保apache从来没有一个备用的进程来回答?

任何对同一台服务器上的URL的调用都有一个超时是很重要的。