优化多个 gunicorn 实例的 worker 数量

优化多个 gunicorn 实例的 worker 数量

我正在配置 gunicorn(由 Supervisord 监控并位于 nginx 前端后面)并且对于要设置的最佳进程数有点困惑。

在里面文档其中明确解释为:

workers = multiprocessing.cpu_count() * 2 + 1

我的机器是四核的,所以应该有 9 名工人。

但我想跑一些应用程序,每个应用程序监听不同的端口。

那么计数是否应该是(截断):

workers_per_application = int(workers / NUM_APPLICATIONS)

或者说每个国家都应该有上述数量的工人?

我认为这个问题实际上不仅适用于 gunicorn,也适用于每种类似的监听服务器......

答案1

老实说,workers_per_application 更像是一种性能调整,以确保你的应用程序任何时候都会消耗 100% 的 CPU。这并不意味着它会一直消耗。您可以将所有应用程序配置为拥有 9 个工作线程……只要您记住,一个应用程序可能正在处理一些非常困难的事情,这会导致另一个应用程序滞后/无法及时响应。整个“cpu_count() * 2 + 1”最多只是一个建议……您可以添加更多……或者根据需要减少。我不确定 cpu_count() 返回的是物理处理器的数量……还是 CPU 核心的数量。四核 + 超线程可能看起来像是 8 个核心,这将转换为 17 个进程……或者它可能只算作 1 个……转换为 3 个进程。摆弄它,看看会发生什么。

如果您希望两个应用程序同样运行良好,且不出现由另一个应用程序引起的太大延迟,您可能需要为此设置一个硬数字。

相关内容