Apache 的连接数为 2700,CPU 占用率为 100%?

Apache 的连接数为 2700,CPU 占用率为 100%?

我们只是将我们的网站配置到运行 Windows Server 2008 的新服务器上。

我们的服务器非常强大,Xeon 四核 3.0 和 25GB 内存。运行 Mysql 和 Apache

问题是我们的 CPU 占用率过高。任务管理器通常显示所有核心的 CPU 占用率最高为 90% 到 100%。这些 CPU 全部用于 Apache 的 httd 进程。

跑步

netstat -ano | find /c "80"

我们发现服务器 80 端口上总是有大约 2200 -> 2700 个连接处于繁忙状态。这可能是 DDoS 攻击吗?我们如何重新配置​​以优化我们的服务器并阻止不必要的请求?

答案1

为什么不启用扩展服务器状态(限制在您的 IP 范围内)来查看正在连接的内容以及连接到哪里。

http://httpd.apache.org/docs/2.0/mod/mod_status.html

并查看您的日志。

答案2

这是否不好实际上取决于您的应用程序和具体情况。通常,当您使用 netstat 来计算连接数时,您会这样做:

netstat -ano | grep ESTABLISHED | find /c "80" | wc -l

否则,您将会统计大量处于 TIME_WAIT 状态的连接,这通常是正常的。您还可以统计 SYN 连接,以检查是否存在 SYN 洪水攻击。

您可能会发现,仅通过计算 ESTABLISHED 连接数,连接数就会大幅下降。例如,在我的其中一台服务器上,当前请求数为 6 次/秒,总共有 1000 个连接,但目前只有 5 个处于 ESTABLISHED 状态(大多数处于 TIME_WAIT 状态)。然而,在另一台服务器上,有 1000 个连接,但有 500 个处于 ESTABLISHED 状态(请求数为 20 次/秒,我怀疑这里有某种 KeepAlive 设置)。从这些值来看,您的数字并不一定太糟糕。

您还可以使用扩展的 netstat 命令来计算每个 IP 地址与您的服务器的连接数:

netstat -an | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

“正常”连接数/IP 再次取决于您的应用程序。就我而言,平均值为 5-10,因此如果我发现明显多于此,我会更详细地研究它。

相关内容