Назад | Перейти на главную страницу

Установить максимальный предел файла для запущенного процесса

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

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

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

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

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

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 вы можете использовать команду ulimit, для получения дополнительной информации прочтите эту ссылку 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 .