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 jedem Prozess, der ausgeführt werden soll, im Grunde die gleiche Menge an Zeitscheiben und stellt ausführbare Aufgaben so in die Warteschlange, dass jeder im Durchschnitt gleich lange wartet, bis er an der Reihe ist. 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, vielmehr werden ausführbare Aufgaben in ein faires Warteschlangenschema eingereiht, der Echtzeitprozess erhält CPU-Zeit, sobald sie vom Prozess benötigt wird. Dadurch wird ein laufender Prozess aus der CPU entfernt, um Platz für die Echtzeit zu schaffen ' verarbeiten.
Welche Werte können sie annehmen?
Was "Priorität" tut, ist die Nettigkeit des Prozesses zu ändern, so dass beim Anmelden Ihr Hauptprozess mit einer bestimmten Nettigkeit beginnt, alle untergeordneten Prozesse, die Sie erzeugen, beginnen ebenfalls mit der gleichen Nettigkeit.
Dadurch wird es wahrscheinlicher, dass es zugunsten anderer konkurrierender Prozesse eingeplant wird, und die Benutzererfahrung kann entweder reaktionsschneller/interaktiver für die niedrigeren Nettigkeitswerte und weniger reaktionsschnell/interaktiv gemacht werden, wenn die Nettigkeit erhöht wird.
Es kann zum Beispiel wichtig sein, dass normal angemeldete Benutzer eine niedrigere Priorität als wartungsfähige Daemons haben, oder dass root beim Anmelden eine höhere Priorität hat als alles andere.
Was die Echtzeit betrifft, wird der Konflikt mit dem 'rtprio'-Feld gehandhabt. Wenn Sie zwei Echtzeitaufgaben haben, die beide ausgeführt werden sollen, wird der Wert „rtprio“ verwendet, um zu bestimmen, welcher der Prozesse zuerst für die Priorität ausgewählt wird. Ein höheres rtprio erzeugt Aufgaben mit höherer Priorität.
Wenn Sie dies in der limits.conf festlegen, können Echtzeitaufgaben auf ein bestimmtes Prioritätsbanding festgelegt werden, ohne dass root den Wert festlegen muss. Dies hat keine Auswirkungen auf Tasks, die nicht mit einem Echtzeit-Scheduler ausgeführt werden sollen.
Der 'nice'-Wert sollte dasselbe wie 'rtprio' tun, jedoch für die Standard-CFQ-Planung. Ich habe es aber nie probiert. Es setzt den anfänglichen Prozess, der gestartet wird, wenn PAM diese Grenzen auf diesen netten Wert setzt, ein normaler Benutzer kann dann zu diesem netten Level oder höher gehen, ohne root zu müssen, um sie einzustellen. Wenn Sie nicht explizit renicieren, bedeutet dies, dass alle Prozesse, die von einer Shell dieses Logins (zum Beispiel) erzeugt werden, den netten Wert erben, der in der limits.conf des ursprünglich erstellten übergeordneten Prozesses festgelegt ist.
Was sind die Standardeinstellungen?
Die 'Standard'-Limits -- technisch gesehen werden sie alle auf das gesetzt, was PID 1 ist, es sei denn, sie werden explizit gesetzt, Ressourcenlimits werden vom übergeordneten Prozess geerbt, wenn keine Limits definiert oder irgendwo außer Kraft gesetzt wurden, dann die Vererbung von init
ist die Standardeinstellung.
Andere Werte
data
maximum data size (KB)
Wenn ein Prozess initialisiert wird, weist er etwas Speicher zu, der als "Datensegment" bekannt ist, wenn der Prozess in den Speicher kopiert wird. Hier befindet sich der Platz für Globals, möglicherweise einige andere initialisierte Daten und Speicher, der vom Heap zugewiesen wird. Das Limit steuert die maximal zugewiesene Menge, die ein Prozess aufnehmen kann.
Es ist unwahrscheinlich, dass Sie diese Grenze jemals erreichen werden, 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 geschrieben werden kann, wie bei diesem Benutzer.
memlock
maximum locked-in-memory address space (KB)
Nahezu der gesamte Speicher, den eine Anwendung erworben hat, ist „evictable“. Das ist auswechselbar. Memory Locked Memory ist nie auslagerbar und bleibt resident. Dieser Wert wird streng kontrolliert, da er von Menschen missbraucht werden kann, um ein Speichersystem auszuhungern und Auslagerungen zu verursachen. Es ist normalerweise nützlich bei Sicherheitsanwendungen (die nie wollen, dass ihre Seiten ausgetauscht werden – und von der Auslagerungspartition lesbar werden).
cpu
maximum CPU time (minutes)
Dies stellt die Gesamtzeit dar, die ein Prozess auf einer CPU verbrauchen kann. Ein Prozess, der diesen Wert überschreitet, wird beendet. Beachten Sie, dass dies NICHT dasselbe ist wie die Zeit, die seit dem Start des Prozesses verstrichen ist. D. h., ein CPU-Zeitlimit von 1 Minute würde 1 Minute dauern, wenn der Prozess eine CPU-Auslastung von 100 % hätte, aber 2 Minuten, wenn dies der Fall wäre Prozess verwendet 50 % Auslastung.
Was passiert, wenn die CPU überschritten wird?
Dem Prozess wird ein Kill-Signal SIGXCPU
gesendet was den Vorgang beendet. Dies kann dann vom übergeordneten Prozess abgefangen und dort behandelt werden.
Nur ein Prozess oder der gesamte Benutzer wird von der Nutzung der CPU ausgeschlossen?
Nahezu alle angegebenen Grenzwerte werden pro Prozess behandelt. CPU-Zeit enthalten. Die einzigen, die glaube ich nicht sind die Gesamtzahl der Anmeldungen und die Gesamtzahl der Prozesse dieses Benutzers.
Einige andere Probleme mit Limits sind:
- Max. Prozesse beinhalten die Anzahl der Lightweight-Threads.
- Die RSS-Grenze bringt nichts und ist seit einigen Jahren nicht mehr sinnlos einzustellen.