Я использую nginx для обслуживания статических файлов и в качестве прокси для сервера обмена сообщениями Erlang. Каждый пользователь использует два HTTP-соединения с длительным опросом. ОС - это сервер ubuntu.
В часы пик я вижу:
> sudo more /proc/sys/fs/file-nr
1024 0 38001
В обычные часы количество файловых дескрипторов опускается ниже 1024, но никогда не превышает 1024. Пользователи сообщают о потерянных соединениях, когда я превышаю предел в 1024.
Почему я ограничен 1024 файловыми дескрипторами, хотя у каждого пользователя root (erlang), пользователя www-data (nginx) и открытых TCP-соединений меньше 1024? Есть ли какое-то глобальное ограничение в 1024?
Нужно ли мне использовать worker_rlimit_nofile с nginx или достаточно увеличить nofile в limits.conf для всех пользователей?
Спасибо
Дополнительная информация, которая может быть актуальной:
> sudo nano /etc/security/limits.conf
...
root hard nofile 30000
root soft nofile 30000
> sudo sysctl fs.file-max
fs.file-max = 38001
> ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 4160
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4160
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Другой пользователь, помимо root, скорее всего, достиг вашего предела дескриптора файла.
Попробуйте переключиться /etc/security/limits.conf
к
...
* hard nofile 30000
* soft nofile 30000
Таким образом, у каждого пользователя будет верхний предел 30000.