Kann jemand erklären (oder eine Quelle kennen), die Details zu den Elementen in limits.conf enthält? Die Manpage enthält nicht viele Details.
Zum Beispiel heißt es:
rtprio
maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher)
priority
the priority to run user process with (negative values boost process priority)
Wie unterscheiden sich diese? Welche Werte können sie annehmen? Was machen sie standardmäßig?
Einige der Punkte sind offensichtlich, aber wo finde ich bessere Erklärungen (Standardwerte, Bereiche, was sie tatsächlich bedeuten usw.) von:
data
maximum data size (KB)
fsize
maximum filesize (KB)
memlock
maximum locked-in-memory address space (KB)
cpu
maximum CPU time (minutes)
nice
maximum nice priority allowed to raise to (Linux 2.6.12 and higher) values: [-20,19]
Was passiert, wenn die CPU überschritten wird? Die Prozesse werden getötet? Nur ein Prozess oder der gesamte Benutzer darf die CPU nicht verwenden? Ist dies für eine Sitzung oder für eine maximale Zeit in jeder Minute?
Ich habe versucht, Antworten zu finden, aber alles, was ich finden kann, ist die eine Manpage, die fast keine Details enthält.
Antworten:
Warum sind diese unterschiedlich?
Unter Linux gibt es verschiedene Klassen von Prozessplanern. Die Standardeinstellung (CFQ) gibt grundsätzlich jedem Prozess, der ausgeführt werden soll, die gleiche Anzahl von Zeitscheiben und stellt ausführbare Aufgaben so in die Warteschlange, dass jeder durchschnittlich die gleiche Zeit auf seinen Zug wartet. Es gibt einige Ausnahmen von dieser Regel, aber das ist die Grundidee.
Eine andere Klasse von Schedulern ist der Echtzeit-Scheduler. Echtzeit ist ein wenig anders, eher in der Warteschlange ausführbare Aufgaben in ein faires Warteschlangenschema. Der Echtzeitprozess erhält CPU-Zeit, sobald er vom Prozess benötigt wird. Dadurch wird ein laufender Prozess aus der CPU entfernt, um Platz für die Echtzeit zu schaffen ' Prozess.
Welche Werte können sie annehmen?
Was 'Priorität' bewirkt, ist, die Freundlichkeit des Prozesses so zu ändern, dass Ihr Hauptprozess beim Anmelden mit einer bestimmten Freundlichkeit beginnt. Alle untergeordneten Prozesse, die Sie erzeugen, beginnen ebenfalls mit der gleichen Schönheit.
Dies hat den Effekt, dass es wahrscheinlicher ist, dass es zugunsten anderer konkurrierender Prozesse geplant wird, und dass die Benutzererfahrung entweder reaktionsfähiger / interaktiver für die niedrigeren Nizza-Werte und weniger reaktionsschnell / interaktiv ist, wenn die Nizza erhöht wird.
Es kann wichtig sein, dass normale Anmeldebenutzer eine niedrigere Priorität haben als beispielsweise wartungsfähige Daemons, oder dass root bei der Anmeldung eine höhere Priorität hat als alles andere.
In Echtzeit werden Konflikte mit dem Feld 'rtprio' behandelt. Wenn Sie zwei Echtzeitaufgaben haben, die beide ausgeführt werden sollen, wird der Wert 'rtprio' verwendet, um zu bestimmen, welcher der Prozesse zuerst als Priorität ausgewählt werden soll. Ein höheres RTPRIO erzeugt Aufgaben mit höherer Priorität.
Wenn Sie dies in der Datei "limits.conf" festlegen, können Echtzeitaufgaben mit einem bestimmten Prioritätsbereich festgelegt werden, ohne dass root zum Festlegen des Werts erforderlich ist. Dies hat keine Auswirkungen auf Aufgaben, die nicht mit einem Echtzeitplaner ausgeführt werden sollen.
Der 'nice'-Wert sollte dasselbe wie' rtprio 'tun, jedoch für die Standard-CFQ-Planung. Ich habe es aber nie versucht. Es setzt den anfänglichen Prozess, der erzeugt wird, wenn PAM diese Grenzwerte auf dieses nette Vaule setzt. Ein normaler Benutzer kann dann zu diesem netten Level oder höher gehen, ohne dass root benötigt wird, um sie festzulegen. Wenn Sie nicht explizit erneuern, bedeutet dies, dass alle Prozesse, die aus einer Shell aus dieser Anmeldung (z. B.) hervorgegangen sind, den in der Datei "limits.conf" festgelegten netten Wert des übergeordneten Prozesses erben, der ursprünglich erstellt wurde.
Was sind die Standardeinstellungen?
Die 'Standard'-Grenzwerte - technisch gesehen werden alle auf die PID 1 festgelegt, sofern nicht explizit festgelegt. Ressourcenlimits werden vom übergeordneten Prozess geerbt. Wenn an keiner Stelle Grenzwerte definiert oder überschrieben wurden, ist die Vererbung von
init
der Standardwert.Andere Werte
Wenn ein Prozess initialisiert wird, weist er einen Speicher zu, der als "Datensegment" bezeichnet wird, wenn der Prozess in den Speicher kopiert wird. Hier befindet sich der Speicherplatz für Globals, möglicherweise einige andere initialisierte Daten und Speicher, die vom Heap zugewiesen werden. Das Limit steuert den maximal zugewiesenen Betrag, den ein Prozess aufnehmen kann.
Es ist unwahrscheinlich, dass Sie jemals dieses Limit erreichen, da malloc () das Datensegment zum Speichern von Daten selten überbeansprucht.
Dies legt buchstäblich nur die maximale Größe fest, in die eine Datei wie bei diesem Benutzer geschrieben werden kann.
Fast der gesamte Speicher, den eine Anwendung erworben hat, ist "räumbar". Das kann ausgetauscht werden. Speicher gesperrt Speicher ist nie austauschbar und bleibt resident. Dieser Wert wird streng kontrolliert, da er von Menschen missbraucht werden kann, um ein Speichersystem zu verhungern und einen Austausch zu verursachen. Dies ist normalerweise bei Sicherheitsanwendungen hilfreich (bei denen die Seiten niemals ausgetauscht werden sollen - und die von der Auslagerungspartition aus lesbar werden).
Dies gibt die Gesamtzeit an, die ein Prozess auf einer CPU verbrauchen kann. Ein Prozess, der diesen Wert überschreitet, wird beendet. Beachten Sie, dass dies NICHT der Zeit entspricht, die seit dem Start des Prozesses vergangen ist. IE eine Cputime-Grenze von 1 Minute würde 1 Minute dauern, wenn der Prozess 100% CPU-Auslastung hatte, aber 2 Minuten, wenn der Prozess 50% Auslastung verwendet.
Was passiert, wenn die CPU überschritten wird?
Der Prozess erhält ein Kill-Signal,
SIGXCPU
das den Prozess beendet. Dies kann dann vom übergeordneten Prozess abgefangen und dort behandelt werden.Nur ein Prozess oder der gesamte Benutzer kann die CPU nicht verwenden?
Nahezu alle angegebenen Grenzwerte werden pro Prozess behandelt. CPU-Zeit enthalten. Die einzigen, von denen ich glaube , dass sie nicht die Gesamtzahl der Anmeldungen und die Gesamtzahl der Prozesse dieses Benutzers sind.
Einige andere Probleme mit Grenzen sind:
quelle
Dies ist für das
pam_limits
Modul ... es istsetrlimit(2)
undsysctl(8)
Werte. Meine Suche hat keine harten Grenzen aufgedeckt, aber die zitierten Manpages geben einige Erklärungen.quelle
Schnelle Antworten sind nette Antworten.
schedtool -r
; undulimit -a
.Vergessen Sie nicht, sowohl die weichen als auch die harten Grenzen festzulegen, auch wenn sie den gleichen Wert haben würden. In meinen Tests war dies das einzige, was einen Unterschied im Befehl ulimit zeigen würde.
Hoffe das hilft dir.
quelle