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ń?
27
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
Jak tu udokumentowano ,
prlimit
polecenie 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 stronieprlimit(2)
podręcznika .źródło
W nowszej wersji util-linux-ng możesz użyć polecenia prlimit, aby uzyskać więcej informacji, przeczytaj ten link /superuser/404239/setting-ulimit-on-a-running-process
źródło
Możesz wypróbować ulimit
man ulimit
z 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=N
i 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.
źródło
ulimit
nie stosuje ustawień do uruchomionych procesów .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
.źródło