У меня есть приложение с сельдереем, настроенное так же в systemd в Ubuntu 18.04:
[Unit]
Description=My Celery Service
After=network.target
StartLimitIntervalSec=0
[Service]
SyslogIdentifier=workers.service
Type=simple
Restart=always
RestartSec=1
User=celery-user
Group=celery-user
WorkingDirectory=/home/celery-user/app
ExecStart=/home/celery-user/app_venv/bin/celery -A celery_worker.celery worker --concurrency=300 --soft-time-limit=15000 --loglevel=info --logfile=/var/log/celery/worker.log
KillSignal=SIGTERM
[Install]
WantedBy=multi-user.target
Однако, когда я пытаюсь запустить приложение с sudo systemctl start celery.service
, служба запускается, но в логах Я сразу вижу это:
[2020-03-27 17:44:06,052] CRITICAL worker.start: Unrecoverable error: OSError(24, 'Too many open files')
Traceback (most recent call last):
File "/home/celery-user/app_venv/lib/python3.6/site-packages/celery/worker/worker.py", line 205, in start
--- snip ---
File "/home/celery-user/app_venv/lib/python3.6/site-packages/billiard/connection.py", line 569, in Pipe
fd1, fd2 = os.pipe()
OSError: [Errno 24] Too many open files
Я видел множество других с подобной проблемой, но пока что ничего не предполагалось, сработало. Я сделал стандартную проверку всех обычных подозреваемых открытых файлов, но ничего необычного для меня не выглядит. Я поднял некоторые из максимумов довольно высоко, просто чтобы убедиться, что они на самом деле не были проблемой, как вы можете видеть здесь:
$ ulimit -Hn
1000000
$ ulimit -Sn
1000000
$ sysctl fs.file-nr
fs.file-nr = 1536 0 3256496
Если я значительно уменьшу параллелизм, до 100, это не вызовет проблем и все 100 дочерних процессов запускаются и начинают обрабатывать работу.
Кто-нибудь знает, что еще может быть не так? Насколько я могу судить, в ОС достаточно места для открытых файлов.