Можно ли увеличить параметр "Максимум открытых файлов" для рабочего процесса? Я имею в виду этот параметр:
cat /proc/<pid>/limits | grep files
Спасибо за ваши советы
Можно ли увеличить параметр "Максимум открытых файлов" для рабочего процесса? Я имею в виду этот параметр:
cat /proc/<pid>/limits | grep files
Спасибо за ваши советы
Как системный администратор: файл /etc/security/limits.conf
управляет этим на большинстве установок Linux; это позволяет вам устанавливать ограничения для каждого пользователя. Вам понадобится строка вроде myuser - nofile 1000
.
В рамках процесса: вызовы getrlimit и setrlimit контролировать большинство лимитов выделения ресурсов для каждого процесса. RLIMIT_NOFILE
управляет максимальным количеством файловых дескрипторов. Вам потребуются соответствующие разрешения, чтобы вызвать его.
limits.conf
не учитывается, и вы должны установить DefaultLimitNOFILE
в /etc/systemd/system.conf
и user.conf
.
- person Xdg; 19.02.2018
Другой вариант — использовать команду prlimit (из пакета util-linux). Например, если вы хотите установить максимальное количество открытых файлов для запущенного процесса на 4096:
prlimit -n4096 -p pid_of_process
Вы можете использовать gdb, взломать процесс, вызвать вышеупомянутые системные вызовы, чтобы поднять интересующий вас лимит, затем продолжить работу и выйти из gdb. Я редактировал вещи на лету таким образом несколько раз.
Ваше приложение не будет отключено, а просто остановится на момент, пока вы выполняете вызов. если вы быстры (или написали сценарий!), это, скорее всего, не будет заметно.
prlimit
- person Mircea Vutcovici; 14.06.2016
echo -n "Max open files=20:20" > /proc/$pid/limits
... работает в RHEL5.5 и RHEL6.7.
Обратите внимание, что «-n» является обязательным; завершающая новая строка будет генерировать жалобу на недопустимые аргументы.
По этой ссылке подробно описано, как изменить это для всей системы или для каждого пользователя.
Многим приложениям, таким как база данных Oracle или веб-сервер Apache, требуется более высокий диапазон. Таким образом, вы можете увеличить максимальное количество открытых файлов, установив новое значение в переменной ядра /proc/sys/fs/file-max следующим образом (войдите в систему как root):
$ sysctl -w fs.file-max=100000
Вам нужно отредактировать файл /etc/sysctl.conf и добавить следующую строку, чтобы после перезагрузки настройка осталась прежней
Да, можно увеличить лимиты в /proc/<pid>/limits
во время выполнения. Просто найдите pid и выполните следующую команду:
echo -n "Max open files=20:20" > /proc/$pid/limits
Следующие команды дают максимальное количество открытых файлов на процесс, допустимое по умолчанию (мягкое и жесткое соответственно):
ulimit -Sa
ulimit -Ha
Вы можете использовать программу или команду для изменения этих ограничений. Посмотрите на ulimit (мужской ulimit).
В Ubuntu 16.04 с запущенным процессом rethinkdb ни одно из этих решений не сработало.
Я продолжал получать error: accept() failed: Too many open files.
Что в конечном итоге сработало, так это в моем файле /etc/security/limits.conf
. Обратите внимание на nproc в дополнение к nofile. Я так понимаю, root нужно указывать отдельно.
* 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