Hallo,
es gibt offensichtlich ein paar Bugs, die die Computernutzung unmöglich machen und mich schon seit einiger Zeit fertig machen. Inzwischen ist es soweit, dass ich ernsthaft an der Tauglichkeit von Linux als OS für den produktiven Einsatz zweifel - und das trotz vielen Jahren ausschließlicher Nutzung. Worum geht es?
Es begann vor einigen Jahren mit einem Update, ich glaube das war 2010. Danach änderte sich etwas grundlegend darin, wie Linux bzw. Ubuntu mit IO-Zugriffen umging. Auf einmal lasteten relativ simple Leseoperationen das System viel mehr aus. Tatsächlich soweit, dass sogar Downloads mit 10 MB/s deutlich merkbare Last erzeugten. Es wurde dann nach weiteren Updates einen Tick besser, aber nie wie zuvor. Gleichzeitg kam etwas weiteres: Amoklaufende Swap-Prozesse. Wird der Speicher knapp fängt Linux an Daten auszulagern. Das ist soweit ja richtig. Nur leider sorgte es dafür, dass das System völlig einfror und das über längere Zeit. Ich rede hierbei durchaus von Stunden, kein Scherz. Nun dachte ich damals noch, dass es eventuell an der Hardware liegen könnte, die war nicht mehr die neuste. Inzwischen habe ich das Verhalten auf mehreren verschiedenen Rechnern beobachten können, auch völlig neuen. Egal, ob frisch installiert oder nicht. Es ist auch kein Ubuntuproblem, es tritt ebenso bei Debian auf, 32- und 64 bit. Nicht jedoch bei älteren Versionen mit älterem Kernel, Ubuntu 8.04 hatte das Problem zum Beispiel nie.
Genauere Beschreibung anhand eines Beispielrechners:
Ich nehme als Beispiel mal meinen Laptop, etwa 9 Monate alt, Hardware völlig in Ordnung. Zur stehen etwa 3,5 GB RAM, nochmal das gleiche als Swap in einer extra Partition. Swap ist nötig, da einige genutzte Programm recht verschwenderisch mit dem Speicher umgehen (sogar google chrome frisst mit mehreren Tabs locker 2 GB) und es sonst eng wird.
Nun gibt es ein recht willkürliches Swap-verhalten. Aktuell sind zb 61% des RAMs belegt, dazu kommt noch 27% Cache. Swap wird gar nicht genutzt. Die RAM-Nutzung kann ohne weiteres auf 99% hochgehen, ohne dass der Swap auch nur angefasst wird. Gelegentlich aber, auch wenn deutlich weniger belegt ist, fängt es an auszulagern. swapd frisst laut iotop 99% IO-Kapazität, die Systemlast kriegt werte jenseits der 20 und das ganze System friert ein. Statt also nach und nach zu swappen haut es irgendwann auf einmal alles raus. Dabei geht die Last des Systems so hoch, dass es zu Instablilitäten fährt und einige Programme abstürzen. Auch Kernelmodule können betroffen sein, so muss ich danach regelmäßig psmouse neu laden. Die Festplatte rattert wie blöde. Selbst Zugriffe via SSH auf den betroffenen Rechner sind kaum mehr möglich (Zeitüberschreitungen). Das ganze dauert mehrere Minuten, bis hin zu Stunden. Am Laptop oftmals eine halbe Stunde. In der Zeit werden manchmal nur ein paar hundert MB ausgelagert. Soweit ich beobachten konnte mach swapd dabei folgendes:
Radikal ausswappen, bis hin zu wenigen zig MB RAM-Nutzung. Nachdem fast alles im Swap ist, läuft der Prozess umgekehrt und es wird wieder von Swap zu ram verlagert. Beobachten konnte ich, dass es am Ende dazu führt, dass bei beiden Speichern das gleiche prozentuale Verhältnis besteht (auch wenn der Swap deutlich kleiner ist von der absoluten Größe), z.b. 60% zu 60%. Das ist schön, geht aber total an der Praxistauglichkeit vorbei. Nicht nachvollziehbar ist, wieso das System über 30min einfriert für ein paar MB. Selbst ganze DVD kann ich in einem Bruchteil der Zeit auf die Platte schreiben. Ich vermute, dass swapd irgendwie auf der Platte seltsame Verschiebeopertationen durchführt. Vllt zum optimieren des Cache? Bringt nur nichts, wenn dadurch das System unbenutztbar.
Es kam vor, dass das ganze jede 1/4h vorkame. Damit ist ein Rechner absolut unbenutzbar. Bewusst auslösbar ist es im Regelbetrieb nicht - mit einer Ausnahme (siehe folgender Absatz). Auch Swapiness ändert übrigens nichts daran. Eventuell der Zeitpunkt des Amoklaufens ändert sich, nicht jedoch das Verhalten an sich.
Zu 80-90% Prozent kann man es mit folgendem Auslösen: Standby. Egal wie lange. Geht der Rechner auch nur 1 Sekunde in den Standby geht es nach dem Aufwachen los (meist sofort, manchmal nach ein paar Sekunden). Es scheint, als würde der Kernel denken, dass der gesamte RAM nun seit Jaaaahren nicht genutzt wurde und daher ALLES ausgelagert werden müsste. Das sorgte heute zb dazu, dass der Rechner solange hing, bis er wieder in den Standby ging, da er dachte, dass seit über 30min keine Nutzereingabe erfolgte.
Ich habe im übrigen das Gefühl, das sogar der Cache ausgelagert wird, was total absurd wäre.
Mir ist zwischenzeitlich bekannt, dass auch andere Nutzer davon betroffen sind. Meist zum Glück nicht so häufig. Man findet auch verzweifelte Beiträge mit google, leider ohne hilfreiche Antworten. Das Problem ist nicht, dass der Swap oder RAM voll ist. Gerade nach Standby kann locker noch 40% vorhanden sein des RAMs und der Swap wird nur um 200MB von 3500 MB gefüllt. Manchmal war es so schlimm, dass nur ein radikales Ausschalten (Dauerdrücken auf Power) half. Immerhin muss ich arbeiten und kann nicht immer eine Stunde Däumchen drehen. Ein Neustart des Systems inkl. aller Programme klappt in unter 5min. Da das swappen ohnehin zu Instabilität führt ist ein Datenverlust leider so oder so die Folge.
Ein paar Speichernutzungs-Werte nach Swapping:
Hier wurden 900 MB geswappt. Das System fror ein. Nachdem es wieder lief konnte ich uptime aufrufen:
uptime 17:44:46 up 4 days, 1:04, 1 user, load average: 6.41, 13.71, 8.81 free -m total used free shared buffers cached Mem: 3556 1371 2185 0 24 306 -/+ buffers/cache: 1039 2516 Swap: 2047 907 1140
Hier hing der Laptop 40min lang ohne zu reagieren. Danach folgendes Bild:
uptime 21:54:09 up 2 days, 4:40, 1 user, load average: 24.04, 38.15, 34.58 free total used free shared buffers cached Mem: 3641440 2071620 1569820 0 15780 279516 -/+ buffers/cache: 1776324 1865116 Swap: 2097148 1595524 501624
Im Anschluss arbeitete swapd noch weiter bis zu diesem Stand
total used free shared buffers cached Mem: 3641440 3069340 572100 0 41156 751736 -/+ buffers/cache: 2276448 1364992 Swap: 2097148 1305136 792012
Man beachte, wie sich die Nutzung des RAMs wider vergrößerte und der Swap dafür kleiner wurde. Das ist genau das gemeinte Phänomen: Erst auslagern, dann wieder einlesen.
Ein anderes mal:
total used free shared buffers cached Mem: 3641440 1215284 2426156 0 4156 221568 -/+ buffers/cache: 989560 2651880 Swap: 2097148 848216 1248932
Hier zu beachten, dass nur 1/3 des RAMs danach genutzt werden.
Hier schön zu sehen, wie es das Verhältnis anpasst: Direkt nach dem auslagern, als rechner nicht mehr eingefroren ist:
total used free shared buffers cached Mem: 3641440 1384304 2257136 0 3616 116380 -/+ buffers/cache: 1264308 2377132 Swap: 2097148 1712460 384688
Wieder deutlich mehr im Swap als im RAM. Und wieder zurück (ein paar min später):
Mem: 3641440 1616668 2024772 0 13068 220932 -/+ buffers/cache: 1382668 2258772 Swap: 2097148 1591392 505756
Ich könnte so weitermachen, habe noch deutlich mehr Aufzeichnungen, weil ich dahinter kommen wollte 😉
Weil es aber schöner ist, ein paar Bilder (Hinweis: Der Swap ist in diesen Fällen kleiner als der RAM, 50% auf beiden Seiten sind nicht gleichviel MB):
Hier sollte es swappen, macht es aber kaum (ein wenig ist im swap):
Dieses Makro ist nicht verfügbar
Hier swapt es wie doof und hängt:
Dieses Makro ist nicht verfügbar
Ich habe mir einmal die Mühe gemacht und die Speichernutzungswerte in eine Excell-Tabelle eingetragen. Nach dem Swappen ergibt sich damit folgendes Bild (siehe auch angehängte PDF):
Dieses Makro ist nicht verfügbar
Zusammenfassung des Problems:
- IO-Operationen erzeugen seit einer bestimmten Kernelversion mehr Systemlast - Swapping erfolgt ohne nachvollziehbaren Grund, vor allem nach Standby, auch wenn Programme eben erst gestarten wurden - Swapping lastet System völlig aus, einmal durch sinnlose Arbeitsschritte, einmal durch die allgemein erhöhte Last bei IO-Operationen - Swapping dauert viel zu lange und arbeitet nach unlogischem Muster
Meinetwegen könnte es sinnlos swappen, wie es will. Aber dass der Rechner für 30min hängt ist absolut untragbar. Leider muss ich sagen, dass Windows das Problem nie hatte, soweit ich mich erinnere. Ich vermute, dass eine Änderung im Kernel dafür verantwortlich ist, da es erst seit 3 Jahren so massiv auftritt und alte Versionen nicht betroffen sind (aber wer will schon mit einem 2008-Linux ohne Updates arbeiten).
Tut mir leid für den langen Text, aber vllt steigt ja trotzdem jemand durch und hat eine Idee ☺ Danke!