Wie setze ich ein Limit für die Anzahl der Dateien, die Linux geöffnet haben kann?

11

Ich plane, eine Java-App mit auszuführen nohup ... &. Das Limit muss für solche Befehle gelten.

Ricardo Altamirano
quelle
Aber dies verursachte einen Fehler in meinem Java-Programm

Antworten:

5

Die meisten Systeme verwenden PAM und haben das pam_limitsModul basierend auf Grenzwerten festgelegt /etc/security/limits.conf. Das Benutzerlimit für geöffnete Dateien wird aufgerufen nofile. Sie können es für jeden Benutzer oder für einen bestimmten Benutzer oder eine bestimmte Gruppe festlegen und ein Limit festlegen, das der Benutzer überschreiben kann (weiches Limit), und ein anderes, das nur root überschreiben kann (hartes Limit). Die Dokumentation und die limits.confManpage enthalten die Details. Um beispielsweise das Limit für alle auf 50000 zu erhöhen, geben Sie diese Zeile ein /etc/limits.conf(die Einstellung wird wirksam, wenn Sie sich anmelden):

* - nofile 50000
Gilles 'SO - hör auf böse zu sein'
quelle
3

Sie können hinzufügen fs.file-max = <your number>in /etc/sysctl.conf. Dann neu starten.

user1606
quelle
cat / proc / sys / fs / file-max ist 169203 , aber ulimit -n ist 1024
Kein Neustart erforderlich. Lauf einfach sysctl fs.file-max=123456. ( /etc/sysctl.confWird beim Booten von einem Skript gelesen, das sysctlden Inhalt aufruft .)
Gilles 'SO - hör auf böse zu sein'
2
ulimit -n

kann pro Prozess Einstellungen ändern und

/proc/sys/fs/file-max

oder die aufgerufene Variable sysctl fs.file-max kann zum Lesen und Festlegen des systemweiten Werts verwendet werden

ptman
quelle
cat / proc / sys / fs / file-max ist 169203 , aber ulimit -n ist 1024
0

Sie können ulimit dafür verwenden:

http://bloggerdigest.blogspot.com/2006/10/purpose-of-ulimit-linux-command.html

Sie sollten jedoch sicherstellen, dass das Öffnen so vieler Dateihandles unbedingt erforderlich ist, bevor Sie auf solche Anpassungen zurückgreifen. Das Erhöhen der maximalen Dateihandles, nur weil Sie vergessen haben, einen inputstream.close () in einer Schleife auszuführen, verzögert nur das zugrunde liegende Problem.


quelle
1
Ich möchte mich mit vielen Kunden verbinden
0

vi ~ / .bashrc Und fügen Sie am Ende der Datei eine Zeile hinzu

ulimit -n 169203

quelle
0

Verwenden Sie pro Programminstanz ulimit (Bash command - man bash oder ähnliche für Ihre Shell finden). Verwenden Sie keine globalen Systemlimits, wenn Sie nicht wissen, was Sie tun - mögliche DoS.

teZeriusz
quelle