Je nach Tool wird der Speicher den die Caches belegen mit in den belegten Speicher einberechnet (es sieht dann so aus als wäre gar kein/sehr wenig Speicher frei) oder als frei angezeigt (es sieht dann so aus als würde geswappt obwohl massenhaft RAM frei ist). Für ersteres ist top ein Beispiel, zweiteres wird vor allem bei Tools auf den Desktops so angezeigt.
Grundsätzlich sind die Caches (siehe oben) gegenüber „normalen“ Speicherseiten (also solchen die durch Programme belegt werden nachrangig). Ist also nicht genügend freier RAM da werden die Caches reduziert. Je nach Einsatzszenario kann das zu drastischem Performance-Verlust führen, es ist also notwendig einen Mittelweg zu nehmen.
Die Einstellung definiert die Aggressivität mit der unbenutzte Speicherseiten in den Swap ausgelagert werden.
Der Sinn ist Speicher für die Caches frei zu schaufeln.
Je nach gewünschtem Verhalten (auf Desktoprechnern wird man eher vermeiden wollen das gerade nicht genutzte Seiten ausgelagert werden, auf Servern ist eventuell der Cache wichtiger) kann man Einstellen was bevorzugt werden soll, der Cache oder das Vermeiden von Auslagern von Seiten.
Auf folgenden Wegen kann die swapiness gesetzt werden:
Weg | Auswirkung |
---|---|
sysctl vm.swappiness = <Wert> | Sofort, bis Neustart von System |
echo <Wert> > /proc/sys/vm/swappiness | Sofort, bis Neustart von System |
Eintrag in /etc/sysctl.conf vm.swappiness=<Wert> | Nach Neustart des Systems, Persistent |
Werte:
Größere Werte bedeuten das bevorzugt wird das geswappt wird, statt den Cache zu reduzieren.
Mir ist nicht ganz klar ob beliebige Werte funktionieren/ob es gleitend ist.
Wert | Bedeutung |
---|---|
60 | Standard-Einstellung |
1 | Versuche so weit wie möglich Swapping zu vermeiden |
100 | Versuche die Reduzierung von Cache so weit wie möglich zu vermeiden aka. swappe wenn möglich |
0 | Scheint Kernel-Abhängig verschieden zu sein, kann u.a. dazu führen, dass der Swap gar nicht mehr genutzt wird. Sollte vermieden werden (da die Bedeutung eventuell verschieden ist |
Wo | Was |
---|---|
free | @mir-6 ~ $ free -m Gesamt Belegt Frei Gemeinsam Puffer Cache Speicher: 15930 15312 618 3678 0 6876 -/+ Puffer/Cache: 8435 7495 Auslagerungsspeicher: 9999 1455 8544
Zeigt in der zweiten Zeile „-/+ Puffer/Cache:“ in der ersten Spalte „Belegt“ an wie viel Arbeitsspeicher „wirklich“ belegt ist (wenn man den Cache abzieht/nur den durch Programme belegten Speicher betrachtet) und in der Spalte „Frei“ wie viel RAM „wirklich“ frei ist (wenn man den durch Cache belegten Speicher als Frei betrachtet). |
top | Top zeigt bei den RAM-Werten „used“ und „free“ immer inklusive Cache an → „Free“ ist der Speicher der tatsächlich weder durch Cache, noch durch Programme belegt ist. Der Wert „cached Mem“ besagt allerdings wie viel MB derzeit eigentlich für Cache benutzt werden. Hinweis: Man kann nicht einfach Cache zu Free hinzuaddieren und meinen das sei der echte zur Verfügung stehende Arbeitsspeicher, da Teile des Caches nicht freigegeben werden können. |
/proc/meminfo | |
Wert | Bedeutung |
MemTotal | Kompletter installierter Arbeitsspeicher |
MemFree | Freier Speicher → durch nichts belegt |
MemAvailable | Wichtigste Wert Der RAM der in etwa verfügbar ist um Programmdaten zu speichern (der muss nicht frei sein, nur frei gegeben werden können). Dieser Wert ist nicht identisch mit MemFree+Cached, sondern in der Regel kleiner. Nicht alles was im Cache ist kann frei gegeben werden, zum Beispiel sind tmpfs, ramfs, Teile des Kernels (nicht der Code, aber die Daten) im Cache-Wert mit einbegriffen. Es handelt sich also um MemFree+Teile von Cache die freigegeben werden können |