celery worker run弹出错误"操作系统错误太多打开文件"

时间:2017-12-11 07:06:53

标签: celery supervisor

  

E1207 06:26:54.650322426 7649 wakeup_fd_pipe.c:52] pipe   创建失败(24):打开文件太多

     

E1207 06:26:54.651353661 12228 completion_queue.c:850]
  完成队列下一次失败:   {"创建":" @ 1512628014.649848140""描述":" OS   错误""错误号":24,"文件":" SRC /核心/ LIB / iomgr / wakeup_fd_pipe.c"" file_line&# 34; 53" OS_ERROR":"太   许多打开的文件","系统调用":"管道"}

     

E1207 06:26:54.650492228 9620 wakeup_fd_pipe.c:52]管道   创建失败(24):打开文件太多

     

E1207 06:26:54.651371276 7649 ev_poll_posix.c:893]
  pollset_work:{" created":" @ 1512628014.651362488"," description":" OS

     

错误""错误号":24,"文件":" SRC /核心/ LIB / iomgr / wakeup_fd_pipe.c"&#34 ; file_line":53," OS_ERROR":"太   许多打开的文件","系统调用":"管道"}

我正在使用

celery version : celery==4.0.2
          django version : Django==1.10
          supervisor version: 3.2.0
          python version: python 3.6
          rabbitmq version : "RabbitMQ","3.6.10"
          redis version: Redis-server v=3.0.6

任务由芹菜工人经营,有时由于某种原因而失败 并且系统无法写出任何寻求的日志,只有我会得到的日志是我已经在上面显示的。

一旦任务失败错误就像那些突然出现并且我的系统进入挂起模式,我会重新启动工作进程,以便在我的系统中减少负载

我与主管一起经营工人

1 个答案:

答案 0 :(得分:0)

在芹菜中,每个API都会打开一个新文件而不是正确关闭它们,渐渐地它会超过ulimit。

作为此问题的解决方案,您可以将CELERYD_MAX_TASKS_PER_CHILD放入芹菜配置中。

这将迫使您的芹菜工人在完成一定数量的任务后重新启动。

例如: 如果设置CELERYD_MAX_TASKS_PER_CHILD = 40 当每个工人完成40个任务时,它将重新启动。实际上,这将关闭由该特定工作人员打开的所有打开的文件。