Установить максимальный лимит файлов на работающий процесс
У меня длительный процесс, который в конечном итоге достигнет максимального предела количества открытых файлов. Я знаю, как это изменить после сбоя, но есть ли способ изменить это для запущенного процесса из командной строки?
5 ответов
Как задокументировано здесь, prlimit
Команда, введенная в util-linux 2.21, позволяет читать и изменять пределы запущенных процессов.
Это продолжение к записи /proc/<pid>/limits
, который не был интегрирован в основное ядро. Это решение должно работать.
Если у вас нет prlimit(1)
тем не менее, вы можете найти код минималистичной версии в prlimit(2)
man-страница.
В более новых ядрах (2.6.32+) в CentOS/RHEL вы можете изменить это во время выполнения с помощью / proc /
cd /proc/7671/
[root@host 7671]# cat limits | grep nice
Max nice priority 0 0
[root@host 7671]# echo -n "Max nice priority=5:6" > limits
[root@host 7671]# cat limits | grep nice
Max nice priority 5 6
В более новой версии util-linux-ng вы можете использовать команду prlimit, для получения дополнительной информации прочитайте эту ссылку https://superuser.com/questions/404239/setting-ulimit-on-a-running-process
Вы можете попробовать ulimit man ulimit
однако, с опцией -n страница mag не позволяет большинству ОС устанавливать эту настройку.
Вы можете установить общесистемный лимит описаний файлов, используя sysctl -w fs.file-max=N
и сделать изменения сохраниться после загрузки в /etc/sysctl.conf
Тем не менее, я бы также посоветовал взглянуть на этот процесс, чтобы увидеть, действительно ли нужно открывать так много файлов в определенный момент времени, и если вы действительно можете закрыть некоторые файлы и быть более эффективными в этом процессе.
Процесс может изменить свои собственные мягкие ограничения, если запрограммирован на это (или если вам удастся его взломать), но он не может повысить свои жесткие ограничения, если у него нет возможности CAP_SYS_RESOURCE. Вы можете проверить пределы во время выполнения в /proc/$pid/limits
,