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


27

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

Відповіді:


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                    

Це правила! Не мав уявлення, ти можеш записати у файл обмежень.
clee

4
не працює для мене на ubuntu 12.04
Poma

5
Це не працює на моєму ядрі 3.2 . Я думаю, що ваш розповсюдження має специфічний неофіційний патч для цього, тому що я не бачу слідів цього патча в fs / 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)сторінках керівництва .


2
+1 за мінімалістичну версію на сторінці сайту!
Тотор

Попередження: "memcached" буде по умолчанню, якщо ви змінили "nolimit" на його процесі після того, як виявили обмеження. Не завжди гарна ідея використовувати ліміти для запису
Іван


2

Ви можете спробувати ulimit man ulimitза допомогою параметра -n, однак маг-сторінка не в більшості ОС не дозволяє встановити це.

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

Однак я б також запропонував переглянути процес, щоб побачити, чи дійсно потрібно мати стільки файлів, що відкриваються в даний момент часу, і якщо ви насправді можете закрити деякі файли та бути ефективнішими в цьому процесі.


Справа з відкритим файлом - це помилка, але я не зміг її зрозуміти. Хоча я хотів би це зробити, виробництво періодично припиняється в середині дня.
kāgii

ulimitне застосовує налаштування до запущених процесів .
пробуй-нарешті

0

Процес може змінити свої власні м'які межі, якщо запрограмований на це (або якщо вам вдасться його зламати), але він не може підняти свої жорсткі межі, якщо він не має можливості CAP_SYS_RESOURCE. Ви можете перевірити обмеження під час виконання в /proc/$pid/limits.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.