celery 中一个定时任务的 state 一直是 started, 此任务并未执行 有可能什么原因

2019-08-21 14:40:43 +08:00
 dwadewyp

目前可知 1.这个任务执行时间较长,同步方式执行了一下在生产环境大概一两个小时,所以推测 有可能是任务执行过长 直接 timeout,不过查看了下 定时任务并没有设置类似于 timeout 的参数 2.在 celery 的日志中 可以查看到 broker 已经 send 了这个任务 并且 worker 也 receive 到这个任务,不过没有 successed 的 log. 有没有可能 queue 消费了 不过 worker 执行时出现的问题? 有木有一些好的排查方式 提供下?

1857 次点击
所在节点    Python
6 条回复
jenlors
2019-08-21 14:45:58 +08:00
就是任务执行时间过长了,celery 有 time_limit 和 soft_time_liimit 两个配置你可以看一下。
marco25
2019-08-21 14:49:57 +08:00
worker 里面加点 log 打印出来看看到哪里了?
dwadewyp
2019-08-21 15:09:03 +08:00
@long2ice 我这边配置没有加 time_limit 单个任务也没有加 soft_time_limit, 能不能是 worker 执行过长 自动挂起了
jesnridy
2019-08-21 17:22:34 +08:00
是不是负载均衡导致的,默认负载方式是预取操作,会导致一个 worker 正在运行耗时的任务,另一个任务也被分配到这个 worker 必须等待前面一个任务执行完才能执行,即使其他 worker 是空闲的,启动参数加个-Ofair 试试
vZexc0m
2019-08-21 17:26:34 +08:00
不知道是不是因为消费者进程假死的问题导致的。以前也遇到过消费者不执行任务的问题,后来切换到 dramatiq 就没问题了。
hanssx
2019-08-22 15:56:47 +08:00
我之前这个参数是 True,立即任务的状态一直是 PENDING,你看看这个
CELERY_IGNORE_RESULT = False # 是否需要关注任务执行状态,如果设置为 True,任务状态会一直是 PENDING,为啥呢???

另外,任务执行时间长,celery 任务还真有执行时间限制?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/593846

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX