Установить максимальный лимит файлов на работающий процесс

У меня длительный процесс, который в конечном итоге достигнет максимального предела количества открытых файлов. Я знаю, как это изменить после сбоя, но есть ли способ изменить это для запущенного процесса из командной строки?

5 ответов

Как задокументировано здесь, prlimit Команда, введенная в util-linux 2.21, позволяет читать и изменять пределы запущенных процессов.

Это продолжение к записи /proc/<pid>/limits, который не был интегрирован в основное ядро. Это решение должно работать.

Если у вас нет prlimit(1) тем не менее, вы можете найти код минималистичной версии в prlimit(2) man-страница.

В более новых ядрах (2.6.32+) в CentOS/RHEL вы можете изменить это во время выполнения с помощью / proc // limit:

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,

Другие вопросы по тегам