Linux Server HTTP进程每天挂起服务器

我从LayeredTech租用一台 Linux VM,它是Xen Hypervisor的客户.操作系统是CentOS 5.3,运行Apache2.几乎每天我的服务器都会以这样的方式表现出来让我相信自己是DDoS,但我找不到任何证据.我正在运行Apache Mod_security,MySQL 5.x,PHP 5.x,在版本方面一切都是最新的.

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时,它会终止这些恶意进程并因此终止连接,因此它取决于攻击者需要多长时间才能意识到它已断开连接并再次尝试.

您还可以启用服务器状态和服务器信息处理程序,并在它开始忙碌时查看它们以确定服务器正在执行的操作.

http://httpd.apache.org/docs/2.2/mod/mod_status.html

http://httpd.apache.org/docs/2.2/mod/mod_info.html

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...