首页 > 解决方案 > Django Celery OSError:无法获得平均负载

问题描述

我使用 Django、Celery、Celery-beat 和 Supervisor 创建了一个后端应用程序。我遇到一个问题,几个小时后 Celery 完全停止工作并出现以下错误。我在 Github 上检查了这个链接,上面说文件描述符可能有问题。我确实运行了以下命令

# cat /proc/sys/fs/file-max
1576989

下面是完整的堆栈跟踪。

[2021-09-17 23:01:01,388: WARNING/MainProcess] Traceback (most recent call last):

[2021-09-17 23:01:01,388: WARNING/MainProcess]   File "/opt/myProject/env/lib64/python3.8/site-packages/eventlet/hubs/hub.py", line 476, in fire_timers

[2021-09-17 23:01:01,388: WARNING/MainProcess]   File "/opt/myProject/env/lib64/python3.8/site-packages/eventlet/hubs/timer.py", line 59, in __call__

[2021-09-17 23:01:01,388: WARNING/MainProcess]   File "/opt/myProject/env/lib64/python3.8/site-packages/eventlet/greenthread.py", line 224, in main

[2021-09-17 23:01:01,388: WARNING/MainProcess]   File "/opt/myProject/env/lib64/python3.8/site-packages/eventlet/greenthread.py", line 240, in _resolve_links

[2021-09-17 23:01:01,388: WARNING/MainProcess]   File "/opt/myProject/env/lib64/python3.8/site-packages/celery/concurrency/eventlet.py", line 61, in _entry_exit
    g.wait()

[2021-09-17 23:01:01,388: WARNING/MainProcess]   File "/opt/myProject/env/lib64/python3.8/site-packages/eventlet/greenthread.py", line 181, in wait

[2021-09-17 23:01:01,388: WARNING/MainProcess]   File "/opt/myProject/env/lib64/python3.8/site-packages/eventlet/event.py", line 132, in wait

[2021-09-17 23:01:01,389: WARNING/MainProcess]   File "/opt/myProject/env/lib64/python3.8/site-packages/eventlet/greenthread.py", line 221, in main

[2021-09-17 23:01:01,389: WARNING/MainProcess]   File "/opt/myProject/env/lib64/python3.8/site-packages/kombu/asynchronous/timer.py", line 65, in __call__

[2021-09-17 23:01:01,389: WARNING/MainProcess]   File "/opt/myProject/env/lib64/python3.8/site-packages/kombu/asynchronous/timer.py", line 127, in _reschedules

[2021-09-17 23:01:01,389: WARNING/MainProcess]   File "/opt/myProject/env/lib64/python3.8/site-packages/celery/worker/heartbeat.py", line 45, in _send

[2021-09-17 23:01:01,389: WARNING/MainProcess]   File "/opt/myProject/env/lib64/python3.8/site-packages/celery/utils/sysinfo.py", line 23, in load_average

[2021-09-17 23:01:01,389: WARNING/MainProcess]   File "/opt/myProject/env/lib64/python3.8/site-packages/celery/utils/sysinfo.py", line 13, in _load_average

[2021-09-17 23:01:01,389: WARNING/MainProcess] OSError: Load averages are unobtainable

下面是 Celery 工人的主管配置

[program:celery_worker]

command=/opt/myProject/env/bin/celery -A src worker -l debug -Ofair --purge -P eventlet -c 50 — without-gossip — without-mingle — without-heartbeat
environment=PATH="/opt/myProject/env/bin:%(ENV_PATH)s"
directory=/opt/myProject/myProject/
stdout_logfile=/var/log/myProject/celery_worker/celery_worker.log
stderr_logfile=/var/log/myProject/celery_worker/celery_worker.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
killasgroup=true
stopasgroup=true
priority=200
numprocs=1
user=root

以下是 Django Celery 的设置

# celery setting.
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ENABLE_UTC = True
CELERY_IMPORTS = ['src.tasks','src.celery_app']
CELERY_TASK_RESULT_EXPIRES = 3600
CELERY_CACHE_BACKEND = 'default'
CELERY_MAX_TASKS_PER_CHILD = 10
CELERY_RESULT_EXPIRES = 1800
CELERY_WORKER_MAX_MEMORY_PER_CHILD = 4096

谁能分享我如何解决这个问题的见解?

标签: pythondjango-celerysupervisord

解决方案


推荐阅读