Максимальное количество открытых файлов для рабочего процесса

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

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

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


person wako    schedule 17.09.2010    source источник
comment
Дополнительная информация: мой процесс "java". Мне нужно увеличить «Макс. количество открытых файлов», не останавливая процесс.   -  person wako    schedule 17.09.2010


Ответы (8)


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

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

person Community    schedule 17.09.2010
comment
Кажется, это то, что мне нужно. Могу ли я установить setrlimit(RLIMIT_NOFILE,...) для какого-то внешнего процесса? - person wako; 17.09.2010
comment
Я не знаю ни одного. Если и есть, я подозреваю, что вы найдете его глубоко запрятанным в каком-нибудь руководстве по программированию для Linux, потому что я не могу понять, куда еще его поместил бы стандартный POSIX. - person ; 19.09.2010
comment
Иногда limits.conf не учитывается, и вы должны установить DefaultLimitNOFILE в /etc/systemd/system.conf и user.conf. - person Xdg; 19.02.2018

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

prlimit -n4096 -p pid_of_process

person rkachach    schedule 11.08.2016
comment
Я использую Linux Mint (на базе Ubuntu) и не могу найти его в стандартной установке. Обычно это часть пакета util-linux, но даже этот пакет на Mint не содержит этой команды. - person rkachach; 24.08.2016
comment
➜ ~ lsb_release -d Описание: Ubuntu 16.04.1 LTS ➜ ~ где prlimit prlimit: /usr/bin/prlimit /usr/share/man/man2/prlimit.2.gz /usr/share/man/man1/prlimit.1 .грамм - person t2d; 24.08.2016
comment
Не могу найти prlimit на CentOS 6. - person Arvy; 23.06.2017
comment
попробуйте установить util-linux RPM или эквивалентный пакет. - person rkachach; 23.06.2017

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

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

person lornix    schedule 25.06.2013
comment
+1 Отличное предложение, этот пост и этот блог описывает, как это сделать. - person Steve Kehlet; 09.07.2014
comment
Да, это что-то вроде настройки Матрицы, чтобы все работало... остановить мир, отредактировать переменную, продолжить мир... о! Дежавю! Я единственный! (ну когда у меня есть gdb!) - person lornix; 10.07.2014
comment
В современном дистрибутиве Linux вы можете использовать prlimit - person Mircea Vutcovici; 14.06.2016

echo -n "Max open files=20:20" > /proc/$pid/limits

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

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

person Stephen P. Schaefer    schedule 09.02.2016

По этой ссылке подробно описано, как изменить это для всей системы или для каждого пользователя.

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

$ sysctl -w fs.file-max=100000

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

person Brian Agnew    schedule 17.09.2010
comment
Спасибо за ссылку. Но я нашел его, прежде чем спрашивать :-) Но проблема в том, чтобы изменить параметр без остановки процесса (во время выполнения) и для всего процесса. - person wako; 17.09.2010
comment
@wako: это невозможно сделать извне процесса (если только вы не используете одно из самых последних ядер разработки, что маловероятно) - person caf; 17.09.2010
comment
@caf: Спасибо. Это именно то, что я хотел услышать. - person wako; 17.09.2010

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

echo -n "Max open files=20:20" > /proc/$pid/limits
person Gaurav KS    schedule 16.06.2015
comment
Не работает на Ubuntu 14.04.2 LTS. - person bronze man; 23.07.2015
comment
Недопустимый аргумент в Ubuntu 18.04 LTS. - person rdesgroppes; 14.09.2020

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

ulimit -Sa
ulimit -Ha

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

person Ravi    schedule 31.01.2017

В 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

person Nick Woodhams    schedule 27.04.2019