服务器很慢,但 CPU 和 RAM 充足

服务器很慢,但 CPU 和 RAM 充足

由于出现在许多热门网站上,我的网站访问量从每天 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 的并发连接限制。您可能将此限制设置得太低,应该增加 的值MaxClientsThreadLimit并且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
#

希望这可以帮助

相关内容