V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
kkzxak47
V2EX  ›  Python

突然遇到的 Celery 一个奇怪的现象

  •  
  •   kkzxak47 · 2016-08-28 01:42:29 +08:00 · 3848 次点击
    这是一个创建于 2770 天前的主题,其中的信息可能已经有所发展或是发生改变。
    已经正常工作了快半年的系统,最近突然出现任务大量积压的情况,看日志发现原来只需要 0.02 秒的任务,一个个都变成 15 秒 /30 秒 /45 秒才能执行完,实在太诡异了,时间都是 15 的倍数。然而不论是网络请求或是数据库访问都没有异常,任务倒还是执行成功的。
    这时候重启队列又能恢复正常耗时,可是过一段时间又开始变慢。
    是用 Django 做的一个应用, redis 做 broker ,所有服务都是阿里云的。

    完全没有头绪,怎么排查故障?
    15 条回复    2016-09-02 22:30:59 +08:00
    zhuangzhuang1988
        1
    zhuangzhuang1988  
       2016-08-28 08:29:51 +08:00
    打日志, 看是不是哪里堵塞了, 网络或者数据库。
    Allianzcortex
        2
    Allianzcortex  
       2016-08-28 08:32:07 +08:00 via iPhone
    我猜是 io 问题。。如果是突然出现的话就只能怀疑阿里云了-_-||
    goodryb
        3
    goodryb  
       2016-08-28 18:22:14 +08:00
    @Allianzcortex 重启就能恢复,这个不一定是 IAAS 的问题,多从日志分析比较靠谱
    fofo
        4
    fofo  
       2016-08-28 19:34:30 +08:00 via iPhone
    把任务分类用不同的队列,用不同的进程来跑队列(建议 docker )来跑,然后观察日志,查找问题。
    kkzxak47
        5
    kkzxak47  
    OP
       2016-08-28 19:41:13 +08:00 via Android
    可能真是阿里云 redis 抽风,其实我重启队列就是做重新连接的操作,有时候有效果,有时候没有。
    总之在没做任何代码和配置改变的情况下,现在恢复正常了- -
    julyclyde
        6
    julyclyde  
       2016-08-29 13:43:35 +08:00
    你是不是在用 sentry 啊?
    kkzxak47
        7
    kkzxak47  
    OP
       2016-08-29 21:25:20 +08:00 via Android
    @julyclyde 没有啊
    julyclyde
        8
    julyclyde  
       2016-09-01 11:18:11 +08:00
    @kkzxak47 那你的任务里(除了 broker )是不是用到 redis 了?
    kkzxak47
        9
    kkzxak47  
    OP
       2016-09-01 14:46:09 +08:00 via Android
    @julyclyde 是的,用到了,每个任务都会去确认一个阈值,是存在 redis 里的
    kkzxak47
        10
    kkzxak47  
    OP
       2016-09-01 14:48:52 +08:00 via Android
    @julyclyde broker 和任务用到的 redis 是独立的实例
    julyclyde
        11
    julyclyde  
       2016-09-02 12:18:37 +08:00
    @kkzxak47 任务内那个 redis 涉及到 redis 里的哪几个数据类型?是不是有 sorted set 啊?
    kkzxak47
        12
    kkzxak47  
    OP
       2016-09-02 13:30:00 +08:00 via Android
    @julyclyde 没有,只有一个值,数字
    julyclyde
        13
    julyclyde  
       2016-09-02 13:51:32 +08:00
    @kkzxak47 那你在任务函数里,分几段打一下时间吧。
    写日志:
    任务 id 、步骤、耗时

    然后横竖统计一下就知道慢在哪个段里了

    我上个月见过 redis 的 sorted set 性能急剧下降导致 celery 总是超时、大量任务积压的情况。这种情况增加 worker 是没用的
    kkzxak47
        14
    kkzxak47  
    OP
       2016-09-02 13:57:54 +08:00 via Android
    @julyclyde 学习了。想了一下,我们未来可能也有这种危险……
    不过这次是一过性的,看阿里云 redis 使用量监控图,上个月除了那天晚上一个凸起,其他时间基本一条直线,我们小应用,队列很少有库存。
    johnzh
        15
    johnzh  
       2016-09-02 22:30:59 +08:00
    我猜是 redis
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5325 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 09:04 · PVG 17:04 · LAX 02:04 · JFK 05:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.