You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Gevent线程运行Celery Worker时频繁出现OS error: load averages unobtainable

解决「OS error: load averages unobtainable」错误(Celery + Gevent + Python2.7)

我之前在和你完全一致的技术栈(Python 2.7、Celery 4.0.2、Ubuntu 14.04搭配Gevent Worker)下也碰到过这个烦人的问题——首次触发后就频繁发作,折腾了好一阵才找到几个靠谱的解决办法,分享给你:

1. 直接禁用Celery的负载平均值收集

这个错误本质是Celery Worker尝试获取系统负载时失败导致的,最简单的办法就是直接关掉这个功能。你可以在Celery配置文件里加一行:

# Celery 4.x 采用小写配置键
worker_load_average = None

或者启动Worker时直接通过命令行参数指定:

celery worker -A your_app --concurrency=10 -P gevent --load-average=None

2. 升级Gevent版本

老版本的Gevent在做Monkey Patch系统调用时,可能会干扰os.getloadavg()的正常执行。Python 2.7兼容的最后一个稳定Gevent版本是1.5.0,你可以用pip升级试试:

pip install gevent==1.5.0

升级完重启Worker,大概率能解决问题。

3. 验证系统负载文件的可读性

Celery是通过读取/proc/loadavg文件获取系统负载的,你可以先确认Worker运行的用户有没有读取这个文件的权限,手动执行以下命令测试:

cat /proc/loadavg

如果能正常输出类似0.12 0.08 0.05 1/123 4567的内容,说明权限没问题;如果报错,再调整文件读取权限(不过默认情况下普通用户都能读取)。

4. 修改Celery源码(最后兜底手段)

如果上面的方法都不管用,你可以直接修改Celery处理负载的代码,添加异常捕获。找到Celery安装目录下的celery/utils/system.py文件,找到load_average()函数,修改成这样:

def load_average():
    try:
        return os.getloadavg()
    except OSError:
        # 捕获负载获取失败的异常,返回默认值避免报错
        return (0.0, 0.0, 0.0)

改完重启Worker,就能彻底阻止这个错误抛出了。


内容的提问来源于stack exchange,提问作者Japneet Singh Chawla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:08:38