Я получил типичную ошибку "слишком много дескрипторов файлов" на nginx. После долгих поисков решение состоит в том, чтобы увеличить количество дескрипторов файлов, доступных для nginx. Но мне не хватает информации, чтобы чувствовать себя комфортно, делая это осмысленно и безопасно. Вот основные моменты, которые освещают большинство тем форума / электронной почты:
- ОС имеет свой собственный общий предел дескриптора файла (в моей системе
cat /proc/sys/fs/file-max
выводит «100678») - у каждого пользователя тоже может быть свой лимит (но в моей системе,
ulimit
когда любой пользователь выводит «неограниченно», смотрите обновление ниже ) - несколько человек сказали что-то вроде того, что сказал этот человек : «Директива worker_rlimit_nofile не указывает« сколько », это ограничение операционной системы. Директива worker_rlimit_nofile просто позволяет быстро и грязно увеличить этот лимит, если этого недостаточно. ' Итак, я предполагаю, что это означает, что «лучше» установить ограничение для пользователя ОС nginx, а не в конфиге?
Я могу просто добавить значение worker_rlimit_nofile, превышающее число соединений на одного работника, и назвать его за день, но я чувствую, что на самом деле не знаю, что здесь происходит.
- почему лимит на одного работника будет меньше, чем лимит ОС?
- Как мне узнать, каков мой лимит сейчас?
обновление : как для пользователя root, так и для обычного пользователя, ulimit выводит "unlimited", НО ulimit -Hn
и ulimit -Sn
оба вывода 1024
setsebool -P httpd_setrlimit 1
так, чтобы nginx имел разрешения для установки своего rlimit.Нужно проверить источник, если честно, но он довольно низкий.
Я использовал
worker_rlimit_nofile 15000;
и не было проблем, вы можете безопасно увеличить его, хотя вероятность исчерпания файловых дескрипторов ничтожна.источник