当前位置:   article > 正文

Python celery Worker exited prematurely: signal 11 (SIGSEGV) --一种解决方案

signal 11 (sigsegv)

前文

  在一次架构升级后,Python celery遇到不知名异常,致使worker异常退出,最终导致可用worker数越来越少,任务卡死队列。
  异常原因从celery日志看仅一个signal 11,从linux signal信号来看,signal 11标识Segmentation violation,即段异常,涉及到linux内核的数据异常,对于应用层使用celery来说,借鉴意义不大。需要进一步的异常排查定位问题。
  celery版本:4.3.0;python版本:3.6.8

排查

  由于报错信息不明,需要进一步排查,通过google捞取,整合网上资源:

1.pg突然更新导致celery中第三方包连接异常
2.celery中函数引用项目包改成函数内导包
3.celery中序列化/反序列化对象出现异常
  • 1
  • 2
  • 3

  因为1和3在项目内并没有出现,但是2又比较离谱,因为celery里涉及到项目内包的很多,并不能说明哪些需要函数内导包,哪些不需要;所以2也不符合,无奈需要重新排查,通过引入faulthandler来进行排查,会自动收集sys.stderr打印到控制台,能更具体的定位到报错代码行位于哪一行。

import faulthandler
# 开启错误日志记录
faulthandler.enable()
  • 1
  • 2
  • 3

  发现即使开启了错误日志定位,但是有效的信息还是不够,仍旧无排查方向;

解决

  最后通过逐行代码注释的形式定位到问题代码行,然后改成函数内导包后解决… 怀疑需要函数内导包的是涉及到第三方平台或者grpc通讯的,针对这类异常,celery是否无法很好地处理异常,导致段异常

2022.06.06更新

参考这篇:https://stackoverflow.com/questions/69619433/run-client-channel-backup-poller-grpc-client-error-in-celery-worker
具体就是:
在这里插入图片描述
所以根因解决:将celery的启动方式指定成pool=gevent启动即可

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/100797
推荐阅读
相关标签
  

闽ICP备14008679号