Я хочу получить дескрипторы открытых в данный момент файлов и верхний предел дескрипторов открытых файлов на экземпляре AWS Linux. Причина в том, чтобы определить, нужно ли увеличивать лимиты для nginx, чтобы было доступно достаточно файловых дескрипторов.
Я получаю следующие результаты:
$ulimit -a
open files (-n) 1024
$lsof | wc -l
397
$sudo lsof | wc -l
1870
$sysctl fs.file-nr
fs.file-nr = 1248 0 197688
Из этот ответ Я читал это sysctl
жесткое ограничение выделения памяти для файловых дескрипторов в ядре, в то время как ulimit
Кажется, это ограничение, которое может применяться к определенным доменам и относится к каждому процессу только с областью сеанса.
Правильно ли я интерпретирую приведенные выше значения:
ulimit
показывает, что nginx может открывать 1024 файла за процесс. nginx запускает 2 рабочих процесса на этой машине, поэтому у него доступно 2048 файловых дескрипторов.
lsof
показывает, что процессы вошедшего в систему пользователя (который запускает nginx) открыли 397 файлов.
sudo lsof
показывает, что на тот момент в системе было открыто 1870 файлов.
sysctl
показывает, что максимальное количество файловых дескрипторов в системе - 197688. Это означает, что для всех пользователей и всех процессов, запущенных на этом компьютере, у них не может быть открыто более 197688 файлов.
Разница между текущими открытыми файлами 1248 и 1870 заключается в том, что они подсчитываются по-разному. file-nr
игнорирует некоторые каталоги, которые lsof считает файлами. https://unix.stackexchange.com/q/176967/370277
Адаптация лимитов для nginx:
Nginx ampify в настоящее время показывает nginx.workers.fds_count
около 300 с редкими пиками до 900. Это значение должно отображать сумму обоих рабочих процессов. Это означает, что даже с учетом пиков nginx не использует половину доступных 2048 файловых дескрипторов. Нам здесь хорошо?
Конфигурация nginx nginx -T
показывает worker_connections 1024
, который, по-видимому, представляет собой количество открываемых соединений на рабочий процесс. Каждому исполнителю требуется 2 файловых дескриптора на соединение. Таким образом, ограничение здесь составляет 1024 рабочих_соединения * 2 файловых дескриптора на соединение * 2 рабочих процесса = 4096 файловых дескрипторов. Но мы никогда не смогли бы этого достичь, потому что оба процесса nginx имеют только 2048 доступных файловых дескрипторов (согласно пункту 1 выше). Это правильно?
worker_rlimit_nofile
нигде не установлен, и я не нашел значения по умолчанию в документы. Так нет ли ограничений? Другими словами, если worker_rlimit_nofile = worker_connections *2
как описано Вот, почему в конфиге nginx можно установить оба значения, если одно значение все равно определяло другое?