Linux /etc/security/limits.conf Erklärung

9

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.

myforwik
quelle
Die Rute ist eine hervorragende Einführung in die Linux-Administration - obwohl sie in der Datei "Limits.conf" nicht viele Details enthält, erfahren Sie, wo Sie diese Informationen finden - rute.2038bug.com/index.html.gz
symcbean

Antworten:

18
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) 

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 initder Standardwert.

Andere Werte

data 
maximum data size (KB) 

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.

fsize 
maximum filesize (KB) 

Dies legt buchstäblich nur die maximale Größe fest, in die eine Datei wie bei diesem Benutzer geschrieben werden kann.

memlock 
maximum locked-in-memory address space (KB) 

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).

cpu 
maximum CPU time (minutes) 

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, SIGXCPUdas 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:

  • Max Prozesse umfasst die Anzahl der leichten Threads.
  • Das RSS-Limit macht nichts und hat es seit einigen Jahren nicht mehr sinnlos gesetzt.
Matthew Ife
quelle
1

Dies ist für das pam_limitsModul ... es ist setrlimit(2)und sysctl(8)Werte. Meine Suche hat keine harten Grenzen aufgedeckt, aber die zitierten Manpages geben einige Erklärungen.

vonbrand
quelle
1

Schnelle Antworten sind nette Antworten.

  • Finden Sie die Min- und Max-Werte für Prioritäten mit heraus schedtool -r; und
  • Fragen Sie die aktuellen Grenzwerte mit ab ulimit -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.

Trommelfeuer
quelle