Raspi 4/5 kommen schon mit relativ viel Speicher daher, daher verlagert sich das Aufgabengebiet von der Serveranwendung in Richtung Clientanwendung. 2 Bildschirme, ein Officepaket eine Datenbank, Firefox mit 20 Tabs und und und..... irgendwann werden dann die 8GB Speicher knapp und das System kommt in pagein/out und in swap-in/out.
Eine Standard Raspian-OS installation kommt mit einer 200MB Swap-Datei daher. M. M. lächerlich klein.
Was ist jetzt swapin/out bzw pagein/out überhaupt.
Bis in die 80er Jahre hat ein System nur swapin/out gekannt. Dabei wurde immer ein kompletter Prozess in einem Bereich der Festplatte geschrieben (swap) und der Speicher war für eine andere Task frei und konnte verwendet werden. Bei HD-Zugriffszeiten um 8ms war das für den Benutzer ein gemütliches Unterfangen. Ich glaube AT&T hatte die Idee das Ganze nicht mehr mit Prozessen zu machen sondern mit Speicherseiten (Pages). Dadurch ist es möglich nur mehr mit kleinen Datenmengen zu operieren und prophylaktisch schon ein pageout zu starten auch wenn es noch gar nicht notwendig ist.
Der eine oder andere wird sich vielleicht wundern, dass seine Top-anzeige so aussieht.
top - 10:27:40 up 22 min, 3 users, load average: 0,17, 0,07, 0,09
Tasks: 182 total, 2 running, 180 sleeping, 0 stopped, 0 zombie
%CPU(s): 2,6 us, 1,2 sy, 0,0 ni, 95,8 id, 0,4 wa, 0,0 hi, 0,1 si
MiB Spch: 416,9 total, 131,9 free, 251,8 used, 99,1 buff/
MiB Swap: 200,0 total, 0,1 free, 199,9 used. 165,1 avail
Und da sieht man das der Swap schon voll ist. Nach 20 Min Laufzeit und der Raspi wurde nur gebootet
Ihr seht ein pageout kommt sehr früh zustande.
Wie groß soll der Swap jetzt sein?
In Zeiten der TB großen SSD sollte es auf ein paar GB nicht ankommen. Die alte Regel lautete maximal 3 mal des Speichers. Bei einem 8GB Raspi wären das 24GB. Wobei ich mir mit dem Rechnen leichter tue und 16 oder 32GB nehme. Es liegt an euch wie viel Platz ihr auf welchem Medium habt, aber dazu später mehr.
Wo finde ich jetzt meinen Swap-Bereich?
Nun das Schöne ist, dass er überall im System sein darf. Als eigene Partition, als eigene Platte und als Datei. Er kann sogar auf einem Netzlaufwerk sein. Aber Achtung: Er sollte im permanenten Zugriff sein .
Und es dürfen auch beliebig viele existieren. Standard mäßig wird der Swap im Verzeichnis /var mit dem Namen swap angelegt. Also ein
zeigt Dir jetzt eine SWAP-Datei von 200MB. jetzt kann aber so ein Guru den Swap irgendwo anders hingelegt haben und ich habe es vergessen.
Dann ist es Zeit einen kleinen Befehl am Terminal zu lernen:
und dir ist klar wo er ist.
Alle Befehle die jetzt kommen benötigen root-Rechte.
Entweder ihr schreibt immer sudo vor das Kommando oder ihr wechselt jetzt auf die root-ebene. Ich erspare mir ab jetzt das sudo und wechsle auf root mit einem sudo -s
Legen wir jetzt eine Swap-Datei mit 1GB an und hängen sie einfach dazu.
erstellt eine Datei mit 1GB Größe die als zusätzlicher Swap dienen soll. Dann müssen wir die Berechtigung richtig setzen. Swap ist da ein bisschen empfindlich und meckert, wenn andere Leute da hineinschreiben oder lesen können.
Ein mkswap als 3. Befehl, baut noch die Filesystemstruktur des Swap auf.
Was fehlt noch? Natürlich, wir müssen den System noch sagen: verwende diese.
und schon hat unser Raspi 1GB mehr.
Das Top liefert jetzt .....
top - 11:29:56 up 1:24, 3 users, load average: 0,03, 0,01, 0,00
Tasks: 183 total, 2 running, 181 sleeping, 0 stopped, 0 zombie
%CPU(s): 1,0 us, 0,5 sy, 0,0 ni, 98,5 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
MiB Spch: 416,9 total, 140,4 free, 255,3 used, 86,9 buff/cache
MiB Swap: 1224,0 total, 1024,2 free, 199,8 used. 161,6 avail Spch
Firefox, Thunderbird und Co werden von diesem zusätzlich GB profitieren. Als gebranntes Kind war bei mir die Bildbearbeitung ein kleiner Speicherfresser. Ich habe meinen Raspi kurzfristig 64GB mehr gegeben und das Bild ist fertig. ![]()
Habe ich schon erwähnt, dass dieses vorgehen nur bis zum nächsten reboot gilt. Danach ist das zusätzlich GB vergessen. Ein swapon aktiviert dieses GB allerdings zu jeden Zeitpunkt wieder.
Wie mache ich den Swap für immer groß?
dazu gibt es auf allen Debian das Paket dphys-swapfile das mit apt u.U. nachinstalliert werden muss. Raspian-OS hat es schon von Haus aus installiert.
Dazu gibt es die Datei /etc/dphys-swapfile. Dies ist die Konfiguration für den Swap
# where we want the swapfile to be, this is the default
#CONF_SWAPFILE=/var/swap
# set size to absolute value, leaving empty (default) then uses computed value
# you most likely don't want this, unless you have an special disk situation
CONF_SWAPSIZE=200
# set size to computed value, this times RAM size, dynamically adapts,
# guarantees that there is enough swap without wasting disk space on excess
#CONF_SWAPFACTOR=2
# restrict size (computed and absolute!) to maximally this limit
# can be set to empty for no limit, but beware of filled partitions!
# this is/was a (outdated?) 32bit kernel limit (in MBytes), do not overrun it
# but is also sensible on 64bit to prevent filling /var or even / partition
#CONF_MAXSWAP=2048
Display More
CONF_SWAPSIZE (grün) kann bis auf die Hälfte! der freien Kapazität hochgesetzt werden. Größe Werte werden automatisch auf den maximale "freier Platz/2" zurückgesetzt.
Wer jetzt glaubt, mit diesen paar Parameter ist man glücklich, der beachte das die restlichen (gelben) auskommentiert sind. Da kommt jetzt ein Script gleichen namens unter /sbin/dphys-swapfile ins Spiel.
CONF_SWAPFILE=/var/swap
# set size to absolute value, leaving empty (default) then uses computed value
# you most likely don't want this, unless you have an special disk situation
CONF_SWAPSIZE=
# set size to computed value, this times RAM size, dynamically adapts,
# guarantees that there is enough swap without wasting disk space on excess
CONF_SWAPFACTOR=2
# restrict size (computed and absolute!) to maximally this limit
# can be set to empty for no limit, but beware of filled partitions!
# this is/was a (outdated?) 32bit kernel limit (in MBytes), do not overrun it
# but is also sensible on 64bit to prevent filling /var or even / partition
CONF_MAXSWAP=2048
# restrict size to this percentage of the remaining disk space.
CONF_MAXDISK_PCT=50
Display More
und da sind sie wieder unsere Default-Werte. Achtung: Beim nächsten Update auf das Paket werden diese überschrieben.
CONF_MAXDISK_PCT ist mehr oder weniger sinnlos. In Zeile 91 dieses Script wird die Berechnung immer auf die Hälfte des verfügbaren Platzes oder weniger zurückgesetzt.
Beispiel 32GB MSD, 17GB belegt --> maximaler Swap (32-17)/2 = 7,5 GB die Swap wird somit mit dieser Größe angelegt.
Ich hoffe, dass das hilft die Vorgänge zu verstehen und wünsche Euch gutes gelingen.
Noch ein paar nützliche Kommandos
free -h liefert eine Übersicht über die Speichernutzung.
swapoff /var/swap2 nimmt in unserem Beispiel den zusätzlichen Swap wieder offline.
Zu guter Letzt oder was man noch wissen sollte.
- Die Platte(n) auf denen der/die Swaps liegen sollte möglichst schnell sein (SSD).
- beachtet das bei 32bit System die maximal Speichernutzung 4GB ist. Das System kann nicht mehr adressieren.
BACKUP vorher nicht vergessen!!