Ich habe zwei CentOS 5-Server mit nahezu identischen Spezifikationen. Wenn ich mich anmelde und tue ulimit -u
, bekomme ich auf einem Computer unlimited
und auf dem anderen 77824
.
Wenn ich einen Cron laufen lasse wie:
* * * * * ulimit -u > ulimit.txt
Ich erhalte die gleichen Ergebnisse ( unlimited
, 77824
).
Ich versuche festzustellen, wo diese eingestellt sind, damit ich sie ändern kann. Sie sind nicht in jedem meiner Profile eingestellt ( .bashrc
, /etc/profile
usw.). Diese würden sowieso nicht cron betreffen) oder in /etc/security/limits.conf
(was leer ist).
Ich habe Google durchsucht und bin sogar so weit gegangen grep -Ir 77824 /
, aber es ist noch nichts aufgetaucht. Ich verstehe nicht, wie diese Maschinen mit unterschiedlichen Grenzwerten voreingestellt worden sein könnten.
Ich frage mich eigentlich nicht für diese Maschinen, sondern für eine andere (CentOS 6) Maschine, die ein Limit von hat 1024
, das viel zu klein ist. Ich muss Cron-Jobs mit einem höheren Limit ausführen und die einzige Möglichkeit, wie ich dies festlegen kann, ist der Cron-Job selbst. Das ist in Ordnung, aber ich würde es lieber systemweit einstellen, damit es nicht so abgedreht ist.
Vielen Dank für jede Hilfe. Dies scheint einfach zu sein (NICHT).
EDIT - Gelöst
Ok, ich habe das herausgefunden. Es scheint ein Problem mit CentOS 6 oder vielleicht meiner Maschinenkonfiguration zu sein. In der CentOS 5-Konfiguration kann ich Folgendes einstellen /etc/security/limits.conf
:
* - nproc unlimited
und das würde effektiv die Konten und Cron-Limits aktualisieren. Dies funktioniert jedoch in meiner CentOS 6-Box nicht. Stattdessen muss ich Folgendes tun:
myname1 - nproc unlimited
myname2 - nproc unlimited
...
Und die Dinge funktionieren wie erwartet. Möglicherweise funktioniert die UID-Angabe auch, aber der Platzhalter (*) ist hier definitiv NICHT vorhanden. Seltsamerweise funktionieren Platzhalter für das nofile
Limit.
Ich würde immer noch gerne wissen, woher die Standardwerte tatsächlich stammen, da diese Datei standardmäßig leer ist und ich nicht sehen konnte, warum ich für die beiden CentOS-Boxen, die identische Hardware hatten und vom selben Anbieter stammten, unterschiedliche Standardwerte hatte .
/etc/security/limits.d/
?Antworten:
Diese "Standard" -Limits werden angewendet von:
init
Prozess),fork(2)
Zeitpunkt),setrlimit(2)
).Normale Benutzerprozesse können keine harten Grenzen setzen.
Der Linux-Kernel
Beim Booten legt Linux Standardlimits für den
init
Prozess fest, die dann von allen anderen (untergeordneten) Prozessen geerbt werden. Um zu sehen, diese Grenzen:cat /proc/1/limits
.Der Kernel-Standard für die maximale Anzahl von Dateideskriptoren (
ulimit -n
) war beispielsweise 1024/1024 (soft, hard) und wurde in Linux 2.6.39 auf 1024/4096 angehoben.Die standardmäßige maximale Anzahl von Prozessen, über die Sie sprechen, ist auf ungefähr begrenzt:
für x86 - Architekturen (zumindest), aber manchmal Verteilungen Standardkernel Werte ändern, so überprüfen Sie die Kernel - Quellcode für
kernel/fork.c
,fork_init()
. Das Limit "Anzahl Prozesse" heißt dort RLIMIT_NPROC.PAM
In der Regel wird PAM zusammen mit einigen Modulen verwendet, um die Benutzerauthentifizierung bei der Anmeldung sicherzustellen (siehe
/etc/pam.d/login
).Unter Debian ist die PAM - Modul für Limite hier:
/lib/security/pam_limits.so
.Diese Bibliothek liest ihre Konfiguration aus
/etc/security/limits.conf
und/etc/security/limits.d/*.conf
, aber auch wenn diese Dateien leer sind, verwendet pam_limits.so möglicherweise fest codierte Werte , die Sie im Quellcode überprüfen können.Unter Debian wurde die Bibliothek beispielsweise so gepatcht , dass die maximale Anzahl von Prozessen (
nproc
) standardmäßig unbegrenzt ist und die maximale Anzahl von Dateien (nofile
) 1024/1024 beträgt:So überprüfen Sie Ihren CentOS‘PAM - Modul Quellcode (Look für RLIMIT_NPROC).
Beachten Sie jedoch, dass viele Prozesse PAM nicht durchlaufen (normalerweise, wenn sie nicht von einem angemeldeten Benutzer gestartet werden, z. B. Daemons und möglicherweise Cron-Jobs).
quelle
/etc/initscript
"einen bequemen Ort zum Anpassen der Prozessgrenzen" bietet und über konfiguriert werden kann/etc/sysconfig/ulimit
./proc/1/limits
) seit Version 1.1.4 (veröffentlicht 2011) festgelegten Grenzwerte.Auf RHEL6 (CentOS6) ist "max user process " standardmäßig auf 1024 eingestellt.
Sie können diesen Wert in der Datei ändern:
Siehe https://bugzilla.redhat.com/show_bug.cgi?id=432903, wenn Sie sich darüber beschweren möchten :)
quelle
Haben Sie bei der Überprüfung der Grenzwerte den Root-Benutzer verwendet?
Aus der
limits.conf
Manpage:Die Verwendung expliziter Benutzernamen würde das Problem in diesem Fall beheben.
quelle
limits.conf
Datei leer (alslimits.d
Verzeichnis).Info dazu ist im Internet furchtbar, hier ist eine limits.conf-Datei, die ich für Debian Linux erstellt habe und die alle möglichen Optionen und ihre maximalen "sicheren" Grenzen anzeigt.
Dies sind die höchsten Werte, die Sie festlegen können. Einige Dinge sind durchgestrichen. Wenn Sie diese aktivieren, treten Fehler auf, und Sie können sich nicht bei Ihrer Konsole anmelden. Sie können die auskommentierten Optionen auf eigenes Risiko ändern. Dies sollte jedoch nicht erforderlich sein auf den meisten)
Ich hoffe, dies ist nützlich für jemanden, da ich diese Informationen nirgendwo finden konnte, es gibt 4 Stunden Recherche in dieser Datei.
quelle
kernel / fork.c
Bei 64-Bit-Thread beträgt die Größe 8192
Jetzt bekomme ich die Summe in kb geteilt durch 4
Jetzt habe ich die Anzahl der Seiten
Das Endergebnis ist
Auf diese Weise erhalten Sie den Parameter thread-max und das Standard-Benutzerprozesslimit beträgt die Hälfte
ulimit von root
quelle
Es scheint /etc/security/limits.conf zu sein
http://ss64.com/bash/limits.conf.html
quelle
Es gibt eine weitere Möglichkeit, dass die Konfiguration für "noproc" während der Konfiguration in /etc/security/limits.conf nicht funktioniert.
Es gibt eine weitere Datei, die Ihre Konfiguration /etc/security/limits.d/90-nproc.conf überschreibt.
Hier setzt * config alles außer Kraft, was Sie in der vorherigen Konfigurationsdatei festgelegt haben. Idealerweise konfigurieren Sie Ihre Einstellung in dieser Datei.
quelle