RAM auf kleinen Servern sparen: ZRAM / ZSwap / Swap File

  • Bei Neuinstallation und Optimierung eines kleinen 2GB RAM Servers habe ich Claude Code verwendet, um das meiste aus der beschränkten Hardware herauszuholen. Dabei hat mich Claude Code auf ZRAM hingewiesen und auf die Tatsache, dass das Standard UEFI Debian 13 Image anscheinend kein Swap File konfiguriert.

    Kein Swapfile könnte gerade bei kleinen Server leicht zum "Ram voll" Problem und damit ggfalls zu Abstürzen führen. Insofern wäre anzuraten zumindest ein Swap File auf kleinen Servern einzurichten.

    Um auf ZRAM zurückzukommen: Es wird eine dafür eine SWAP Partition im RAM angelegt, die komprimiert wird und damit je nach Komprimierbarkeit ein Mehrfaches des verwendeten RAM halten kann. Man erkauft sich somit eine bessere RAM Verwendung durch mehr CPU Zyklen, die für die (De)Komprimierung benötigt werden. Ich habe das nun mal bei mir eingerichtet und habe das wie folgt aufgeteilt:

    2GB RAM | daraus 512MB ZRAM | zudem 1,5GB SWAP File auf der SSD.

    Es gibt auch noch zswap. Das - im Vergleich - ist eigentlich kein "Swap", auch wenn es so heißt, sondern eher ein Swap Cache in RAM, der komprimiert ist und sich dynamisch verändern kann und - wenn voll - auf ein zwingend vorhandenes Swap File abschreibt.

    Claude meint, dass für den vorliegenden Fall ZRAM besser als ZSWAP geeignet ist.

    Anbei die Anleitung der umgesetzten Maßnahmen. Neben ZRAM habe ich auch noch einige andere Einsparungen vorgenommen.

  • Ja ZRAM empfehle ich auch immer. Nutze ich auch für Server mit 8GB oder mehr, da es einfach durchaus viel bringen kann. Du kannst auch neben ZRAM zusätzlich SWAP einrichten.

    //EDIT
    Bei ZRAM ist LZ4 die bestmögliche Komprimierung. Je nach Bedarf kann man auf ZSTD umstellen, für eine bessere Komprimierung aber dadurch wird auch mehr Zeit bzw. CPU benötigt also nicht für alle Anwendungen empfohlen und wirklich viel mehr Speicher lässt sich dadurch nicht einsparen (ca. doppelte Zeit für 30% weniger Speicherverbrauch)

  • Danke für Euere Hinweise und interessant zu hören, dass das ein Thema ist, das verwendet wird. Ich bin jetzt 25 Jahre Linuxer, aber habe noch nie von ZRAM oder ZSwap gehört gehabt, bisher.

    Du kannst auch neben ZRAM zusätzlich SWAP einrichten.

    Technisch machbar sicher, aber Claude widerspricht, dass das sinnvoll ist:

    RAM → [zswap-Pool, komprimiert] → zram (komprimiert) → Swap-Datei

    Wäre also doppelte Komprimierung auf zwap und zram Ebene, mehr CPU Bedarf bei quasi keinem Gewinn bei der zweiten Komprimierungsstufe mehr.

    RS 2000 G12 Pro BW25 (8C EPYC 9645, 16GB, 1TB) | RS 500 G12 BW25 (2C EPYC 9645, 4GB, 128GB) | RS Cyber Quack (1C,2GB,40GB)

  • Ich nutze ZRAM mit ZSTD. Konnte da jetzt noch keine Nachteile feststellen. Ist ein Unterschied zu LZ4 tatsächlich spürbar?

    Das weiß ich nicht. Ich nutze nur LZ4, da es meiner Meinung gut genug ist und viele Benchmarks in Foren es als "die beste Wahl" auszeichneten.

    Danke für Euere Hinweise und interessant zu hören, dass das ein Thema ist, das verwendet wird. Ich bin jetzt 25 Jahre Linuxer, aber habe noch nie von ZRAM oder ZSwap gehört gehabt, bisher.

    Technisch machbar sicher, aber Claude widerspricht, dass das sinnvoll ist:

    RAM → [zswap-Pool, komprimiert] → zram (komprimiert) → Swap-Datei

    Wäre also doppelte Komprimierung auf zwap und zram Ebene, mehr CPU Bedarf bei quasi keinem Gewinn bei der zweiten Komprimierungsstufe mehr.

    Ich rede vom "normalen" SWAP und nicht ZSWAP.

    ZRAM arbeitet mit dem RAM, der SWAP lagert die Daten aus dem RAM auf die Festplatte bzw. NVMe aus.

    Während ZRAM eine Priorität von 100 erhält, kriegt SWAP lediglich 10 (Muss man selbst konfigurieren), um nur in Notfällen wo der RAM selbst zu knapp wird auf die langsame Variante zurückgreift und mögliche Fehler bzw. Abstürze verhindert.

    Sollte jemand der Meinung sein, daß ich falsch liege, würde ich mich über Korrekturen freuen :)

  • Mich würden Erfahrungen mit der Nutzung von ZSWAP interessieren. Welche Vorteile bzw. Nachteile gibt es gegenüber ZRAM? Anwendungsbereich z.b Webserver mit MySQL, Apache, PHP-FPM.

    Ergänzend fände ich auch allgemein die Größenordnungen, um die es bei der Einsparung geht, interessant. Reden wir hier über einen einstelligen Prozentbereich oder ist das tatsächlich spürbar?


    Mir ist klar, dass das vmtl. von den Daten im RAM abhängt. Daher gerne auch anekdotisch aus euren Anwendungsfällen.

    VPS piko G11s | VPS 1000 ARM G11 SE VIE BSS24
    Webhosting SmallEi

  • Mich würden Erfahrungen mit der Nutzung von ZSWAP interessieren. Welche Vorteile bzw. Nachteile gibt es gegenüber ZRAM? Anwendungsbereich z.b Webserver mit MySQL, Apache, PHP-FPM.

    ZSWAP komprimiert und lagert diese Daten auf der Festplatte bzw. NVMe (Genau wie normales SWAP nur eben komprimiert und kleinere Daten) was selbstverständlich langsamer ist als wie Daten direkt im RAM selbst (ZRAM). Spürbar ist das glaube ich für die meisten aber nicht - Ich hatte noch keine Probleme mit SWAP selbst

  • ZSWAP komprimiert und lagert diese Daten auf der Festplatte bzw. NVMe (Genau wie normales SWAP nur eben komprimiert und kleinere Daten) was selbstverständlich langsamer ist als wie Daten direkt im RAM selbst (ZRAM).

    Ich habe mich nur kurz in zswap eingelesen. So wie ich das verstanden habe, speichert zswap komprimiert im RAM und schreibt nur im Bedarfsfall in den SWAP auf der Disk.

  • Ich habe mich nur kurz in zswap eingelesen. So wie ich das verstanden habe, speichert zswap komprimiert im RAM und schreibt nur im Bedarfsfall in den SWAP auf der Disk.

    Ach so, wird also gar nicht direkt auf die NVMe ausgelagert? Ich meine es so mal gelesen zu haben, bevor ich von ZRAM erfuhr.


    Gut das es solche Beiträge gibt, da lernt man oft dazu ^^

  • Ich rede vom "normalen" SWAP und nicht ZSWAP.

    Uff. Wer lesen kann ist klar im Vorteil, Du hast ja Swap und nicht Zswap geschrieben.

    Uh, das ist mal ein sehr guter Writedown. Der logische Fehler von ZRAM mit höherer Prio, das dann aber die zuerst rausgeworfenen ultrakalten Daten beinhaltet während die neueren auf der SSD landen... Muss man erst mal durchdenken.

    Ok, Zswap it is, wie es aussieht.

    RS 2000 G12 Pro BW25 (8C EPYC 9645, 16GB, 1TB) | RS 500 G12 BW25 (2C EPYC 9645, 4GB, 128GB) | RS Cyber Quack (1C,2GB,40GB)

  • So, zswap ist jetzt drauf. Erfahrung bei Debian 13 Netcup UEFI Image (und vermutlich generell bei Debian): zswap geht nur mit lzo Kompression (im Kernel enthalten), nicht das bessere zstd. Zumindest nicht ohne den Kernel neu zu kompilieren, wovon ich jetzt mal absehen würde.

    Meine Claude Anleitung (neben den anderen Optimierungen) als V2 im Anhang.

  • zswap geht nur mit lzo Kompression (im Kernel enthalten), nicht das bessere zstd. Zumindest nicht ohne den Kernel neu zu kompilieren, wovon ich jetzt mal absehen würde.

    Du brauchst den Kernel nicht neu kompilieren. Die Module werden scheinbar nicht früh genug geladen, weshalb du bei Bedarf direkt nach dem Boot die Werte auf "zstd" stellen kannst.

    Anleitung mithilfe von Gemini
    Hinweis: Mit GRUB wurde "zstd" angeblich nicht früh genug geladen, weshalb dies nun mit der unten stehenden Konfiguration später passiert.

    nano /etc/initramfs-tools/modules

    Code
    zstd
    zstd_compress
    zsmalloc

    update-initramfs -u
    nano /etc/tmpfiles.d/zswap.conf

    Code
    w /sys/module/zswap/parameters/enabled - - - - 1
    w /sys/module/zswap/parameters/compressor - - - - zstd
    w /sys/module/zswap/parameters/zpool - - - - zsmalloc
    w /sys/module/zswap/parameters/max_pool_percent - - - - 25

    reboot

    Jetzt kannst du erneut mit deinem Befehl in deiner Anleitung ausprobieren: cat /sys/module/zswap/parameters/compressor
    image.png

  • Danke, werde ich ausprobieren. Vorsicht, Du hast Deine Servernummer im Screenshot stehen. Lieber anonymisieren?

    RS 2000 G12 Pro BW25 (8C EPYC 9645, 16GB, 1TB) | RS 500 G12 BW25 (2C EPYC 9645, 4GB, 128GB) | RS Cyber Quack (1C,2GB,40GB)