Hallo zusammen,
ich habe Probleme mit einem PC, der als Host für virtuelle Maschinen fungiert (per QEMU/libvirt/virsh). Hin und wieder werden die Gastsysteme extrem langsam (speziell ein Windows-Server) und lassen eine Bedienung kaum noch zu. Ich meine, auch schon die Ursache gefunden zu haben, beheben konnte ich das Problem allerdings noch nicht.
Zur Ausgangssituation: Das Hostsystem ist mit diversen SATA-Festplatten (teilweise mit Software-Raid 1), einem Intel Core i7-7700K und 32GB RAM ausgestattet. Derzeit werden zwei virtuelle Maschinen (1x Ubuntu und 1x Windows Server 2016) betrieben per KVM mit jeweils 8GB zugeteiltem Arbeitsspeicher. Auf dem Ubuntu-Gast laufen verschiedene kleinere Dienste (VPN, SVN, sehr schwach ausgelasteter Fileserver, ...) und auf dem Gast mit Windows-Server nur ein Buchhaltungsprogramm (also auch nicht sehr stark ausgelastet - vom Windows-Grundsystem mal abgesehen). Beim Starten des Ubuntu-Gastes wird scheinbar nur ein Teil der zugesicherten 8GB im Hostsystem ausgelastet, beim Windows-Server die vollen 8GB. Es sollten bei Vollauslastung also immer noch um die 16GB für den Host übrig bleiben, vielleicht etwas weniger. Soweit so gut.
Nun beobachte ich nach einiger Zeit (Tage), dass speziell das Windows-Gastsystem extrem ausgebremst wird. Auffällig ist zu der Zeit, dass der SWAP-Speicher des Host gefüllt ist und immer weiter gefüllt wird. Bisher habe ich zwecks kurzfristiger Problemlösung immer das Hostsystem und die virtuellen Maschinen neugestartet.
Gestern nun ist mir aber Folgendes aufgefallen (siehe Anhang "ram.png"): Gegen 15 Uhr habe ich begonnen, größere Dateimengen auf dem Hostsystem zu kopieren. Lt. Diagramm (mit Munin aufgezeichnet) wurde viel cache-Speicher verwendet (im Prinzip ja zunächst nicht tragisch). Der Kopiervorgang muss so gegen 18 Uhr abgeschlossen worden sein. In der Zwischenzeit brauchten die KVMs anscheinend RAM aber anstatt Cache freizugeben wurde in den SWAP-Bereich ausgelagert. Auch lange nach dem Kopiervorgang wurde der Speicher nicht wieder freigegeben sondern nur immer mehr der SWAP gefüllt. Gegen 22:30 Uhr habe ich manuell den Cache geleert (sieht man auch gut im Bild) und die virtuellen Gäste waren wieder mit der gewohnten Geschwindigkeit verfügbar. Um 2:30 Uhr dann lief ein tägliches Backup-Skript, welches wieder den RAM per Cache stark gefüllt hat.
Der Sinn das Cachings ist mir schon bewusst (komplett freier Arbeitsspeicher ist unnützer Speicher) aber es macht doch überhaupt keinen Sinn, Sachen auf Verdacht vom Hostsystem im Cache liegen zu lassen, die virtuellen Gäste aber dann nach RAM schreien und dafür dann der SWAP verwendet und auf Festplatte geschrieben wird. Im Moment zeigt der Befehl "free -m" das folgende Bild:
gesamt benutzt frei gemns. Puffer/Cache verfügbar Speicher: 31879 12942 1619 32 17318 18174 Auslagerungsspeicher: 15255 133 15122
Ganze 17GB werden im Cache gehalten und nicht freigegeben, wenn der KVM-Gast Arbeitsspeicher benötigt. Stattdessen bekommt er lahmen SWAP-Speicher auf dem Host. Ich habe gerade mal ein paar Dienste zusätzlich auf den KVMs gestartet: Der SWAP-Speicher des Host wird immer voller, der Cache bleibt gleich voll und wird nicht geleert. Das macht doch irgendwie keinen Sinn. Muss da ggf. bei der Verwaltung der virtuellen Maschinen noch bestimmte Optionen bzgl. Speichernutzung konfiguriert werden? Ich würde mich freuen, wenn mir jemand weiterhelfen könnte.
Viele Grüße sky