Swap wird verwendet, wenn der RAM fast halb frei ist

9

Heute habe ich festgestellt, dass ich Folgendes gefunden habe:

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen, ist der RAM fast zur Hälfte frei und der Swap-Speicher ist sehr hoch. Aufgrund meiner Lehrbuchkenntnisse dachte ich immer, dass das Linux-Betriebssystem versucht, den RAM optimal zu nutzen, und wenn der RAM knapp wird, werden einige der am wenigsten genutzten Seiten vom RAM in den Swap-Bereich verschoben.

Kann mir bitte jemand erklären, ob mein theoretisches Wissen falsch ist und wie es in der Linux-Welt tatsächlich funktioniert?

pradeepchhetri
quelle

Antworten:

9

Zwar verwendet der Kernel Swap, auch wenn möglicherweise noch Speicher vorhanden ist, doch kann die Verwendung von mehr als zwei Dritteln davon ein Hinweis darauf sein, dass dem Server in der Vergangenheit möglicherweise der Arbeitsspeicher ausgegangen ist, und aus diesem Grund wurde mit dem Swap begonnen. Ich würde die Swap-Nutzung mit der Speichernutzung in den Sar-Berichten korrelieren, um abzuleiten, ob das System über genügend RAM verfügt. Ich würde auch dmesg oder die Protokolle überprüfen, um festzustellen, ob der Server tatsächlich keinen Speicher mehr hat und der Oom-Killer eingeschaltet ist.

Petter H.
quelle
6

Der Linux-Kernel beginnt, Speicherseiten auszutauschen, selbst wenn Sie genügend RAM frei haben. Sie können dieses Verhalten optimieren, indem Sie eine benutzerdefinierte Swappiness festlegen.

http://en.wikipedia.org/wiki/Swappiness

Für Server würde ich empfehlen, die Swappiness auf 1 zu setzen, wenn Sie immer genug Speicher für Ihre Workload haben. Für Workstations würde ich die Standardeinstellung 60 empfehlen.

# check the current value
cat /proc/sys/vm/swappiness
60

# swappiness = 1 (swap only if necessary)
echo 1 > /proc/sys/vm/swappiness

# or use sysctl
sysctl -w vm.swappiness=1

Machen Sie die Einstellung in /etc/sysctl.conf dauerhaft, indem Sie sie einstellen

vm.swappiness=1

und laden Sie es mit neu

sysctl -w
mgabriel
quelle
Ich würde argumentieren, dass ein Austausch von 1 die Leistung beeinträchtigen würde. Nehmen wir zum Beispiel an, Sie verwenden normal 80% des Arbeitsspeichers, sodass Sie keinen Swap verwenden, aber 20% dieses Arbeitsspeichers sind veraltete Daten, die nicht verwendet wurden. Plötzlich wird eine neue Anwendung geladen (oder die Website erhält viele Treffer). Sie haben nur noch 20% des Arbeitsspeichers, dann beginnt der Server, die Leistung stark einzuschränken. Wenn Sie eine höhere Auslagerung hätten, wären diese veralteten Seiten im RAM bereits ausgelagert worden, sodass Sie 40% freien RAM hätten, um den Anstieg der Nutzung zu bewältigen.
Devon
Zumindest unter Ubuntu ist das Rezept "Reload from sysctl.conf" sysctl --systemnicht -w.
2.
0

Einige Anwendungen tauschen den Hammer leider direkt aus und überspringen absichtlich den Arbeitsspeicher. Sieh dich an, Chrome (und an einem Punkt Photoshop). Die einzige Möglichkeit, diese Anwendungen nicht zum Auslagern zu bringen, besteht darin, sie ohne Auslagerungspartition auszuführen. Selbst Swapiness 0 IIRC gewährt ihnen weiterhin Zugriff, da sie dies ausdrücklich verlangen.

Das Ändern der Swappiness gemäß oben funktioniert jedoch für alles andere. Ich würde jedoch einen Wert von 10-20 anstelle von 1 vorschlagen.

Arthur Kay
quelle