由于httpd-apache的高使用(攻击或错误),服务器在几分钟内失败

在上周突然我得到我的服务器错误。 我尝试访问我的网站,我得到了503错误。

当我检查top和其他东西,我看到这些:

  • 60-65 httpd(apache)进程。 (通常我有30-35个httpd进程)
    你可以在这里看到图: httpd进程
  • MySQL使〜350 MB交换。 (通常它会交换40到50 MB)
    调优底稿说:
    • 当前的max_connections = 250
    • 当前threads_connected = 96
    • 历史loggingmax_used_connections = 97
  • 服务器所有图表: 一般数据
  • httpd.conf
    • ServerLimit 60
    • MaxClients 60
  • var\www\vhosts\example.com\logs\access_log ,没有任何东西看起来像(D)DOS攻击。 我看到正常的服务器请求。
  • var\log\httpd\access_log没有可疑的东西
  • 在我的var\www\vhosts\example.com\logs\error_log我看到了太多这样的错误:
    • [Fri Jan 17 10:56:26 2014] [warn] [client 78.180.71.157] mod_fcgid: can't apply process slot for /var/www/cgi-bin/cgi_wrapper/cgi_wrapper
  • \var\log\mysqld_log没有错误
  • \var\log\error_log没有错误
  • \var\log\suexec_log没有错误

如何诊断是什么导致我的网站使磁盘IO 100%,平均负载10,非常高的交换,并且服务器不响应请求。 我怎样才能阻止这种情况发生?

当我重新启动mysql和httpd问题解决。 但是,我怎样才能诊断原因

警告mod_fcgid: can't apply process slot for /var/www/cgi-bin/cgi_wrapper/cgi_wrapper意味着Apache耗尽了所有可用资源,无法为客户端提供服务。 客户端将得到一个503错误。

从图表来看,这可能是一个stream量高峰或者一个软件configuration错误导致你的问题。 当内存需求高峰时,服务器内存耗尽,因此它会将I / O高峰交换到磁盘(因此100%I / O),从而导致您的iowait也增加。 一旦所有的资源耗尽或者你的服务器迟缓到Apache的时候,它就会发出这个警告。

重新启动可能只是释放这个内存。 你的回答将是两件事情之一:1)通过实际增加或者通过卸载MySQL(这是一个内存pipe理器)到另一个服务器来增加服务器可用的RAM,或者2)检查你的代码,看看是否有泄漏。