Ulimit auf CentOS erhöhen

18

Wir haben eine CentOS-Box, mit der ich versuche, die maximale Anzahl von Dateien zu erhöhen, die ein Benutzer öffnen kann. Momentan wenn ich renne ulimit -Snbekomme 1024und ulimit -Hngebe ich 4096. Ich brauche diese Zahl um 6000.

Darin /etc/sysctl.confhabe ich gesetzt fs.file-max = 100000. In habe /etc/security/limits.confich folgendes eingestellt:

username soft nofile 6000
username hard nofile 65535

Ich habe mich abgemeldet und wieder angemeldet, sehe usernameaber immer noch keine Änderungen. Was brauche ich, um diesen Wert zu ändern?

Alles was ich habe /etc/security/limits.dist 90-nproc.conf. Ich habe auch sichergestellt, dass ulimit nicht in meinem .bash_profile oder .bashrc aufgerufen wird.

Beim Ausführen sysctl -pwerden die gewünschten Einstellungen ausgespuckt und der gewünschte Wert fs.file-maxangezeigt. Aber wenn ich renne ulimit -Sn, bekomme ich 1048. Wenn ich versuche zu rennen, sysctl --systembekomme ich error: Unknown parameter "--system".

tubaguy50035
quelle
Haben Sie versucht, neu zu starten? Soweit ich weiß, werden diese Einstellungen während des Systemstarts gelesen.
Kamil
Sie brauchen dafür keinen Neustart.
Xavier Lucas

Antworten:

14

Zum zwingen /etc/sysctl.confnochmal gelesen zu werden laufen sysctl -p.

Die Datei /etc/security/limits.confwird von Login-Shells gelesen und Sie sollten aktive Sitzungsfenster schließen, wenn Sie sich in der GUI befinden. Bei Remoteanmeldungen wird die erneute Anmeldung wirksam.

Xavier Lucas
quelle
1
Ran das, sieht nach einem Relog immer noch keine Veränderungen.
tubaguy50035
@ tubaguy50035 fs.file-maxist die maximale Anzahl offener Dateien auf dem System. Es ist eine harte Grenze und wird ulimitin Ihrem Fall nicht von Anrufen widergespiegelt .
Xavier Lucas
Oh ok. Sollte ich dann nicht mehr auf zu viele geöffnete Dateien stoßen?
tubaguy50035
@ tubaguy50035 Nicht verwandt. Es ist das System-Hard-Limit, das eine beliebige Anzahl in der limits.conf überschreibt. Aber noch immer gilt limits.conf. Könnten Sie versuchen, die Hard- und Soft-Limits mit ulimit direkt in einer neuen Sitzung festzulegen und festzustellen, ob Sie dieselben Maximalwerte erhalten? Etwas scheint Ihre Konfiguration zu überschreiben.
Xavier Lucas
Es heißt, der Betrieb sei nicht erlaubt. Muss ich dem Benutzer Zugriff auf etwas geben? Ich würde es vorziehen, wenn der Webbenutzer keine Root-Rechte hätte.
tubaguy50035
6

Wie in einem anderen Poster bereits erwähnt, muss sysctl den Wert im laufenden Kernel einstellen. Es gibt verschiedene Möglichkeiten, den Wert ohne Neustart festzulegen:

sysctl -p /etc/sysctl.conf
sysctl -w fs.file-max=100000
sysctl --system

IMHO ist die letzte Methode die beste, da sie die Reihenfolge reproduziert, in der die Einstellungen während des Startvorgangs angewendet werden (und daher wird es offensichtlich, wenn Sie einen Konflikt haben).

Hinweis: Ich bin mir nicht sicher, welche CentOS-Version Sie verwenden, aber zumindest unter 7 ist ein Problem aufgetreten, bei dem Dracut die initramfs aus irgendeinem Grund (z. B. bei der Installation eines neuen Kernel-Moduls) neu erstellt und kopiert den Inhalt von /etc/sysctl.* in das initramfs, das dann von systemd-sysctl in dieser Phase ausgeführt wird, auch wenn Sie diese Einträge später aus /etc/sysctl.conf löschen.

In meiner Umgebung habe ich das systemd-Dracut-Modul so bearbeitet, dass /etc/sysctl.* aus dieser Umgebung ausgeschlossen wird (da diese Einstellungen festgelegt werden, sobald das rootfs eingehängt wird und systemd-sysctl erneut ausgeführt wird). Es ist nur eine GOTCHA, auf die Sie stoßen könnten.

Boscoe
quelle
Ich bin auf CentOS 6.5. Aktualisiert auch meine Frage mit Ergebnissen von einigem davon.
tubaguy50035