Ustaw maksymalny limit plików dla uruchomionego procesu

27

Mam długi proces, który w końcu osiągnie maksymalny limit otwartych plików. Wiem, jak to zmienić po awarii, ale czy można to zmienić w uruchomionym procesie z poziomu wiersza poleceń?

kāgii
źródło

Odpowiedzi:

28

W nowszych jądrach (2.6.32+) w CentOS / RHEL możesz to zmienić w czasie wykonywania za pomocą / 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
źródło
To rządzi! Nie miałem pojęcia, że ​​możesz napisać do pliku limitów.
clee
4
nie działa dla mnie na Ubuntu 12.04
Poma
5
To nie działa na moim jądrze 3.2 . Wydaje mi się, że twoja dystrybucja ma do tego specjalną nieoficjalną łatkę, ponieważ nie widzę śladu tej łatki w pliku fs / proc / base.c jądra .
Totor,
Może być ... Wiem, że jest obecny w jądrach RHEL / CentOS. Nie wydaje się być obecny w jądrach Debiana.
Sig-IO,
2
„setprlimit” to przyszłościowy i zalecany sposób, patrz następna odpowiedź
Sig-IO,
26

Jak tu udokumentowano , prlimitpolecenie wprowadzone w util-linux 2.21 pozwala na odczyt i zmianę limitów uruchomionych procesów.

Jest to kontynuacja zapisu /proc/<pid>/limits, który nie został zintegrowany z jądrem głównym. To rozwiązanie powinno działać.

Jeśli jeszcze tego nie masz prlimit(1), możesz znaleźć kod w minimalistycznej wersji na stronie prlimit(2)podręcznika .

Sig-IO
źródło
2
+1 za minimalistyczną wersję na stronie podręcznika!
Totor
Ostrzeżenie: „memcached” ulegnie segregacji, jeśli zmienisz „nolimit” w procesie po napotkaniu limitu. Nie zawsze dobrym pomysłem jest stosowanie limitów zapisywalnych
Jan
2

Możesz wypróbować ulimit man ulimitz opcją -n, jednak strona mag nie obsługuje większości systemów operacyjnych, nie zezwala na to.

Możesz ustawić limit opisów plików dla całego systemu za pomocą sysctl -w fs.file-max=Ni sprawić, że zmiany będą się utrzymywać po uruchomieniu/etc/sysctl.conf

Sugerowałbym jednak również przyjrzenie się temu procesowi, aby zobaczyć, czy naprawdę musi on mieć tyle otwartych plików w danym momencie i czy w rzeczywistości można zamknąć niektóre pliki i zwiększyć wydajność procesu.

Oneiroi
źródło
Problem z otwartym plikiem to błąd, ale nie byłem w stanie go rozgryźć. Chociaż chciałbym to zrobić, produkcja okresowo ulega awarii w środku dnia.
kāgii,
ulimitnie stosuje ustawień do uruchomionych procesów .
try-catch-wreszcie
0

Proces może zmienić własne miękkie granice, jeśli zostanie do tego zaprogramowany (lub jeśli uda Ci się go zhakować), ale nie może podnieść twardych limitów, chyba że ma zdolność CAP_SYS_RESOURCE. Możesz sprawdzić limity w czasie wykonywania w /proc/$pid/limits.

Tobu
źródło