繁体   English   中英

为什么芹菜不能干净地关闭?

[英]Why is Celery not shutting down cleanly?

在使用Ctlr-C键盘中断向Celery工作人员发出TERM信号两次(暖关机和冷关机)后,Celery工作人员才挂断电话。 它不消耗消息或执行任务(如预期的那样),但它也没有关闭。

我跑strace对芹菜的过程,看看发生了什么事情的幕后。 这是Celery主过程PID的strace输出

strace -p 27867
Process 27867 attached - interrupt to quit
futex(0xb966a78, FUTEX_WAIT, 0, NULL

这里是我的发现做strace对孩子的过程:

strace -p 27874
Process 27874 attached - interrupt to quit
select(4, [3], NULL, NULL, {0, 562000}) = 0 (Timeout)
futex(0x871a808, FUTEX_WAKE, 1)         = 0
select(4, [3], NULL, NULL, {1, 0})      = 0 (Timeout)
futex(0x871a808, FUTEX_WAKE, 1)         = 0
......................................................

我知道我可以向进程发出一个KILL信号来摆脱它们。 但我很想知道究竟是什么阻止了这些进程被关闭,以及是否有可能对它做些什么。

软件堆栈:Python 2.6.2,Celery 2.4.6,CentOS 5.0

更新:CPU使用率降至几乎0%。 这些任务非常占用CPU,因此确认当前没有任何任务处于活动状态。

来自文档

如果工作人员在考虑周期之后不会关闭,例如由于任务陷入无限循环,您可以使用KILL信号强制终止工作人员,但要注意当前正在执行的任务将丢失(除非任务有acks_late选项集)。

也来自谷歌团体

在处理完所有活动任务之前,celeryd不会关闭,其中active表示已启动的任务(并非所有保留任务)。 一旦连接通道关闭,保留的消息将被释放并重新传送。 在活动任务返回后会发生这种情况。 如果你没有启用--time-limit,celeryd永远不会在关机时杀死你的任务,即使他们需要DAYS来完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM