«Максимальное количество открытых файлов» для рабочего процесса - PullRequest
15 голосов
/ 17 сентября 2010

Можно ли увеличить параметр «Максимальное количество открытых файлов» для рабочего процесса? Я имею в виду этот параметр:

cat /proc/<pid>/limits | grep files

Спасибо за советы

Ответы [ 8 ]

22 голосов
/ 17 сентября 2010

Как системный администратор : файл /etc/security/limits.conf контролирует это в большинстве установок Linux; это позволяет вам устанавливать ограничения для каждого пользователя. Вы будете хотеть линию как myuser - nofile 1000.

Внутри процесса : Вызовы getrlimit и setrlimit контролируют большинство лимитов выделения ресурсов для процесса. RLIMIT_NOFILE контролирует максимальное количество дескрипторов файлов. Вам понадобятся соответствующие разрешения для его вызова.

16 голосов
/ 11 августа 2016

Другой вариант - использовать команду prlimit (из пакета util-linux). Например, если вы хотите установить максимальное количество открытых файлов для запущенного процесса равным 4096:

prlimit -n4096 -p pid_of_process

6 голосов
/ 25 июня 2013

Вы можете использовать gdb, войти в процесс, вызвать вышеупомянутые системные вызовы, чтобы поднять интересующий вас предел, а затем продолжить работу и выйти из gdb.Я несколько раз редактировал вещи «на лету».

Ваше приложение не будет закрыто, а просто остановится на время, пока вы выполняете вызов.если вы быстрые (или пишете сценарий!), это, скорее всего, будет незаметно.

5 голосов
/ 16 июня 2015

Да, можно увеличить пределы в /proc/<pid>/limits во время выполнения. Просто найдите pid и выполните следующую команду:

echo -n "Max open files=20:20" > /proc/$pid/limits
5 голосов
/ 17 сентября 2010

Эта ссылка подробно описывает, как изменить всю систему или на пользователя .

Многие приложения, такие как база данных Oracle илиВеб-сервер Apache нуждается в этом диапазоне гораздо выше.Таким образом, вы можете увеличить максимальное количество открытых файлов, установив новое значение в переменной ядра / proc / sys / fs / file-max следующим образом (войдите в систему как root):

$ sysctl -w fs.file-max = 100000

Вам необходимо отредактировать файл /etc/sysctl.conf и поставить следующую строку, чтобы после перезагрузки настройка оставалась такой же, как

4 голосов
/ 31 января 2017

Следующие команды дают максимальное количество открытых файлов на процесс, допустимое по умолчанию (мягкое и сложное соответственно):

ulimit -Sa
ulimit -Ha

Вы можете использовать программу или команду для изменения этих ограничений. Посмотрите на ulimit (человек, ulimit).

4 голосов
/ 09 февраля 2016
echo -n "Max open files=20:20" > /proc/$pid/limits

... работает в RHEL5.5 и RHEL6.7.

Обратите внимание, что "-n" является обязательным; завершающий перевод новой строки вызовет жалобу на неверные аргументы.

0 голосов
/ 27 апреля 2019

В Ubuntu 16.04 с запущенным процессом rethinkdb ни одно из этих решений не сработало.

Я продолжал получать error: accept() failed: Too many open files.

В конечном итоге это сработало в моем файле /etc/security/limits.conf. Обратите внимание на nproc в дополнение к nofile. Насколько я понимаю, рут нужно указывать отдельно.

*                soft    nofile          200000
*                hard    nofile          1048576
root             soft    nofile          200000
root             hard    nofile          1048576
*                soft    nproc           200000
*                hard    nproc           1048576
root             soft    nproc           200000
root             hard    nproc           1048576

Вы можете просмотреть системные максимальные файлы, запустив cat /proc/sys/fs/file-max. Я просто установил мой высокий максимум в пределах разумного размера сервера.

Вы можете проверить максимальное количество открытых файлов, разрешенных вашему процессу, запустив cat /proc/{your-pid}/limits.

Полезное сообщение: https://medium.com/@muhammadtriwibowo/set-permanently-ulimit-n-open-files-in-ubuntu-4d61064429a

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...