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

27

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

kāgii
источник

Ответы:

28

В более новых ядрах (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                    
Sig-IO
источник
Это правила! Не знал, что вы можете написать в файл пределов.
Кли
4
не работает для меня на Ubuntu 12.04
Poma
5
Это не работает на моем ядре 3.2 . Я предполагаю , что ваш дистрибутив имеет определенный неофициальный патч для этого , потому что я не вижу никаких следов этого патча в ядре фс / Proc / base.c .
Тотор
Может быть ... Я знаю, что он присутствует в ядрах RHEL / CentOS. Похоже, он отсутствует в ядрах Debian.
Sig-IO
2
«setprlimit» - это ориентированный на будущее и рекомендуемый способ, смотрите следующий ответ
Sig-IO
26

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

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

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

Sig-IO
источник
2
+1 за минималистичную версию на man-странице!
Totor
Предупреждение: «memcached» будет зависать, если вы измените «nolimit» в его процессе после того, как он достиг предела. Не всегда хорошая идея использовать записываемые ограничения
John
2

Вы можете попробовать ulimit man ulimitс опцией -n, однако страница mag не позволяет большинству ОС не устанавливать эту настройку.

Вы можете установить общесистемный лимит описаний файлов с помощью sysctl -w fs.file-max=Nи сохранить изменения после загрузки в/etc/sysctl.conf

Тем не менее, я бы также посоветовал взглянуть на этот процесс, чтобы увидеть, действительно ли нужно открывать так много файлов в определенный момент времени, и если вы действительно можете закрыть некоторые файлы и быть более эффективными в этом процессе.

Oneiroi
источник
Открытый файл - ошибка, но я не смог понять это. В то время как я хотел бы сделать это, производство периодически падает в середине дня.
kagii
ulimitне применяет настройки к запущенным процессам .
попробуй поймай наконец
0

Процесс может изменить свои собственные мягкие ограничения, если он запрограммирован на это (или если вам удастся его взломать), но он не может повысить свои жесткие ограничения, если у него нет возможности CAP_SYS_RESOURCE. Вы можете проверить пределы во время выполнения в /proc/$pid/limits.

Tobu
источник