
Jeden Samstag kommt es auf einem meiner Server aus mir unbekannten Gründen zu einem Anstieg der Swap-Auslastung. Das ist nicht unbedingt ein Problem, da genügend freier Speicher verfügbar ist, aber ich würde trotzdem gerne wissen, was los ist.
Besonders verblüfft bin ich über eine Situation, in der der Swap-Speicher innerhalb von etwa 20 Minuten von 2 % auf 100 % ausgelastet wird. Wenn dies geschieht, scheint es jedoch keine Erhöhung der Swap-Rate zu geben. Der Server hat eine 8 GB große Swap-Partition, daher würde ich eine Auslagerungsrate von Tausenden von Seiten pro Sekunde erwarten, um den verfügbaren Speicherplatz zu füllen.
Darüber hinaus scheint es zu dem Zeitpunkt, an dem der Server ausgelagert wird, keine Spitze in der Speicherauslastung zu geben.
Kann jemand eine Erklärung für das beobachtete Verhalten geben? Der Server ist RHEL 4.8 (alt, ich weiß) mit einem 2.6.9-Kernel. Ich habe unten einige Ausgaben von sar eingefügt.
Die Swap-Auslastung steigt in etwa 20 Minuten von 2 % auf 100 %:
$ sar -r -f sa12
....
06:00:01 PM kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad
06:10:01 PM 4583856 11847032 72.10 79676 319804 8178056 207864 2.48 19816
06:20:01 PM 4720904 11709984 71.27 38840 225108 8178400 207520 2.47 19124
06:30:02 PM 4839160 11591728 70.55 1404 144948 1968152 6417768 76.53 6227068
06:40:02 PM 4827016 11603872 70.62 1640 145484 10232 8375688 99.88 8182968
06:50:02 PM 4836376 11594512 70.57 844 123304 60 8385860 100.00 8193044
07:00:01 PM 4825764 11605124 70.63 920 128108 4516 8381404 99.95 8188680
....
Hier sind die Tauschstatistiken für den gleichen Zeitraum.
$ sar -W -f sa12
....
06:00:01 PM pswpin/s pswpout/s
06:10:01 PM 0.00 0.00
06:20:01 PM 0.00 0.00
06:30:02 PM 0.68 0.00
06:40:02 PM 1.85 0.00
06:50:02 PM 5.07 0.00
07:00:01 PM 8.62 0.00
....
Antwort1
Interessante Tatsache: Die Swap-Nutzung stieg von 0 auf 8 GB ... währenddessen wurde kein einziges Byte auf die Festplatte geschrieben (SAR pswpout/s
zeigt 0 an). Ich gehe also davon aus, dass der Swap zugewiesen/reserviert, aber nicht verbraucht/verwendet wurde.
Meine beste Vermutung ist, dass Ihr Server verwendet vm.overcommit_memory=2
(lesenvm.overcommit_memory-Dokumentation,VM-Überbelegungsabrechnung). In diesem Fall wird jedes zugewiesene Byte als verwendet gezählt. [Ich habe es nicht überprüft].
Vielleicht möchten Sie auch den Thread lesenLinux: Gesamter verwendeter Swap = von Prozessen verwendeter Swap + ??.
Antwort2
Dies beantwortet Ihre Frage zwar nicht direkt, aber das folgende Skript könnte bei Ihrer Untersuchung hilfreich sein. Es zeigt Ihnen, wie viel Swap-Speicher jeder einzelne Prozess verwendet:
Finden Sie heraus, welche Prozesse Swap verwenden
Wenn Sie eine ungefähre Vorstellung davon haben, wann das Auslagern beginnt, können Sie cron so einstellen, dass dieses Skript ungefähr zu dieser Zeit ausgeführt wird.