使用NGinx缓慢的HTTP吞吐量

我有一个问题有一天,你们是非常有帮助的。 我已经在这个一个星期以来一直在绞尽脑汁。 基本上,我有几个nginx服务器反向代理在uwsgi上运行的python应用程序,当延迟(有点)很高时,服务非常慢的http响应。 每个服务器都有一个2Gb的互联网连接,而我自己的连接超过200Mb。 我离服务器50ms。

当我在同一个数据中心的服务器上运行apachebench时,结果如下:

Document Length: 68093 bytes Concurrency Level: 1 Time taken for tests: 0.912 seconds Complete requests: 10 Failed requests: 0 Total transferred: 685380 bytes HTML transferred: 680930 bytes Requests per second: 10.96 [#/sec] (mean) Time per request: 91.217 [ms] (mean) Time per request: 91.217 [ms] (mean, across all concurrent requests) Transfer rate: 733.76 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.0 0 0 Processing: 89 91 1.9 91 95 Waiting: 81 84 1.9 83 87 Total: 89 91 1.9 91 95 Percentage of the requests served within a certain time (ms) 50% 91 66% 91 75% 93 80% 93 90% 95 95% 95 98% 95 99% 95 100% 95 (longest request) 

这是关于我所期望的。

但是,当我从我的电脑运行apachebench,这是我得到:

 Document Length: 68093 bytes Concurrency Level: 1 Time taken for tests: 2.827 seconds Complete requests: 10 Failed requests: 0 Total transferred: 685380 bytes HTML transferred: 680930 bytes Requests per second: 3.54 [#/sec] (mean) Time per request: 282.739 [ms] (mean) Time per request: 282.739 [ms] (mean, across all concurrent requests) Transfer rate: 236.73 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 47 48 1.6 48 51 Processing: 223 234 15.7 230 278 Waiting: 130 138 13.9 134 177 Total: 272 283 16.7 277 328 

这大约是处理时间的三倍,大约是传输速度的三分之一。 唯一的区别是延迟。 为什么延迟会导致传输速度的大幅下降? 这会导致我们的网站明显的延迟。 看起来,nginx不会一次发送整个有效负载,而是在发送更多有效负载之前等待ACK包,导致延迟降低吞吐量。 我通过tcpdump查看,似乎nginx只发送每个数据包4k的数据。

你们有没有关于如何加快这种连接的build议,以便利用可用的全部带宽? 谢谢!

当我在一个网站上进行负载testing时,我正在开发每秒250个交易,与同一个数据中心中的一台服务器进行快速连接,每秒处理2500个交易。

如你所说,延迟是答案。 它只是增加了时间才能完成工作,所以等待时间。 负载也会降低。

你只使用了一个连接,并做了十个请求(并发是一个)。 如果你的等待时间是250ms,那么你从远程连接testing的等待时间为2.5s–可能是双向的,因为数据是双向的。 如果你只有5毫秒的延迟,那么这将减less到50毫秒,这是不可察觉的。

如果你想使用你的全连接来加载testing你的系统,你需要并行地运行许多testing – 20,50,也许1000.这增加了并发性。 在Siege中,这是作为“基准模式”或“负载testing”模式完成的 – 我忘记了确切的名称。