Ich brauche, damit MySQL große Seiten verwendet, um ein Ulimit zu setzen - das habe ich in der limits.conf gemacht. Allerdings wird limits.conf (pam_limits.so) nicht für init eingelesen, sondern nur für "echte" Shells. Ich habe dies zuvor gelöst, indem ich der initscript-Startfunktion ein "ulimit -l" hinzufügte. Ich brauche eine Art wiederholbaren Weg, um dies zu tun, da die Boxen jetzt von Chef verwaltet werden und wir keine Datei mehr übernehmen wollen, die eigentlich im Besitz des RPM ist.
18
Antworten:
Die 4 Schritte können die Grenzen Ihres Systems sofort ändern und auch nach dem Neustart noch funktionieren. Sie können die Zahl "102400" in die Anzahl der maximal geöffneten Dateien in Ihrem Linux-System ändern, wie Sie möchten. und
sysctl-Einstellungen aus der angegebenen Datei oder /etc/sysctl.conf laden, wenn keine angegeben sind.
quelle
*
fürroot
Benutzer nicht funktioniert . Sie müssen ihnroot
explizit angeben .../etc/sysctl.conf sollte in der Lage sein, die ulimits-Elemente festzulegen. Ich konnte das nicht gut testen, aber die Umfrage besagt, dass Sie in der Lage sein sollten, anzuhalten, nachdem es in sysctl.conf eingestellt wurde.
Ich habe verschiedene Themen gefunden, die zeigen, dass es immer noch ein Problem ist, und mein Team und ich haben einige Optionen diskutiert, um dies zu beheben. Wir haben zwei mögliche Problemumgehungen gefunden.
Option 1: Die meisten Rhel-Initskripte stammen aus /etc/init.d/functions. Sie können dort die Einstellungen für ulimit ändern
Option 2: init behauptet, dass / etc / initscript jedes Mal vor dem Start von init bezogen wird (siehe http://linux.die.net/man/5/initscript) . Interessanterweise sagen sie, dass es dort ist, wo die Leute ulimit setzen können =)
quelle
Eigenständiges Rezept-Snippet basierend auf dieser URL:
Rezept Schnipsel:
quelle
Meine Lösung bestand einfach darin, dies in unserem Kochrezept zu tun:
Dies bewirkt
ulimit -l
, dass das für alle Initskripte gesetzt wird, was in einigen Umgebungen unerwünscht sein kann, aber für meine in Ordnung ist.In einer perfekten Welt würde ich das RPM so aktualisieren, dass es a enthält
/etc/sysconfig/mysqld
, und dort den gleichen Befehl ulimit -l einfügen.quelle
Ich bin mir nicht sicher, wie distro-spezifisch dies ist, aber ich habe gerade eine Erhöhung des Sicherheitslimits durch die Verwendung
/etc/security/limits.d/20-somefile.conf
in Ubuntu eingeführt.Anstatt eine vorhandene Datei ändern zu müssen, habe ich eine ERB-Vorlage in meinem Kochbuch, setze Standardattribute in einer Attributdatei und muss mich dann nicht um die Verwendung von Ruby-Blöcken mit "insert_line_if_no_match" -Stoff kümmern - das scheint etwas komplizierter und Das Rezept ist ein bisschen besser lesbar:
und dann ist dies meine vorlagendatei:
quelle
laut manpage ist ulimit veraltet. Sie müssen Setrlimit verwenden. Das Problem ist, dass es sich um einen Systemaufruf anstelle eines Bash-Befehls handelt.
Ich hatte dieses Problem mit dem Vorgesetzten und das habe ich herausgefunden. Wenn der Prozess keine Konfigurationsdatei hat, mit der Sie einen Aufruf von setrlimit () Systemaufruf tätigen können. Setzen Sie es mit ulimit in seinem /etc/init.d-Bash-Skript. Das ist das Service-Skript, das Ihren Prozess startet.
Wenn der Prozess eine Konfigurationsdatei hat, wie Supervisor d, können Sie diese Konfigurationsdatei verwenden, um die Anzahl der Dateien festzulegen, und den Prozess veranlassen, den Aufruf direkt an setrlimits () zu richten.
Supervisor: http://supervisord.org/configuration.html#supervisord-section-settings
TomcaT: http://www.jayway.com/2012/02/11/wie-wirklich-die--zu-viele-open-files-probleme-für-tomcat-in-ubuntu/ beheben
quelle
Wie in Artikel 253043 (Abonnement erforderlich) beschrieben, können Sie RedHat durch Hinzufügen entsprechender ulimit-Anweisungen ergänzen
/etc/sysconfig/<service name>
. Beispielsweise:(Verwenden Sie die vorhandene Datei für Ihren Dienst anstelle von myServiceName.)
Für Daemons, die ohne das RedHat-Skript "sysconfig" gestartet werden, müssen Sie dem Daemon-Startskript die entsprechenden ulimit-Zeilen hinzufügen.
quelle
Versuchen Sie, dies in der Datei /etc/sysctl.conf einzurichten
quelle
Ich habe tatsächlich ein privates Kochbuch geschrieben, mit dem ulimit für uns festgelegt wird und das ziemlich gut funktioniert. Für Ubuntu haben wir festgestellt, dass der folgende Trick erforderlich ist, wenn Sie eine globale ulimit-Einstellung wünschen:
Fügen Sie Ihrer gemeinsamen Sitzung Folgendes hinzu:
und in der limit.conf muss folgendes vorhanden sein:
Der Root-Teil ist wichtig, da anscheinend einige Init-Skripte ohne ihn nicht korrekt funktionieren. Wir haben also ein Kochbuch, das das Folgende aufbaut und großartig funktioniert.
Eine weitere Option, die wir für Tomcat verwendet haben, war die Bereitstellung von Tomcat und das Überschreiben des Init-Skripts mit einer benutzerdefinierten Option, für die wir das ulimit festlegen und Tomcat neu starten würden. Das funktioniert super, ist aber etwas hackiger als das erste.
Ich hoffe diese Hilfe, und vielleicht kann ich eines Tages das Kochbuch, das wir intern haben, öffnen, da es ziemlich einfach ist, aber für andere wie Sie hilfreich sein könnte.
quelle