Ich habe einen eeePC 900a: Er hat einen 8 GB Flash als Festplatte und nur 1 GB RAM. Die darauf installierte Linux-Distribution ist ArchLinux.
Wenn das System von Speichern abläuft wird es extrem reagiert: es einige Sekunden / Minuten in Anspruch nimmt , Dinge zu tun wie zu TTY1 Schalten oder sogar den Mauszeiger zu bewegen. Manchmal sieht es so aus, als würde das System einfach einfrieren: Vor drei Jahren habe ich es in Ruhe gelassen und bis jetzt wurde überhaupt nichts geändert.
Ich würde lieber vermeiden, eine Swap-Partition / -Datei auf diesem eeePC zu erstellen, da die Festplatte bereits so klein ist und auch, weil die vielen Schreibvorgänge auf dem Swap-Platz die Lebensdauer der Flash-Karte erheblich verkürzen würden. Außerdem denke ich, dass eine Auslagerungsdatei / -partition das Problem nur verschieben würde, anstatt es definitiv zu beheben.
Soll der Kernel nicht zufällige Anwendungen beenden, wenn der Arbeitsspeicher knapp wird? Warum scheitert das (oder dauert es ewig)?
Vor ein paar Monaten / Jahren habe ich bereits versucht, dies weiter zu untersuchen, konnte aber nichts finden, was tatsächlich funktionieren würde ...
while(true){ if( $FREE_MEMORY<10MB ){ kill -9 $RANDOM_PID; } }
. Dies würde definitiv mein Problem beheben. Aber warte, soll der Kernel das nicht tun (und das weitaus besser als mein Skript)? Warum macht es seinen Job nicht?Antworten:
Es ist möglich, OOM-Killer (Out-of-Memory-Killer) direkt über die Tastaturkombination aufzurufen:
SysRq-F
Die SysRq-Taste wird normalerweise innerhalb der PrtSc-Taste auf Tastaturen kombiniert.
OOM-Killer beendet einen Prozess (-es) und das System reagiert wieder.
Thx Raman für Ratschläge zu dieser Funktion in den obigen Kommentaren.
PS: Das hat mir sehr geholfen. Ich stimme der Meinung zu, dass dies der nützlichste Hinweis zu diesem Problem ist, wenn es von Chrome oder einer speichergierigen Software verursacht wird. Aber Sie müssen bedenken, dass OOM-Killer einen wirklich wichtigen Prozess zum Erliegen bringen kann. Gehen Sie vorsichtig damit um.
quelle
PrtScn|SysRq
. Durch Drücken von wird jedochSysRq - F
nur ein ScreenshotDer natürliche Zustand ist, dass sich die Anwendungsdaten im RAM befinden und sich die Dateien auf der Festplatte befinden.
In Bezug auf die Leistung ist der Idealzustand, dass sich häufig verwendete Daten im RAM befinden und sich derzeit nicht benötigte Daten auf der Festplatte befinden.
Auf einem normalen System unternimmt der Kernel zwei Schritte, um dieses Ideal zu erreichen:
In einem typischen System ist ein erheblicher Teil des RAM für den Cache und die Puffer reserviert (50% sind typische Werte). Da RAM eine begrenzte Ressource ist, müssen möglicherweise einige Anwendungsdaten zum Auslagern verschoben werden (Auslagern ist nur erforderlich, wenn der RAM besser genutzt werden kann).
Auf einem System ohne Auslagerungsspeicher kommt es vor, dass die Anwendungsdaten fast den gesamten Arbeitsspeicher belegen, sodass kaum noch Platz für den Cache vorhanden ist. Dann ist das System wahrscheinlich langsam. Der Kernel beendet erst dann Anwendungen, wenn dies wirklich erforderlich ist. Solange Anwendungen nur 99% des verfügbaren Arbeitsspeichers ausfüllen, arbeitet das System weiter, jedoch sehr langsam, da Dateien ständig von der Festplatte geladen und neu geladen werden müssen. Wenn die gleichen Anwendungen ausgeführt werden, ist das System zu diesem Zeitpunkt mit Swap schneller.
Weitere Informationen zu diesem Thema finden Sie in dieser lkml-Diskussion und in diesem Blogbeitrag .
Ich kenne keine direkte Möglichkeit, dem Kernel mitzuteilen, eine Mindestmenge an RAM für den Festplatten-Cache zu reservieren. Sie könnten einen kleinen Teil Ihres Arbeitsspeichers als Auslagerungsspeicher einrichten , vielleicht sogar komprimiert . Es gibt Erfolgsberichte auf dieser Front , obwohl ich in Ihrem speziellen Fall keine Garantien gebe.
quelle
ld
, Sie Stück Müll), bleibt sie fast eine Minute lang hängen und wacht gerade so lange auf, bis ich die unglaublich verzögerte Maus für eine Sekunde bewegen kann oder zwei alle paar Sekunden. Das OOM-Handling von Linux ist kompletter Mist. Wenn ich Glück habe, bricht der OOM-Killer den richtigen Prozess ab, ohne die Desktop-Umgebung komplett zu vermasseln. Und ich bin ein großer Fan von Linux. Mit aktiviertem Paging ist es noch viel schlimmer. Linux-Paging ist ein Witz.Dies ist ein bekannter Fehler seit 2007 - siehe System friert bei hoher Speichernutzung ein .
In diesem Fall zeigt Windows ein Dialogfeld an, in dem der Benutzer aufgefordert wird, eine oder mehrere Anwendungen zu schließen.
quelle
Kürzlich habe ich eine Lösung für mein Problem gefunden.
Da der Linux-OOM-Killer seine Aufgabe nicht richtig erledigen kann, habe ich begonnen, einen Userspace-OOM-Killer zu verwenden: earlyoom . Es ist in C geschrieben, ziemlich konfigurierbar und es funktioniert wie ein Zauber für mich.
Ich habe auch von Alternativen gehört, wie Facebooks OOMD , die für die Ausführung auf ihren Servern entwickelt wurden, aber ich habe diese nicht ausprobiert
quelle