上周我的服务器突然出现错误。我尝试访问我的网站,但出现 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) 检查您的代码以查看是否存在泄漏。