
Also, mein System wird von DOS angegriffen, oder ich habe gerade eine ziemlich große Datei geöffnet (openstreetmaps planet.osm). Das System reagiert überhaupt nicht mehr ... so wenig, dass ich ungefähr 10 Minuten brauche, um in meine Shell zu gelangen, top auszuführen und den störenden Prozess zu beenden. Ich bin bereit, den Reset-Knopf zu drücken.
Frage: Ist es möglich, eine bestimmte Mindestmenge an Systemressourcen zu reservieren, so dass ich, wenn mein System überlastet ist, immer noch 2 % CPU (2-GHz-System ~ 40 MHz! - sollte für die Shell doch reichen, oder? Ich meine, das hat Anfang der 90er funktioniert) irgendwo reserviert habe? Oder gibt es eine Möglichkeit, störende Prozesse zu drosseln?
Ich erlebe Situationen, in denen ich mir wünsche, das Betriebssystem würde außer Kontrolle geratene Prozesse drosseln, damit ich das System weiterhin nutzen kann, selbst wenn das insgesamt einen Leistungsabfall von 10 % bedeutet. Die Möglichkeit, in solchen Situationen zu handeln, anstatt völlig hilflos zu sein, wäre ... nett.
Antwort1
Lustig, dass Sie „nett“ sagen. Eine Lösung besteht darin, den fehlerhaften Prozess „neu zu nennen“, damit er die CPU nicht übermäßig beansprucht (was im Wesentlichen die Priorität der App senkt).
So starten Sie einen Prozess mit niedrigerer Priorität:
nice <program> &
So ändern Sie die Priorität eines laufenden Prozesses:
renice 4 <program>
Die Prioritätsskala reicht von -20 bis 20. 0 ist Standard, 20 ist die niedrigste Priorität, -20 ist die höchste Priorität.
Antwort2
Sie könnten ein Skript schreiben, das nach Prozessen sucht, die auf tty0 oder ttyS0 oder wo auch immer Sie eine Root-Anmeldung mit Priorität wünschen, laufen, und diese Prozesse auf eine Echtzeitplanungspriorität setzen. Das Skript selbst sollte mit einer Echtzeitpriorität gestartet werden.
Während eines Swap-Storms auf den Speicher zuzugreifen, ist eine schwierigere Aufgabe. Sie können Linux-Cgroups verwenden. Sie können ein Programm in C statt eines Skripts schreiben und mlockall verwenden, um dessen Speicher im RAM zu sperren. Dann kann dieses Programm ptrace verwenden, um in andere Prozesse einzudringen und sie zu zwingen, mlockall aufzurufen. Sie können dies verwenden, um eine Bash-Shell zu erhalten, die nicht vom Swap betroffen ist.
Sofern Sie kein Programmierer sind oder niemanden finden, der dies bereits geschrieben hat (ich habe es nicht geschafft), sind cgroups wahrscheinlich eine einfachere Möglichkeit, hochpriorisierten Speicher zu reservieren.