女服务员因连接过多而导致 504 错误

问题描述 投票:0回答:1

我们有一个应用程序每秒收到 20-30 个请求。尽管我们调整了性能变量,但女服务员似乎在负载下屈服了。它不会崩溃,也不会给出任何错误。相反,它似乎向正在向其发送请求的 Nginx 发送(我们假设)一个 ERRCONRESET。这个假设来自 waitress 文档,该文档指出,当积压超过其限制时,它可能会向请求方发送 ERRCONRESET。此外,当女服务员负载不足时,Nginx 会向我们返回 504。 python 应用程序本身看起来仍然运行良好。

我们还尝试增加线程(50 个线程)和连接限制(1000)。我们还降低了channel_timeout 和cleanup_interval(分别为10 秒和15 秒)。这仍然表明负载下的性能没有改善。最后,我们甚至尝试将积压订单增加到 2048。这些都没有产生任何重大影响。

在某种程度上,我什至想知道是否遵守了所禁止的新限制,因为运行 netcat 显示长时间运行的连接在 60 秒以上没有被终止。我们的印象是女服务员应该能够处理这个负载,但事实并非如此。需要注意的是,我们已将其扩展到 LB 后面的 6 个并发实例来接受请求,但仍然收到这些错误。

如有任何反馈或性能提示,我们将不胜感激。我们在 kubernetes 之上的相当强大的 AWS 实例上运行这些。他们占用的 CPU 和 RAM 资源可以忽略不计。当它确实工作时,它的返回时间是毫秒,所以我看不到代码中可能有任何贡献的瓶颈,只有一些连接和积压被压垮的事实。

请参阅下面的女服务员配置来启动应用程序。

waitress.serve(app.app,
               host=os.getenv('HOST', '0.0.0.0'),
               port=int(os.getenv('PORT', '3000')),
               expose_tracebacks=True, 
               connection_limit=os.getenv('CONNECTION_LIMIT', '1000'),
               threads=os.getenv('THREADS', '50'),
               channel_timeout=os.getenv('CHANNEL_TIMEOUT', '10'),
               cleanup_interval=os.getenv('CLEANUP_INTERVAL', '30'),
               backlog=os.getenv('BACKLOG', '2048'))
python waitress
1个回答
0
投票

我们也有同样的问题。 CPU 15%,内存 20%。女服务员在负载测试下死亡。我们正在尝试测试自动缩放,设置为 60% CPU,显然我们永远无法接近

© www.soinside.com 2019 - 2024. All rights reserved.