我们有一个应用程序每秒收到20-30个请求。尽管我们调整了性能变量,但女服务员似乎在负荷下屈服。它不会崩溃也不会出现任何错误。相反,它似乎向Nginx发送(我们假设)一个ERRCONRESET,它向它发送请求。这个假设来自女服务员文档,该文档记录了积压超过其限制时它可能会向请求方发送ERRCONRESET。此外,当女服务员负载时,Nginx会向我们返回504。 python应用程序本身继续运行似乎很好。
我们也尝试增加线程(50个线程)和连接限制(1000)。我们还降低了channel_timeout和cleanup_interval(分别为10秒和15秒)。这仍然表明在负载下性能没有改善。最后,我们甚至试图将积压增加到2048年。这些都没有产生任何重大影响。
在某种程度上,我甚至想知道被禁止的新限制是否被尊重,因为运行netcat显示长时间运行的连接未被终止超过60秒。我们的印象是女服务员应该能够处理这种负担,但事实并非如此。要注意我们已经将这个最多6个并发实例扩展到LB后面以接收请求并且仍然会收到这些错误。
任何反馈或表现提示将不胜感激。我们在kubernetes上分层的非常强大的AWS实例上运行这些。它们占用的CPU和RAM源可以忽略不计。当它确实工作时的毫秒返回时间,所以我看不到代码中可能有贡献的任何瓶颈,onyl事实上有些连接和积压如何被淹没。
请参阅下面的我们的女服务员配置来启动应用程序。
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'))