it-swarm.com.de

Ubuntu friert bei wenig Speicher ein

Mein Ubuntu-Server hat einen Monat lang problemlos funktioniert. Aber letzte Woche hatte ich begonnen, Programme zu verwenden, die mehr Speicher benötigen. Und wenn der freie Speicher bei 100 MB liegt, friert das System vollständig ein. Ich kann nichts eingeben, den Cursor bewegen, eine Verbindung von PuTTY herstellen. Einfach nichts. Aber seltsam ist, dass die Festplatte noch funktioniert (blinkt). Ich kann dieses Problem vollständig reproduzieren und es tritt fast jedes Mal auf, wenn freier Speicher verfügbar ist 100 MB. Aber ich habe eine Auslagerungsdatei und in dieser Auslagerungsdatei ist genügend freier Speicherplatz. Hier ist mein Speicherstatus 1 Sekunde bevor er einfriert.

 Alle 1.0s kostenlos -mh Mo., 19. März 17:05:33 2018 
 
 Insgesamt verwendeter kostenloser gemeinsamer Buff/Cache verfügbar 
 Mem: 11G 10G 115M 1.2G 1,5G 115M 
 Swap: 7,9G 2,4G 5,5G 

Hier ist mein Linux-Kernel

 Linux xxx 4.15.1-041501-generic # 201802031831 SMP Sa 3. Februar 18:32:13 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 

Hier ist meine Ubuntu-Version

 Es sind keine LSB-Module verfügbar. 
 Distributor-ID: Ubuntu 
 Beschreibung: Ubuntu 17.10 
 Release: 17.10 
 Codename: artful 

Hier ist meine Konfiguration von swappines, overcommit_memory und overcommit_ratio

 vm.swappiness = 60 
 vm.overcommit_memory = 0 
 vm.overcommit_ratio = 50 

Hier ist meine Hardware-Konfiguration

 Hauptplatine: PRIME B350-PLUS 
 CPU: AMD Ryzen 7 1700 Eight-Core-Prozessor 
 RAM: 4 GB + 8 GB DDR4 
 Festplatte: Samsung 960 evo 250 GB 

Natürlich kann ich meinen Speicher auf 16 GB aufrüsten, aber ich möchte trotzdem, dass mein System stabil bleibt. Hat jemand eine Idee, was falsch sein könnte?

5
user1247373

Ich glaube, das ist die gleiche Frage wie diese, obwohl Sie Swap aktiviert haben: https://unix.stackexchange.com/q/373312/30602

Grundsätzlich entfernt der Kernel (oder kswapd0) die Codeseiten jedes aktiven Prozesses (ausführbare Seiten), um mehr RAM freizugeben. Daher muss bei jedem Kontextwechsel , wenn ein Prozess die Ausführung fortsetzt, ein neuer Lesevorgang durchgeführt werden Festplatte in den Speicher und nur dann kann es die Ausführung fortsetzen.

Dies muss so oft pro Sekunde geschehen, zusammen mit der Tatsache, dass die Festplatte viel langsamer als der Arbeitsspeicher ist, dass das Betriebssystem als einfrierend angesehen wird. Es ist, als würde RAM vorübergehend durch die Festplatte ersetzt, und das alles liegt am Kernel macht den Fehler aus ist , das auch die dateibasierten ausführbaren Seiten der laufenden Prozesse entfernt, anstatt nur die inaktiven.

Wenn Sie versuchen möchten, herauszufinden, was passiert, wenn der Kernel diese nicht entfernt, können Sie den Kernel mit this patch (siehe this question) neu kompilieren. Was passieren sollte, ist, dass das Betriebssystem jetzt nicht mehr für Minuten (oder dauerhaft), sondern für höchstens 1 Sekunde einfriert und die Festplatte kaum oder gar nicht mehr ausgelastet sein sollte.

1
Marcus Linsner