芹菜-内存泄漏(即使工作人员完成任务后,内存也无法释放)

时间:2019-10-11 11:48:11

标签: python django celery

我在celery服务器上运行了一个原子事务,该事务消耗大量内存,但任务完成后内存无法释放。

对我有用的解决方案是在完成N个任务后杀死芹菜工作者,即- CELERYD_MAX_TASKS_PER_CHILD

还有其他解决方案吗? 如果celery每天接收约10,000个任务,那么应该为 CELERYD_MAX_TASKS_PER_CHILD 设置一个合适的数字

1 个答案:

答案 0 :(得分:0)

芹菜上有open issue,可能值得一试。

您的解决方法很公平,这是我们在自己的业务中使用的方法,并且很简单。值得注意的是,芹菜使用了工人池,这意味着它不会在每个任务执行后杀死工人进程,而是将其重新用于下一个任务,这显然意味着随着时间的流逝,进程级资源可能会泄漏。

您可以测量流程开始和死亡所需的时间。例如,如果您的任务花费20秒,并且流程开始并最终消失需要2秒钟,并且您可以承受5%的开销,则可以将CELERYD_MAX_TASKS_PER_CHILD参数设置为2。这取决于开销和可以容忍的泄漏。