VM相对较低,但是当没有出现这种症状时,它可以正常处理我的网络流量负载.
我的Web服务器将无响应,登录后将有数百个HTTPD进程.我的所有虚拟主机都是chroot并使用SUexec,但所有生成的进程都以“apache”用户身份运行.
我的盒子上没有运行恶意网站,服务器也没有显示被盗的证据.
当问题发生时我的平均负载超过250,我需要做的就是强行重启httpd,一切都可以在24-72小时之间完成.
我查看了所有可以查看的日志文件,我找不到任何DDoS的证据,任何类型的“挖掘效果”类型的流量,没有.一旦我重新启动HTTPD,无论是什么导致它产生如此多的进程,停止.如果它是由于高流量网站,大型网站上的首页链接或DDoS,我会想象请求永远不会停止,只是在重新启动httpd后立即重新启动我的服务器.
我还使用了各种工具,例如apachetop和其他实时监控工具,但我通常无法预测何时会发生这种情况,并且当它发生时,服务器太过负载甚至除了杀死HTTPD之外的任何东西.
我不知道如何防止这种情况发生,我不知道在哪里可以看到原因 – 任何想法都将不胜感激!
附加信息:
自从我构建服务器以来已经有两年了,我根据我阅读的一些内容配置了这些参数,并且从未出现过问题,但我不确定这些设置是否可能是一个贡献者:
# prefork MPM # StartServers: number of server processes to start # MinSpareServers: minimum number of server processes which are kept spare # MaxSpareServers: maximum number of server processes which are kept spare # ServerLimit: maximum value for MaxClients for the lifetime of the server # MaxClients: maximum number of server processes allowed to start # MaxRequestsPerChild: maximum number of requests a server process serves <IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 </IfModule> # worker MPM # StartServers: initial number of server processes to start # MaxClients: maximum number of simultaneous client connections # MinSpareThreads: minimum number of worker threads which are kept spare # MaxSpareThreads: maximum number of worker threads which are kept spare # ThreadsPerChild: constant number of worker threads in each server process # MaxRequestsPerChild: maximum number of requests a server process serves <IfModule worker.c> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
解决方法
您可以配置Apache的MPM工作程序来限制它启动/管理的进程数.
还有一个鲜为人知的DDoS攻击可以保持连接的存在(HTTP的Keep-Alive机制),而不是在它完成时关闭它们,这可能会导致数百个额外的进程启动,因为Apache认为它正在处理来自这些DDoS进程的请求并生成新流程的新功能.
当您重新启动Apache时,它会终止这些恶意进程并因此终止连接,因此它取决于攻击者需要多长时间才能意识到它已断开连接并再次尝试.
您还可以启用服务器状态和服务器信息处理程序,并在它开始忙碌时查看它们以确定服务器正在执行的操作.