it-swarm.com.de

Legen Sie das maximale Dateilimit für einen laufenden Prozess fest

Ich habe einen lang laufenden Prozess, der irgendwann das maximale Limit für geöffnete 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?

29
kāgii

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

cd /proc/7671/
[[email protected] 7671]# cat limits  | grep Nice
Max Nice priority         0                    0                    
[[email protected] 7671]# echo -n "Max Nice priority=5:6" > limits
[[email protected] 7671]# cat limits  | grep Nice
Max Nice priority         5                    6                    
29
Sig-IO

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

Dies ist eine Fortsetzung des beschreibbaren /proc/<pid>/limits, Der nicht in den Mainline-Kernel integriert wurde. Diese Lösung sollte funktionieren.

Wenn Sie prlimit(1) noch nicht haben, finden Sie den Code zu einer minimalistischen Version in der Manpage prlimit(2) .

29
Sig-IO

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

4
c4f4t0r

Sie können ulimit man ulimit Mit der Option -n ausprobieren, die Mag-Seite lässt jedoch nicht zu, dass die meisten Betriebssysteme dies nicht zulassen.

Sie können mit sysctl -w fs.file-max=N Ein systemweites Limit für Dateibeschreibungen festlegen und die Änderungen nach dem Start in /etc/sysctl.conf Beibehalten.

Ich würde jedoch auch vorschlagen, sich den Prozess anzusehen, um festzustellen, ob wirklich so viele Dateien gleichzeitig geöffnet sein müssen und ob Sie tatsächlich einige Dateien schließen und dabei effizienter arbeiten können.

2
Oneiroi

Der Prozess kann seine eigenen weichen Grenzwerte ändern, wenn er dafür programmiert ist (oder wenn Sie es schaffen, ihn zu hacken), aber er kann seine harten Grenzwerte nur erhöhen, wenn er über die Funktion CAP_SYS_RESOURCE verfügt. Sie können die Grenzwerte zur Laufzeit in /proc/$pid/limits Überprüfen.

0
Tobu