【问题标题】:Stuck at 100 requests uWSGI卡在 100 个请求 uWSGI
【发布时间】:2012-01-20 22:30:39
【问题描述】:
httperf ... --rate=20 --send-buffer=4096 --recv-buffer=16384 --num-conns=100 --num-calls=10

在 nginx 上按预期提供 1000 个请求。

Total: connections 100 requests 1000 replies 1000 test-duration 5.719 s

Connection rate: 17.5 conn/s (57.2 ms/conn, <=24 concurrent connections)
Connection time [ms]: min 699.0 avg 861.3 max 1157.5 median 840.5 stddev 119.5
Connection time [ms]: connect 56.9
Connection length [replies/conn]: 10.000

Request rate: 174.8 req/s (5.7 ms/req)
Request size [B]: 67.0

Reply rate [replies/s]: min 182.0 avg 182.0 max 182.0 stddev 0.0 (1 samples)
Reply time [ms]: response 80.4 transfer 0.0
Reply size [B]: header 284.0 content 177.0 footer 0.0 (total 461.0)
Reply status: 1xx=0 2xx=1000 3xx=0 4xx=0 5xx=0

CPU time [s]: user 1.42 system 4.30 (user 24.9% system 75.1% total 100.0%)
Net I/O: 90.2 KB/s (0.7*10^6 bps)

Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0

在相同的硬件上,在端口 8000 上查询 uWSGI 会产生 200 个请求和 100 个回复,以及 100 个重置连接。怎么了?服务器非常强大。

Total: connections 100 requests 200 replies 100 test-duration 5.111 s

Connection rate: 19.6 conn/s (51.1 ms/conn, <=5 concurrent connections)
Connection time [ms]: min 69.5 avg 128.4 max 226.8 median 126.5 stddev 27.9
Connection time [ms]: connect 51.4
Connection length [replies/conn]: 1.000

Request rate: 39.1 req/s (25.6 ms/req)
Request size [B]: 67.0

Reply rate [replies/s]: min 19.8 avg 19.8 max 19.8 stddev 0.0 (1 samples)
Reply time [ms]: response 68.8 transfer 8.2
Reply size [B]: header 44.0 content 2053.0 footer 0.0 (total 2097.0)
Reply status: 1xx=0 2xx=100 3xx=0 4xx=0 5xx=0

CPU time [s]: user 1.87 system 3.24 (user 36.6% system 63.4% total 100.0%)
Net I/O: 42.6 KB/s (0.3*10^6 bps)

Errors: total 100 client-timo 0 socket-timo 0 connrefused 0 connreset 100
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0

【问题讨论】:

  • tcp_max_syn_backlog 是 1024 somaxconn 是 2048

标签: python django nginx uwsgi httperf


【解决方案1】:

这是更合乎逻辑的答案:

http://projects.unbit.it/uwsgi/wiki#Wherearethebenchmarks

监听队列大小在 uWSGI 启动日志中报告。

但由于您尚未报告您的 uWSGI 配置,因此无法给您正确的提示。

【讨论】:

  • 本身没有配置,我只是安装它并通过命令行运行它。它确实报告了套接字上的 100 个连接限制,但是当我设置 -l 500 时,我得到了相同的结果。您提供的链接提到调整操作系统队列限制 - 这是要走的路吗?我不认为 100 对 16 核 Nehalem 来说很多。
  • 我想你的“无配置”意味着你只运行一个进程。那么这个socket最多只能管理101/102个并发连接。是的,您必须调整内核以增加套接字积压,但您也必须处理进程/线程的数量并最终超时。关于 100/ 16 核的比率,您可能需要阅读此manpagez.com/man/2/listen 以了解套接字积压是什么以及它是如何工作的。
  • 感谢您的链接。后来我确实发现,在没有 nginx 的情况下运行它不会提供那么多的性能。正确设置后,它使用 Django 处理 2000req/s(好吧,我可以测量最多)
  • @Dmitry 我很想看看你的配置,看看我有什么可以改进的!如果可以?
【解决方案2】:

只需在你的 uWSGI 配置中使用 &lt;listen&gt;1024&lt;/listen&gt; 指令。

【讨论】:

    猜你喜欢
    • 2015-12-29
    • 2013-12-12
    • 2016-02-05
    • 2022-08-09
    • 1970-01-01
    • 2016-03-05
    • 2019-02-13
    • 1970-01-01
    • 2014-08-03
    相关资源
    最近更新 更多