Frage Legen Sie die maximale Dateigröße für einen laufenden Prozess fest


Ich habe einen langwierigen Prozess, der schließlich das maximale Limit für offene Dateien erreichen wird. Ich weiß, wie ich das ändern kann, nachdem es fehlgeschlagen ist, aber gibt es eine Möglichkeit, das für den laufenden Prozess von der Befehlszeile aus zu ändern?


25
2017-11-12 15:45


Ursprung




Antworten:


Auf neueren Kernel (2.6.32+) auf CentOS / RHEL können Sie dies zur Laufzeit mit / proc / <pid> / limits ändern:

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                    

24
2017-12-08 14:55



Das herrscht! Hätte keine Ahnung, dass du in die Limit-Datei schreiben könntest. - clee
funktioniert nicht für mich auf Ubuntu 12.04 - Poma
Dies funktioniert nicht auf meinem 3.2 Kernel. Ich denke, Ihre Distribution hat einen speziellen inoffiziellen Patch dafür, weil ich keine Spur davon sehe dieser Patch im Kernel fs / proc / base.c. - Totor
Könnte sein ... Ich weiß, dass es in RHEL / CentOS-Kernel vorhanden ist. Es scheint nicht in Debian-Kernel vorhanden zu sein. - Sig-IO
"setprlimit" ist der zukunftssichere und empfohlene Weg, siehe nächste Antwort - Sig-IO


Wie dokumentiert Hier, das prlimit Mit dem mit util-linux 2.21 eingeführten Kommando können Sie die Grenzen laufender Prozesse lesen und ändern.

Dies ist eine Fortsetzung des Schreibbaren /proc/<pid>/limits, die nicht in Mainline-Kernel integriert war. Diese Lösung sollte funktionieren.

Wenn Sie nicht haben prlimit(1) Dennoch können Sie den Code zu einer minimalistischen Version in der finden prlimit(2) Manpage.


22
2017-09-03 14:54



+1 für die minimalistische Version in der Manpage! - Totor


Sie können ulimit versuchen man ulimit mit der Option -n aber die Mag-Seite nicht die meisten Betriebssysteme erlauben dies nicht zu setzen.

Sie können ein systemweites Dateibeschreibungslimit mit verwenden sysctl -w fs.file-max=N und machen Sie die Änderungen nach dem Start in /etc/sysctl.conf

Ich schlage aber auch vor, den Prozess zu prüfen, ob wirklich so viele Dateien zu einem bestimmten Zeitpunkt geöffnet sein müssen, und ob Sie tatsächlich einige Dateien schließen und effizienter arbeiten können.


2
2017-11-12 15:54



Die offene Datei ist ein Fehler, aber ich konnte es nicht herausfinden. Während ich das gerne machen würde, stürzt die Produktion in der Mitte des Tages regelmäßig ab. - kāgii
ulimit wendet Einstellungen nicht auf an Laufende Prozesse. - try-catch-finally


Bei neueren Versionen von util-linux-ng können Sie den Befehl prlimit verwenden. Weitere Informationen finden Sie in diesem Link https://superuser.com/questions/404239/setting-ulimit-on-a-running-process


2
2017-09-03 15:44





Der Prozess könnte seine eigenen weichen Grenzen ändern, wenn er dazu programmiert wird (oder wenn Sie es schaffen, ihn zu hacken), aber er kann seine harten Grenzen nicht erhöhen, wenn er nicht über die Fähigkeit CAP_SYS_RESOURCE verfügt. Sie können die Grenzen zur Laufzeit in überprüfen /proc/$pid/limits .


0
2017-11-12 23:41