您的位置:首页 > 其它

记录一次celery+rabbitmq的bug修复过程

2017-09-26 16:22 579 查看

问题现象

线上的爬虫服务使用celery+rabbitmq进行任务分发,之前一直没有出现过问题,不过有一天早上,忽然所有的服务都停了。后台日志显示的问题是,

[2017-09-25 01:10:30,496: ERROR/MainProcess] Process 'Worker-1' pid:5406 exited with 'exitcode 1'
[2017-09-25 01:10:34,521: ERROR/MainProcess] Timed out waiting for UP message from <Worker(Worker-3, started daemon)>
[2017-09-25 01:10:34,594: ERROR/MainProcess] Process 'Worker-3' pid:5609 exited with 'signal 9 (SIGKILL)'


我的celery使用supervisor进行配合,诡异的情况就是直接使用celery命令执行完全没有问题,但是使用supervisor启动后台就一直报这个错误,而且这个异常不会导致worker退出,supervisor就会认为进程是正常进行的。重启各种服务后稍微好用了一会儿,然后又陆续的进入这个错误的节奏。

使用的版本是 celery3.1.15

修复过程

首先是网上的一种方法,在celery命令的最后加上 -P gevent。这样运行后出现另一个问题,在运行了一段时间后进行就停住了,而且没有任何异常的日志,连接等一切都正常,心跳包也能发,但是worker就是不去获取新任务。
最后,在尝试了各种方案一天之后,无奈选择了最笨的方案--将使用到工具升级到最新版本。最后celery升级到了4.1.0。然后就莫名的好用了。不过这个过程中伴随这一些微小的修改,比如自定义的路由MyRouter方法无法使用了,按照最新文档改成了例子中的样子,然后apply_async的参数需要处理一下,在升级以后会报编码错误。


另外在新版本启动后出现另一个问题,不过参照https://github.com/celery/celery/issues/3675

pip uninstall librabbitmq

后得以解决
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  bug