我们有一些芹菜工人的蟒蛇应用程序。
我们使用下一个命令启动芹菜工人:
python celery -A proj worker --queue=myqueue -P prefork --maxtasksperchild=500我们对芹菜工人有两个问题。
我们仍然在调查内存泄漏,但是由于它是遗留代码,很难找到原因,解决这个问题需要一些时间。为了防止泄漏,我们使用--maxtasksperchild,因此每个工作人员在处理完500个事件后都会重新启动自己。而且它工作得很好,记忆增长到了某种程度。
第二个问题有点困难。为了处理我们的芹菜队列中的所有事件,我们必须启动更多的工人。但是对于prefork,每个进程占用大量内存(在我们的例子中约为1.1亿),所以我们要么需要大量服务器来启动正确的工作人员,要么我们必须从prefork切换到eventlet:
python celery -A proj worker --queue=myqueue -P eventlet --concurrency=10在本例中,我们将使用相同数量的内存(每个进程约110米),但每个进程将有10个工作人员,这大大提高了内存效率。但问题是,我们仍然存在#1 (内存泄漏)问题,我们不能使用--maxtasksperchild,因为它不能与eventlet一起工作。
任何想法如何使用像--maxtasksperchild和eventlet一样的东西
发布于 2016-05-25 12:01:09
max-memory-per-child。希望它能与所有并发模型一起工作。我还没试过呢。https://stackoverflow.com/questions/37422280
复制相似问题