如何分析Celery任务的内存使用情况?

9
我有一个Django应用程序,使用celery库运行后台任务,我需要获取并存储任务的最大内存使用量。
我尝试了memory_profiler库中的memory_usage函数,但是我无法在任务内部使用此函数,因为我会收到错误消息:“不允许守护进程有子进程”。我还尝试了在任务外部使用memory_usage函数来监视task.async调用,但由于某种原因,任务会触发两次。
我找到的所有其他方法都是在代码的不同位置检查内存使用情况,然后获取最大值,但我感觉这非常不准确,并且可能会因为垃圾回收而留下一些具有高内存使用率的调用,使我无法检查当前内存使用情况。
官方文档提供了一些有用的函数,但必须依赖上述方法。https://docs.celeryproject.org/en/latest/reference/celery.utils.debug.html 谢谢!
1个回答

0
为什么不使用“控制器”任务?
Celery基础设施允许查询所有工作程序的当前状态:
from celery import Celery
app = Celery(...)
app.control.inspect().active()

这可以在任务内部使用,每隔 # 秒轮询集群并了解发生了什么。 我使用了类似的方法来识别和发送 kill() 命令之间的任务。我的任务是可终止的,因此它们中的每一个都知道如何处理软终止。


这与所提出的问题有什么关联?您能在控制器中看到每个工作人员使用的内存吗? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接