优化多个 gunicorn 实例的 worker 数量

Ste*_*ano 6 configuration supervisord gunicorn

我正在配置 gunicorn(由 supervisord 监控并在 nginx 前端后面)并且对要设置的最佳进程数感到有些困惑。

文档中清楚地解释了:

workers = multiprocessing.cpu_count() * 2 + 1
Run Code Online (Sandbox Code Playgroud)

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

但我想运行多个应用程序,每个应用程序监听不同的端口。

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

workers_per_application = int(workers / NUM_APPLICATIONS)
Run Code Online (Sandbox Code Playgroud)

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

我认为这个问题实际上不仅适用于 gunicorn,而且适用于所有类似的侦听服务器......

The*_*Wiz 5

老实说,workers_per_application 更像是一种性能调整,以确保您的应用程序可以随时消耗100%的CPU。这并不意味着它会。您可以将所有应用程序配置为有 9 个工作人员...只要您记住,一个应用程序可能正在处理非常困难的事情,这会导致另一个应用程序延迟/无法及时响应. 整个“cpu_count() * 2 + 1”是一个建议,充其量......你可以添加更多......或者你认为必要的更少。我不确定 cpu_count() 是否返回物理处理器的数量...或 CPU 内核的数量。四核 + 超线程可能看起来是 8 核,这将转化为 17 个进程......或者它可能只算作 1......转化为 3 个进程。摆弄它并看看会发生什么。

如果您希望 2 个应用程序同样良好地运行而不会看到另一个应用程序造成太多延迟,您可能需要为此设置一个硬数字。