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

Возможно ли увеличить рабочий параметр Max Max для рабочего процесса? Я имею в виду этот параметр:

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

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

Ответ 1

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

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

Ответ 2

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

prlimit -n4096 -p pid_of_process

Ответ 3

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

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

Ответ 4

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

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

$ sysctl -w fs.file-max = 100000

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

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

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

ulimit -Sa
ulimit -Ha

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

Ответ 8

В 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

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

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

Полезный пост: https://medium.com/@muhammadtriwibowo/set-permanently-ulimit-n-open-files-in-ubuntu-4d61064429a