我在一个应用程序中有一个内存泄漏问题,我无法修复,所以我通过在我的django应用程序设置中使用CELERY_WORKER_MAX_MEMORY_PER_CHILD
来解决它。达到内存限制的工人被重置,但这些工人是链中组的一部分,看起来像:
chain(setup | group(job1, job2) | call_back)()
当一个工人在处理group
中的一个作业时达到内存限制后,call_back
似乎永远不会被调用,因为celery.chord_unlock
循环无限期。CELERY_WORKER_MAX_MEMORY_PER_CHILD
只适用于单独的任务吗?(而不是在链条或和弦中?)
每个子节点的最大内存配置很可能有效。
我怀疑这两种可能性中的一种:
- 作为您的Chord的一部分执行的一个或多个任务达到了重试次数上限。
- 有一个问题(一个bug),阻止回调被调用。
以DEBUG或INFO日志级别运行worker,看看发生了什么。