我有一台伺服器運行由 Gunicorn 和 Celery 任務佇列提供服務的 Django 應用程式。
鰩魚文件建議(2 x $num_cores) + 1 作為預設的工作執行緒數。
芹菜文檔顯示 Celery 工作執行緒的數量預設為 1 x $num_cores。
兩者都建議嘗試找到合適的數字。
我的問題是,在同一台機器上運行 Gunicorn 和 Celery 的良好經驗法則是什麼?在八核心機器上,我應該從 17 個 Gunicorn 和 8 個 Celery 工人開始嗎?或者從 9 個 Gunicorn 和 4 個 Celery 工人開始有意義嗎?
系統受 CPU 限制,如果有幫助的話。
答案1
任何類型的性能調整通常都比硬性規則更溫和。我最近不得不對我的 Django 應用程式做一些類似的事情,但有人決定濫用它。當您在同一台機器上執行 Gunicorn 和 Celery 時,理想情況下您應該從更平衡的方法開始,而不是最大化 Gunicorn 工作執行緒。這是我的方法:
古尼角工人:
- 首先使用稍少數量的 Gunicorn 工作線程,使用以下公式:2 * $num_cores + 1
- 對於8核機器,你可以從8-12個Gunicorn工人開始
- 背後的原因是,您希望確保仍有一些 CPU 資源留給 Celery 工作線程,因為 Celery 任務可能是 CPU 密集的。
芹菜工人:
- 您可以使用「推薦」數量的 Celery 工作人員
- 它可以定義為 1 * $num_cores
- 例如,對於 8 核心機器,您可以從 8 個 Celery 工作執行緒開始。
因此,在 8 核心機器上,一個好的啟動設定可能如下所示:
- Gunicorn:8-12名工人
- 芹菜:8名工人
目標是不讓 Gunicorn 工作人員不堪重負,至少將 CPU 資源留給 Celery 工作人員。