Возможно ли увеличить рабочий параметр Max Max для рабочего процесса? Я имею в виду этот параметр:
cat /proc/<pid>/limits | grep files
Спасибо за ваши советы
Возможно ли увеличить рабочий параметр Max Max для рабочего процесса? Я имею в виду этот параметр:
cat /proc/<pid>/limits | grep files
Спасибо за ваши советы
Как системный администратор: файл /etc/security/limits.conf
контролирует это на большинстве установок Linux; он позволяет устанавливать лимиты для каждого пользователя. Вам понадобится строка типа myuser - nofile 1000
.
В рамках процесса: Вызовы getrlimit и setrlimit контролируют большинство ограничений на распределение ресурсов для каждого процесса. RLIMIT_NOFILE
управляет максимальным количеством дескрипторов файлов. Для его вызова вам понадобятся соответствующие разрешения.
Другой вариант - использовать команду prlimit (из пакета util-linux). Например, если вы хотите установить максимальное количество открытых файлов для запущенного процесса равным 4096:
prlimit -n4096 -p pid_of_process
Вы можете использовать gdb, вмешаться в процесс, вызвать вышеупомянутые системные вызовы, чтобы поднять интересующий вас предел, а затем продолжить работу и выйти из gdb. Я несколько раз редактировал вещи на ходу.
Ваше приложение не будет недоступно, но будет заморожено на тот момент, когда вы выполняете вызов. если вы быстрые (или вы пишете сценарий!), это, скорее всего, не будет заметно.
Эта ссылка подробно описывает, как изменить эту систему в целом или для каждого пользователя.
Многие приложения, такие как база данных 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
echo -n "Max open files=20:20" > /proc/$pid/limits
... работает в RHEL5.5 и RHEL6.7.
Обратите внимание, что "-n" является обязательным; завершающая новая строка вызовет жалобу о недопустимых аргументах.
Следующие команды дают максимальное количество открытых файлов на каждый процесс, допустимый по умолчанию (мягкий и жесткий соответственно):
ulimit -Sa
ulimit -Ha
Вы можете использовать программу или команду для изменения этих ограничений. Посмотрите на ulimit (человек ulimit).
В 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