我有一台服务器运行由 gunicorn 和 Celery 任务队列提供的 Django 应用程序。
古尼康文档建议(2 x $num_cores) + 1 作为默认工人数量。
Celery 文档显示 Celery 工作者的数量默认为 1 x $num_cores。
两者都建议通过实验来找到合适的数字。
我的问题是,在同一台机器上运行 Gunicorn 和 Celery 的经验法则是什么?在一台八核机器上,我应该从 17 个 Gunicorn 和 8 个 Celery 工作程序开始吗?或者从 9 个 Gunicorn 和 4 个 Celery 工作程序开始是否更合理?
该系统受 CPU 限制,希望这能有所帮助。
答案1
任何类型的性能调优通常都是说说而已,而不是硬性规定。我最近不得不对我的 Django 应用程序做一些类似的事情,但有人决定滥用它。当您在同一台机器上运行 Gunicorn 和 Celery 时,理想情况下,您应该从更平衡的方法开始,而不是最大限度地利用 Gunicorn 工作者。这是我的方法:
Gunicorn 工人:
- 从数量稍少的 Gunicorn 工作者开始,使用以下公式:2 * $num_cores + 1
- 对于 8 核机器,你可以从 8-12 个 Gunicorn worker 开始
- 这样做的原因是,您要确保 Celery 工作者仍留有一些 CPU 资源,因为 Celery 任务可能占用大量 CPU 资源。
芹菜工人:
- 您可以使用“推荐”数量的 Celery 工作者
- 它可以定义为 1 * $num_cores
- 例如,对于 8 核机器,您可以从 8 个 Celery 工作器开始。
因此,在 8 核机器上,良好的起始设置可能如下所示:
- Gunicorn:8-12 个工人
- 芹菜:8名工人
目标是不要让 Gunicorn 工作者不堪重负,至少要为 Celery 工作者留下 CPU 资源。