Heroku 上的 Celery、RabbitMQ 和 Django:达到内存限制
Posted
技术标签:
【中文标题】Heroku 上的 Celery、RabbitMQ 和 Django:达到内存限制【英文标题】:Celery, RabbitMQ and Django on Heroku: Reaching Memory Limit 【发布时间】:2020-05-11 20:24:24 【问题描述】:在 Django 应用程序中使用 RabbitMQ 运行 Celery 任务时,我的 Heroku Dyno(爱好)目前已达到 RAM 内存限制。
我对 Celery 设置有一点点玩弄,但我一直在达到内存限制,而且我缺少有关内存优化的技术知识。我想知道我当前的设置是否可以做些什么来防止达到限制,或者是这里升级 Heroku Dyno 的唯一解决方案?
BROKER_URL = 'amqp://url'
BROKER_POOL_LIMIT = 5
CELERY_RESULT_BACKEND = None
CELERY_MAX_TASKS_PER_CHILD = 10
CELERY_MAX_MEMORY_PER_CHILD = 80000
Procfile:web: gunicorn app_name.wsgi worker: celery -A app_name worker -l info --without-heartbeat
Task.py file:@shared_task(acks_late=True, ignore_result=True)
def function_name(args):
【问题讨论】:
【参考方案1】:我遇到了同样的问题,将最大并发设置为 2 或 3 解决了这个问题。
在您的 procfile 中,在 worker 定义中添加 -c 2
或 -c 3
。
默认情况下,Celery 会将并发设置为可用的 CPU 数量。并发定义了将产生的芹菜工人的数量。
【讨论】:
以上是关于Heroku 上的 Celery、RabbitMQ 和 Django:达到内存限制的主要内容,如果未能解决你的问题,请参考以下文章
未执行的任务(Django + Heroku + Celery + RabbitMQ)
Heroku 上未使用 Celery RabbitMQ CloudAMQP 任务队列
Django/Celery 和 CloudAMQP/Heroku 的连接错误