У меня длительный процесс, который в конечном итоге достигнет максимального предела количества открытых файлов. Я знаю, как это изменить после сбоя, но есть ли способ изменить это для запущенного процесса из командной строки?
27
В более новых ядрах (2.6.32+) в CentOS / RHEL вы можете изменить это во время выполнения с помощью / proc / <pid> / 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
Как описано здесь ,
prlimit
команда, представленная в util-linux 2.21, позволяет вам читать и изменять пределы запущенных процессов.Это продолжение записи
/proc/<pid>/limits
, которая не была интегрирована в основное ядро. Это решение должно работать.Если у вас его еще
prlimit(1)
нет, вы можете найти код минималистичной версии наprlimit(2)
странице руководства .источник
В более новой версии util-linux-ng вы можете использовать команду prlimit, для получения дополнительной информации прочитайте эту ссылку /superuser/404239/setting-ulimit-on-a-running-process
источник
Вы можете попробовать ulimit
man ulimit
с опцией -n, однако страница mag не позволяет большинству ОС не устанавливать эту настройку.Вы можете установить общесистемный лимит описаний файлов с помощью
sysctl -w fs.file-max=N
и сохранить изменения после загрузки в/etc/sysctl.conf
Тем не менее, я бы также посоветовал взглянуть на этот процесс, чтобы увидеть, действительно ли нужно открывать так много файлов в определенный момент времени, и если вы действительно можете закрыть некоторые файлы и быть более эффективными в этом процессе.
источник
ulimit
не применяет настройки к запущенным процессам .Процесс может изменить свои собственные мягкие ограничения, если он запрограммирован на это (или если вам удастся его взломать), но он не может повысить свои жесткие ограничения, если у него нет возможности CAP_SYS_RESOURCE. Вы можете проверить пределы во время выполнения в
/proc/$pid/limits
.источник