1
fanhaipeng0403 52 天前
建议用 rabittmq。
还算稳定,分享下我的配置 CELERY_IGNORE_RESULT = True CELERY_BROKER_URL = '‘ xxxx ’ CELERY_TIMEZONE = 'xxx' CELERY_DEFAULT_QUEUE = 'default' CELERY_CREATE_MISSING_QUEUES = 'default' BROKER_HEARTBEAT = 24*60*60*2 CELERY_ENABLE_UTC = False CELERY_DISABLE_RATE_LIMITS = True CELERYD_MAX_TASKS_PER_CHILD = 10 BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 1800} CELERYD_FORCE_EXECV = True BROKER_POOL_LIMIT = None |
![]() |
2
zhoudaiyu 52 天前 via iPhone
@fanhaipeng0403 谢谢您!请问 celery 对 redis 的支持有问题吗?对 RMQ 的支持好一些?
|
3
fanhaipeng0403 52 天前 ♥ 1
RabbitMQ is feature-complete, stable, durable and easy to install. It ’ s an excellent choice for a production environment.
官方文档推荐的~ @zhoudaiyu |
![]() |
4
zhoudaiyu 52 天前 via iPhone
@fanhaipeng0403 好的,我看看文档!谢谢啦
|
![]() |
5
Eds1995 52 天前 via Android
这不是 redis 的问题,很可能是 celery_schedule 的问题,总觉得用 celery 自带的 beat 来做定时器总会出现各种问题,现在有两种选择,自己写 beat,或者换一个库
|
![]() |
7
chashao 51 天前 via Android
会不会是那几个任务把 worker 阻塞了……
|
9
a663 51 天前 via Android
之前用 celery 和 rabbitmq 也遇到过同样的问题
|
11
a663 51 天前 via Android
@zhoudaiyu 我是运维,那时候是开发那边去看的,我觉得可以尝试多加点监控看看,监控 celery 和 mq,做到精细化去,我后面离职了,对这个 bug 一直念念不忘,诶。
|
14
julyclyde 50 天前
你得看看 worker 卡在哪儿了
先开详细日志,看看执行到哪个 task 函数里了 然后改这个 task 函数,里边可疑的动作都加上“动作前输出时间戳”和“动作后输出时间戳” 如果卡死的,会发现这俩不配对 如果特别慢,相减得到时长可很明显看出来 |
16
a663 50 天前 via Android ♥ 1
@zhoudaiyu 一定还会有的,哈哈哈
其实我那时候这么分析,消息队列模型,worker 主动去 MQ 取出消息消费,监控 MQ 消息有没有丢(一般不会),再做一些 worker 的监控,最终看下次遇到问题的情况进一步处理。 如果单纯的是 beat 定时任务,可以做一个超时重试的参数(我那时候的业务,定时任务就是去改数据库的一些东西,无所谓就做了超时)。但是非 beat 的,这个真的需要去好好定位,如果对业务无所谓,可以考虑加 timeout 参数 |
20
fanhaipeng0403 49 天前 ♥ 1
@zhoudaiyu
可以使用 celery 提供的信号接口,监测每个任务的执行时间,然后发给 statsd 或者 promethus 之类的 https://github.com/getredash/redash/blob/master/redash/metrics/celery.py 这个是代码例子 |
21
a226679594 48 天前
让它多产生日志就有了
|