echo -n "Max open files=20:20" > /proc/$pid/limits
...funktioniert in RHEL5.5 und RHEL6.7.
Beachten Sie, dass das "-n" obligatorisch ist; ein abschließender Zeilenumbruch erzeugt eine Beschwerde über ungültige Argumente.
Eine andere Möglichkeit ist die Verwendung des Befehls prlimit (aus dem Paket util-linux). Wenn Sie beispielsweise die maximale Anzahl geöffneter Dateien für einen laufenden Prozess auf 4096 festlegen möchten:
prlimit -n4096 -p pid_of_process
Sie könnten gdb verwenden, in den Prozess einbrechen, die oben genannten Syscalls aufrufen, um das Limit zu erhöhen, an dem Sie interessiert sind, dann den Job fortsetzen und gdb beenden. Ich habe einige Male auf diese Weise spontan Dinge bearbeitet.
Ihre App wäre nicht heruntergefahren, sondern nur für den Moment eingefroren, während Sie den Anruf getätigt haben. Wenn Sie schnell sind (oder Sie es skripten!), wird es wahrscheinlich nicht auffallen.
Als Systemadministrator :Der /etc/security/limits.conf
Datei steuert dies bei den meisten Linux-Installationen; Es ermöglicht Ihnen, Limits pro Benutzer festzulegen. Sie brauchen eine Zeile wie myuser - nofile 1000
.
Innerhalb eines Prozesses :Die getrlimit- und setrlimit-Aufrufe steuern die meisten Ressourcenzuweisungsgrenzen pro Prozess. RLIMIT_NOFILE
steuert die maximale Anzahl von Dateideskriptoren. Zum Aufrufen benötigen Sie entsprechende Berechtigungen.