记录一次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
后得以解决
相关文章推荐
- 记一次erlang分布式系统的bug修复过程
- 记录一次bug解决过程:resultType和手动开启事务
- RabbitMQ liunx-centos 安装过程记录
- 记录一次XP系统修复过程
- 记一次安卓BUG修复的过程
- 记录一次bug解决过程:else未补全导致数据泄露和代码优化
- 记录一次bug解决过程:git深入学习和JDK8新特性
- 记录一次软件Bug发生的过程
- 记录一次bug解决过程:velocity中获取url中的参数
- 记录一次软件Bug发生的过程
- 记录一次chown误操作导致服务宕机修复过程(linux+nginx+php+mysql)
- 记录一次bug解决过程:eclipse集成lombok插件
- 记录一次bug解决过程:eclipse Installed JREs 配置引出的问题
- 记一次线上分布式redis服务BUG发现与修复过程
- sql2java:一次外科手术式的bug修复过程
- 记录一次.Net框架Bug发现和提交过程:.Net Framework和.Net Core均受影响
- 记录一次bug解决过程:可维护性和性能优化
- H5开发过程中修复的bug记录
- 记录一次bug解决过程:mybatis中$和#的使用