Увеличить Max Open File Limit в Unix/Linux



Увеличить Max Open File Limit в Unix/Linux

Несколько раз я сталкивался с ошибкой «Too many open files»(Слишком много открытых файлов) на сервере с высокой нагрузкой. Это означает, что сервер исчерпывает  ресурс на максимальный предел открытых файлов (max open file limit). Теперь вопрос в том, как я могу увеличить лимиты открытых файлов на Linux? Да все очень просто, в своей статье «Увеличить Max Open File Limit в Unix/Linux»  покажу как это выполняется.


Увеличить Max Open File Limit в Unix/Linux


Приведу команды на различные Unix/Linux ОС


Увеличить Max Open File Limit в Linux


Для начала проверим какой предел установлен в ОС:


# cat /proc/sys/fs/file-max

Увеличиваем данный предел  в Linux


Мы можем увеличить лимиты для открытых файлов:


Временно.
Постоянно.

-===ВРЕМЕННО===-


Если есть необходимость увеличить лимит временно (для тестирования, например), то можно это сделать так:


# sysctl -w fs.file-max=500000

Или:


# echo "500000" > /proc/sys/fs/file-max

Вот еще один пример:


# ulimit -n 65635

-===ПОСТОЯННО===-


Если есть необходимость увеличить лимит навсегда, то  можно это сделать так:


# vim /etc/sysctl.conf
[...]
fs.file-max = 500000
[...]

Эти настройки будут сохраняться даже после перезагрузки системы. После добавления конфигурации в файл, выполните следующую команду, чтобы изменения вступили в силу:


# sysctl -p

Настройка лимитов для каждого пользователя


# vim /etc/security/limits.conf

Добавляем параметры:


* hard nofile 500000
* soft nofile 500000
root hard nofile 500000
root soft nofile 500000

Проверка установленных лимитов


Используйте следующую команду, чтобы увидеть максимальное чисто для открытых файлов:


# cat /proc/sys/fs/file-max

Подключаемся от пользователя (у меня это nginx):


# su nginx

Проверяем параметры Hard лимитов:


# ulimit -Hn

В консоле, можно ввести данную команду (очень удобно отображает):


# for pid in `pidof nginx`; do echo "$(< /proc/$pid/cmdline)"; egrep 'files|Limit' /proc/$pid/limits; echo "Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"; echo; done

Проверяем параметры лимитов Soft:


# ulimit -Sn

Увеличить Max Open File Limit в Mac OS X


Выполним проверку лимитов с помощью:


$ launchctl limit maxfiles

Где:


Первый аргумент — soft limit.
Второй аргумент — hard limit.

Можно прописать в файл:


# vim ~/.bash_profile

Следующее значение:


ulimit -n 65536 200000

Вот и все!


Увеличюем nginx worker_rlimit_nofile  в nginx ( на уровне Nginx)


В nginx также можно увеличить лимиты с директивой worker_rlimit_nofile, которая позволяет увеличить этот лимит, если это не хватает данного ресурса на лету на уровне процесса:


# vim /etc/nginx/nginx.conf

И прописываем (редактируем):


# set open fd limit to 30000
worker_rlimit_nofile 30000;

После чего, проверяем конфигурацию nginx и перезапускаем его:

Save and close the file. Reload nginx web server, enter:


# nginx -t && service nginx -s reload

В комментариях писали что нельзя установить данные лимиты для Kali Linux. Вот, решил показать наглядный пример:


Увеличить Max Open File Limit в Unix/Linux

ulimit в Kali Linux


Включение ограничений на основе PAM в Unix/Lixux


Для Debian/Ubuntu


Редактируем файл (Debian/Ubuntu):


# vim /etc/pam.d/common-session

Вставляем:


session    required   pam_limits.so

Открываем еще один файл:


# vim /etc/security/limits.conf

Прописываем лимиты:


* soft nofile 65536
* hard nofile 200000

Открываем:


# vim /etc/ssh/sshd_config

И, приводим к виду:


UseLogin yes

И выполняем рестарт:


# reboot

Для CentOS/RedHat/Fedora


Редактируем файл (Debian/Ubuntu):


# vim /etc/pam.d/login

Вставляем:


session    required   pam_limits.so

Открываем еще один файл:


# vim /etc/security/limits.conf

Прописываем лимиты:


* soft nofile 65536
* hard nofile 200000

Открываем:


# vim /etc/ssh/sshd_config

И, приводим к виду:


UseLogin yes

И выполняем рестарт:


# reboot

У меня все! Статья «Увеличить Max Open File Limit в Unix/Linux», завершено.


Добавить комментарий

Автору будет очень приятно получить обратную связь.

Комментариев 0