为什么 Apache2.2 有时候需要一分钟以上的时间来提供静态页面?

为什么 Apache2.2 有时候需要一分钟以上的时间来提供静态页面?

我们有一台运行 Apache2.2 的 Windows Server 2003 计算机。大多数时候服务器上没有负载,但我们在 3400 台 PC 上有一个通知程序,可以请求播放 64KB .wav 文件的小型网页。当发生事件时,这 3400 台 PC 都会在 3 分钟内请求网页。在几台机器上,我们看到浏览器在页面绘制之前处于“连接”状态一分钟多一点。发生了什么,我们如何加快速度?

答案1

之所以需要那么长时间是因为您正在对可怜的服务器执行拒绝服务攻击。

如果警报是在本地发出的,为什么计算机需要从远程服务器获取音频文件?他们不能使用通知应用程序分发本地副本吗?

答案2

我怀疑你需要调整如下值每个子线程数设置为更大的值以处理该负载。该值控制可同时处理的最大请求数。

答案3

很少有场景能如此明显地展示出好的轻量级 Web 服务器的优势,尤其是单线程 Web 服务器。试试 nginx 或 lighttpd,我相信它们都可以在更小的机器上运行。

答案4

如果您的 ThreadLimit 为 64(ThreadLimit 是全局限制),那么,如果我没记错的话,您一次只能为 64 个客户端提供服务。假设为每个客户端提供服务至少需要 500-1500 毫秒,那么您就遇到了数学问题。

如果您可以在 500 毫秒内为一个客户端提供服务,那么每秒就可以为 128 个客户端提供服务,也就是说需要 27.3 秒才能为 3500 个客户端提供服务。

如果您可以在 1.5 秒内为单个客户端提供服务,那么每秒就有 42.66 个客户端,也就是说需要 82 秒才能为 3500 个客户端提供服务。

每个客户端 2 秒,即服务 3500 个客户端需要 54.6 秒。

500 毫秒可能是 TCP 设置时间、请求时间、传输时间等的合理数字,具体取决于网络延迟。

我会进行测试,查看一次处理一个请求需要多长时间,然后进行计算,确定如果每个请求的服务时间相同,则处理所有请求需要多长时间。

您可能需要总共 1000 个就绪线程才能在 3.5 秒内提供该文件。

此外,您可能想看看 apache 需要多长时间才能启动线程 - 如果它在空闲时只保留 30 个线程,并且机器在此之前处于空闲状态,那么它必须启动所有这些线程才能开始为它们提供服务。确保您的最小空闲线程数很高。

编辑:

嗯,我做了一些测试,看起来在类似企业网络的网络上,传输时间最多为 40 毫秒。如果服务一个客户端需要 40 毫秒,那么每秒服务 1600 个客户端,服务 3500 个客户端则需要不到 2 秒的时间。

我给出的下一个最佳答案是,流量激增引发了以太网故障。我们以前有一个 Web 服务器,白天可以正常工作,但到了晚上就会变得一团糟。发现我们的备份引发了交换机上行链路故障,导致整个交换机速度变慢。这是由自动协商不良 + 电缆不良造成的。

相关内容