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
任务由芹菜工人经营,有时由于某种原因而失败 并且系统无法写出任何寻求的日志,只有我会得到的日志是我已经在上面显示的。
一旦任务失败错误就像那些突然出现并且我的系统进入挂起模式,我会重新启动工作进程,以便在我的系统中减少负载
我与主管一起经营工人
答案 0 :(得分:0)
在芹菜中,每个API都会打开一个新文件而不是正确关闭它们,渐渐地它会超过ulimit。
作为此问题的解决方案,您可以将CELERYD_MAX_TASKS_PER_CHILD
放入芹菜配置中。
这将迫使您的芹菜工人在完成一定数量的任务后重新启动。
例如:
如果设置CELERYD_MAX_TASKS_PER_CHILD = 40
当每个工人完成40个任务时,它将重新启动。实际上,这将关闭由该特定工作人员打开的所有打开的文件。