Ich habe einen langen Prozess, der irgendwann die maximale Anzahl offener Dateien erreichen wird. Ich weiß, wie ich das ändern kann, nachdem es fehlgeschlagen ist, aber gibt es eine Möglichkeit, dies für den laufenden Prozess über die Befehlszeile zu ändern?
27
Wie hier dokumentiert ,
prlimit
können Sie mit dem mit util-linux 2.21 eingeführten Befehl die Grenzen laufender Prozesse lesen und ändern.Dies ist ein Nachfolger des beschreibbaren
/proc/<pid>/limits
Kernels, der nicht in den Mainline-Kernel integriert wurde. Diese Lösung sollte funktionieren.Wenn Sie noch nicht haben
prlimit(1)
, können Sie den Code zu einer minimalistischen Version in derprlimit(2)
Manpage finden .quelle
In neueren Versionen von util-linux-ng können Sie den Befehl prlimit verwenden. Weitere Informationen finden Sie unter folgendem Link: https://superuser.com/questions/404239/setting-ulimit-on-a-running-process
quelle
Sie können ulimit
man ulimit
mit der Option -n versuchen, aber die Mag-Seite erlaubt es den meisten Betriebssystemen nicht, dies festzulegen .Mit können Sie eine systemweite Beschränkung für Dateibeschreibungen festlegen
sysctl -w fs.file-max=N
und die Änderungen nach dem Start in beibehalten/etc/sysctl.conf
Ich würde jedoch auch vorschlagen, den Prozess zu untersuchen, um festzustellen, ob wirklich so viele Dateien zu einem bestimmten Zeitpunkt geöffnet sein müssen und ob Sie tatsächlich einige Dateien schließen und dabei effizienter sein können.
quelle
ulimit
Wendet keine Einstellungen auf laufende Prozesse an .Der Prozess kann seine eigenen Soft-Limits ändern, wenn er dazu programmiert ist (oder wenn Sie es schaffen, ihn zu hacken), aber seine Hard-Limits können nicht erhöht werden, es sei denn, er verfügt über die CAP_SYS_RESOURCE-Funktion. Sie können die Grenzwerte zur Laufzeit in überprüfen
/proc/$pid/limits
.quelle