文章目錄

之前线上跑的Celery出现了堵塞,导致任务无法执行。这次抽空找找原因。

堵塞的时候,从flower上看到很多任务都处于started状态,而started状态的任务数量正好等于celery进程数。

同样提交大量上次执行的任务,Celery又堵塞了。查看执行的任务,没发现有什么特别的,唯一的问题是任务里再套了一个Celery异步任务,并需要获取到执行的结果。

仔细分析,问题就出在这里。当提交大量的这种任务时,把Celery进程都占满了,然而这些任务都需要另起一个Celery任务才能执行完,此时已经没有Celery进程可以使用,于是所有的任务都无法执行。

解决的办法是,Celery任务里不要再起Celery异步任务, 如果非要这样做,避免大量出现这样的任务。

后来,同事的Celery也出现了堵塞,与他一起查找,没发现问题。于是请教另一位同事,他用pstree命令和strace命令把问题的原因找到。

文章目錄