[英]Celery - Memory Leak (Memory doesn't get free even after worker completed the task)
我在 celery 服務器上運行了一個原子事務,它消耗了大量的 memory 但 memory 在任務完成后沒有釋放。
對我有用的解決方案是在 N 個任務后殺死 celery 工作人員,即使用 - CELERYD_MAX_TASKS_PER_CHILD 。
這個問題還有其他解決方案嗎? 如果 celery 每天收到大約 10,000 個任務,應該為CELERYD_MAX_TASKS_PER_CHILD設置什么好數字
celery 上有一個未解決的問題,可能值得一試。
您的解決方法非常公平,是我們在自己的業務中使用的並且簡單有效。 值得注意的是,celery 使用工作池,這意味着它不會在每個任務之后殺死工作進程並將它們重用於下一個任務,這顯然意味着進程級資源可能會隨着時間的推移而泄漏。
您可以測量進程啟動和終止所需的時間。 例如,如果您的任務需要 20 秒,進程啟動和最終終止需要 2 秒,並且您可以容忍 5% 的開銷,那么您可以將CELERYD_MAX_TASKS_PER_CHILD
參數設置為 2。這取決於您可以容忍的開銷和泄漏量.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.