4

我们有一个每秒收到 20-30 个请求的应用程序。尽管我们调整了性能变量,但女服务员似乎在负载下屈曲。它不会崩溃也不会给出任何错误。相反,它似乎向 Nginx 发送(我们假设)一个 ERRCONRESET,Nginx 正在向它发送请求。这个假设来自服务员文档,该文档指出当积压超过其限制时,它可能会向请求方发送 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'))
4

0 回答 0