and*_*ndy 4 python django rabbitmq celery supervisord
我使用Celery/RabbitMQ与我的django应用程序执行异步任务.我刚刚开始与Celery合作.
一旦我启动工作人员,任务就会执行,一切正常.
问题是任务执行会在稍后停止.几个小时后,一天或有时几天.我意识到只有完成任务执行不完整的后果.然后我重新启动celery并执行所有挂起的任务,一切都恢复正常.
我的问题是:
我的堆栈:Django 1.4.8 Celery 3.1.16 RabbitMQ Supervisord
谢谢,安迪
Gar*_*auh 10
(1)如果你的芹菜工人有时会卡住,你可以用它strace & lsof来找出它被卡住的系统调用.
例如:
$ strace -p 10268 -s 10000
Process 10268 attached - interrupt to quit
recvfrom(5,
Run Code Online (Sandbox Code Playgroud)
10268是芹菜工人的pid,recvfrom(5意味着工人停止从文件描述符接收数据.
然后,您可以使用lsof检查5此工作进程中的内容.
lsof -p 10268
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
......
celery 10268 root 5u IPv4 828871825 0t0 TCP 172.16.201.40:36162->10.13.244.205:wap-wsp (ESTABLISHED)
......
Run Code Online (Sandbox Code Playgroud)
它表示工作人员陷入了tcp连接(您可以5u在FD列中看到).
一些python软件包requests阻止等待来自对等的数据,这可能导致芹菜工作者挂起,如果你正在使用requests,请确保设置timeout参数.
(2)您可以在RabbitMQ中监控您的芹菜任务队列大小,如果它在很长一段时间内持续增加,可能是芹菜工人正在罢工.
你看过这个页面了吗?
https://www.caktusgroup.com/blog/2013/10/30/using-strace-debug-stuck-celery-tasks/
| 归档时间: |
|
| 查看次数: |
2017 次 |
| 最近记录: |