由于出现在许多热门网站上,我的网站访问量从每天 20,000 次增加到昨天的 182,000 次。
该网站变得有些迟钝。许多请求会导致超时。但是 CPU 和 RAM 仍然充足。CPU 和 RAM 的使用率实际上并没有超过 20%,平均约为 12%。
当尝试使用 WGET 下载主页时,它会在这里停顿:
正在解析 domain.io (domain.io)... 91.121.220.92 连接到 domain.io (domain.io)|91.121.220.92|:80... 失败:连接超时。正在重试。
但如果确实连接上了,它会很快下载页面。此外,我可以通过浏览器通过 IP 连接到 phpMyAdmin,一切正常。
这让我相信 Apache 中存在问题
我的设置:
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 150
MaxRequestsPerChild 0
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 150
MaxRequestsPerChild 0
我不确定我正在使用其中哪一个,现在就检查一下。
有人对这里该做什么有什么建议吗?在 Apache 中还是其他地方。
当我通过 SSH 登录时,它显示:
System load: 2.92
Processes: 289
Users logged in: 0
Memory usage: 9%
Swap usage: 0%
该服务器是 4 核 3.2Ghz,配备 32GB RAM 和 2x2TB,但使用得很少。
答案1
您应该启用mod_status
并查看是否未达到 apache 的并发连接限制。您可能将此限制设置得太低,应该增加 的值MaxClients
,ThreadLimit
并且ThreadPerChild
取决于您使用的 mpm 模块。
答案2
还需要检查一些其他的东西,在 apache 的错误日志中,检查类似这样的条目:
apache server reached MaxClients setting, consider raising the MaxClients setting
这意味着您已达到配置的最大进程/线程数
另一个很好的迹象表明 apache 没有跟上负载,可能是因为最大线程/进程配置如果监听队列溢出,您可以像这样检查它:
netstat -s | grep -i listen
通常情况下你不会得到输出,但如果出现问题,你会得到:
# netstat -s | grep -i listen
26760 times the listen queue of a socket overflowed
26760 SYNs to LISTEN sockets ignored
#
希望这可以帮助