OSError: [Errno 24] Слишком много открытых файлов Gunicorn
У меня есть приложение Django, запущенное на сервере, я использую gunicorn на сервере вот как выглядит мой файл службы gunicorn
myapp.service
[Unit]
Description=myapp daemon
Requires=myapp.socket
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/myappApi/
ExecStart=/myappApi/venv/bin/gunicorn \
--access-logfile - \
--workers 10 \
--timeout 0 \
--bind unix:/run/myapp.sock \
myappProject.wsgi:application
[Install]
WantedBy=multi-user.target
и вот какую ошибку я получаю
File "/myappApi/views.py", line 293, in CustomHandler
Jan 23 10:48:30 myapp gunicorn[2957207]: app = CustomApp()
Jan 23 10:48:30 myapp gunicorn[2957207]: File "app.py", line 22, in __init__
Jan 23 10:48:30 myapp gunicorn[2957207]: self.logger = start_logger(__file__)
Jan 23 10:48:30 myapp gunicorn[2957207]: File "utils/loggerUtil.py", line 19, in start_logger
Jan 23 10:48:30 myapp gunicorn[2957207]: OSError: [Errno 24] Too many open files: 'conf/config.json'
вышеуказанная ошибка вызывается этим кодом
from logging.handlers import RotatingFileHandler
import os, logging, time, json
def start_logger(__file__):
os.makedirs('logs', exist_ok=True)
fileName = os.path.basename(__file__)
logdatetime = time.strftime("%d-%m-%Y-%I-%M")
logFilename = 'logs/' + fileName[:-3] + logdatetime + '.log'
logger = logging.getLogger(__file__)
''' Setting the threshold of logger to DEBUG '''
with open("conf/config.json") as f1:
data = json.load(f1)
# Rotating handler
handler = RotatingFileHandler(
logFilename, maxBytes=data['maxBytes'], backupCount=data['backupCount'])
logger.addHandler(handler)
return logger
Я проверил этот ответ он увеличивает ulimit файла, что нормально, но это временное решение. Я заметил, что использую with
контекстный менеджер, поэтому вне этого блока файлы должны быть закрыты, почему они все еще открыты?