由于 httpd-apache 使用率过高(攻击或漏洞)导致服务器在几分钟内发生故障

由于 httpd-apache 使用率过高(攻击或漏洞)导致服务器在几分钟内发生故障

上周我的服务器突然出现错误。我尝试访问我的网站,但出现 503 错误。

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

  • 60-65 个 httpd(apache)进程。(通常我有 30-35 个 httpd 进程)
    您可以在此处查看图表:httpd 进程
  • MySQL 进行 ~350 MB 交换。(通常进行 40-50 MB 交换)
    调优入门指南中提到:
    • 当前 max_connections = 250
    • 当前线程数 = 96
    • 历史 max_used_connections = 97
  • 服务器所有图表:一般数据
  • 里面httpd.conf
    • 服务器限制 60
    • 最大客户数 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时,问题解决了。但我该如何诊断原因

答案1

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

从图表来看,导致问题的原因是流量激增或软件配置错误。当 RAM 请求激增时,您的服务器会耗尽 RAM,因此它会将 I/O 峰值调至磁盘(因此 I/O 为 100%),这会导致您的请求数iowait也增加。一旦所有资源耗尽或您的服务器速度慢到 Apache 超时,它就会发出此警告。

重新启动可能只会释放这些内存。您的答案可能是以下两种情况之一:1) 通过实际增加或将 MySQL(内存占用大户)卸载到另一台服务器来增加服务器可用的 RAM,或者 2) 检查您的代码以查看是否存在泄漏。

相关内容