У меня есть длительный процесс, который в конечном итоге достигнет максимального количества открытых файлов. Я знаю, как изменить это после сбоя, но есть ли способ изменить это для запущенного процесса из командной строки?
Как задокументировано Вот, то 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
.