#server-performance

ZFS-ARC-Optimierung: Obergrenzen, Grenzwerte und was gemessen werden sollte

11 Min. Lesezeit - 24. Juni 2026

hero section cover

ZFS-ARC-Optimierung je nach Workload. Welche Einstellparameter sind wichtig, wie stellt man „zfs_arc_max“ unter Linux und FreeBSD ein und woran erkennt man, wann man fertig ist?

ZFS beansprucht standardmäßig stillschweigend etwa die Hälfte Ihres System-RAMs für seinen Lese-Cache, und auf einem ungeeigneten Server führt dies zu Swap-Aktivität, OOM-Kills oder einer Datenbank, die mit dem Dateisystem um Speicher konkurriert. Bei der ZFS-ARC-Optimierung geht es darum, zu entscheiden, wie viel von diesem RAM der ARC tatsächlich behalten darf und worauf Sie verzichten, um das Limit festzulegen. Dieser Beitrag behandelt, wie der ARC Speicher nutzt, was Sie messen sollten, bevor Sie Änderungen vornehmen, die wenigen Einstellparameter, deren Änderung sich lohnt, sowie sinnvolle Ausgangspunkte für Dateiserver, Hypervisoren, Datenbanken und Backup-Ziele. Informationen zu den Snapshots von ZFS finden Sie in unserem Leitfaden zu ZFS-Snapshots.

Messen Sie ARC, bevor Sie irgendetwas optimieren

Ändern Sie keinen einzigen einstellbaren Parameter, bevor Sie Basiswerte aus einer normalen Spitzenauslastungsphase haben. Momentaufnahmen aus ruhigen Zeiten führen Sie in die falsche Richtung. Bei nächtlichen Backups, wöchentlichen Berichten und Batch-Jobs wird das ARC-Verhalten in der Regel besonders interessant – erfassen Sie daher Daten über mehrere Tage hinweg.

Drei Tools decken den Großteil Ihrer Anforderungen ab:

  • arcstat 1 bietet eine live scrollende Ansicht der Hit- und Miss-Zähler, der Demand- gegenüber der Prefetch-Aktivität sowie der aktuellen ARC-Größe. Verwenden Sie es während Lasttests und Backup-Fenstern.
  • arc_summary gibt einen einzelnen Snapshot aus: ARC-Größe und -Ziel, die Aufteilung zwischen MFU und MRU, Metadaten-Verhältnisse sowie aktive Einstellparameter. Führen Sie arc_summary -s arc nur für den ARC-Abschnitt aus.
  • Die Rohzähler befinden sich /proc/spl/kstat/zfs/arcstats unter Linux und unter dem kstat.zfs.misc und vfs.zfs sysctl-Strukturen unter FreeBSD. Extrahieren Sie diese aus der Überwachung, anstatt formatierte Ausgaben zu analysieren.

Die Zähler, die vor jeder Änderung erfasst werden sollten:

MetrikWo sie zu finden istWarum sie wichtig ist
ARC-Größe, Zielwert, Maximalwert (size, c, c_max)arcstat, kstatZeigt an, ob ARC an seiner Obergrenze angelangt ist oder noch Spielraum zum Wachsen hat
Trefferquoten bei Daten- und Metadatenanfragenarcstat, arc_summaryFehltreffer bei der Nachfrage wirken sich direkt auf die Anwendungslatenz aus
Verfügbarer Speicher und Swap-Aktivität (si/so)free -h, vmstat 1Anhaltende Swap-Ein- und -Auslagerungen bei großem ARC sind das deutlichste Anzeichen für Speicherengpässe
Festplatten-Servicezeit (await) und Auslastungiostat -xStellt einen Zusammenhang zwischen ARC-Fehlern und tatsächlichen Speicherengpässen her
memory_throttle_count/proc/spl/kstat/zfs/arcstatsEine steigende Anzahl bestätigt, dass ZFS aufgrund von Speicherengpässen gedrosselt wird

Zwei Dinge werden hier häufig falsch verstanden. Beobachten Sie den verfügbaren Speicher, nicht den freien Speicher; Linux meldet geringen freien RAM-Speicher problemlos als Normalzustand, und das allein ist kein Problem. Das entscheidende Signal ist verfügbarer Speicher nahe Null in Verbindung mit anhaltender Swap-Aktivität (die Einführung in die Linux-Speicherverwaltung erklärt, warum). Und betrachten Sie die Trefferquote als Trend, nicht als Ziel. Eine Trefferquote von 99 % auf einem Rechner, der auf den Swap ausweicht, ist ein Fehler bei der Optimierung, kein Erfolg.


 

Die vier wichtigen ARC-Einstellparameter

Die meisten Optimierungen im Produktivbetrieb lassen sich auf vier Einstellungen zurückführen. Passen Sie die Einstellung an den Druck an, den Sie in der Baseline tatsächlich gemessen haben. Die Swap-Aktivität weist darauf hin, zfs_arc_max. Die Rückgewinnung von Churn, der einen „heißen“ Cache immer wieder leert, deutet auf zfs_arc_min. Langsame Verzeichnisdurchläufe deuten auf das Metadatenlimit hin.

EinstellparameterFunktionWann sollte die Einstellung geändert werdenRisiko bei falscher Einstellung
zfs_arc_maxFeste Obergrenze für die ARC-RAM-NutzungGemeinsame Bereitstellung von Datenbanken oder VMs, die reservierten Arbeitsspeicher benötigenZu niedrig: mehr Festplatten-E/A und Latenz. Zu hoch: Swap-Belastung oder OOM.
zfs_arc_minUntergrenze, die verhindert, dass ARC zu stark schrumpftWorkloads mit kurzen Speicher-Spitzen, die den Cache ständig leerenZu hoch: Anwendungen werden bei echtem Speicherengpass ausgebremst
zfs_arc_meta_limit_percentAnteil des für Metadaten verfügbaren ARC (ersetzt den älteren zfs_arc_meta_limit)Millionen kleiner Dateien, tiefe Verzeichnisstrukturen, langsame ls/findZu niedrig: Verzeichnissuchen laufen im Schneckentempo. Zu hoch: schränkt das Daten-Caching ein.
zfs_arc_free_targetWie viel freien Systemspeicher ZFS verfügbar halten möchteServer mit plötzlichen großen Zuweisungsspitzen (VM-Start, umfangreiche Abfragepläne)Zu hoch: Der ARC bleibt klein, selbst wenn RAM verfügbar ist

Beginnen Sie mit der kleinsten Änderung, die den erkennbaren Druck mindert. Für zfs_arc_maxhängt der richtige Höchstwert von der Arbeitslast ab (wird im nächsten Abschnitt behandelt). Für zfs_arc_minist ein Mindestwert von 25 % bis 50 % von zfs_arc_max ist ein vernünftiger Ausgangspunkt, falls überhaupt einer benötigt wird. Für Metadaten weisen die aktuellen OpenZFS-Standardwerte bereits 75 % des ARC zu zfs_arc_meta_limit_percent, was für die meisten Workloads großzügig bemessen ist; greifen Sie hier nur ein, wenn Metadaten-Fehlgriffe deutlich sichtbar sind in arcstat.

Anwenden von Änderungen unter Linux und FreeBSD

Unter Linux können Sie eine Änderung zur Laufzeit testen, indem Sie in die sysfs-Parameterdatei schreiben. Ein Neustart ist nicht erforderlich:

echo 17179869184 > /sys/module/zfs/parameters/zfs_arc_max

Dadurch wird zfs_arc_max sofort auf 16 GiB. Damit die Änderung auch nach einem Neustart erhalten bleibt, fügen Sie sie zu /etc/modprobe.d/zfs.conf:

options zfs zfs_arc_max=17179869184

Unter FreeBSD verwenden Laufzeitänderungen sysctl:

sysctl vfs.zfs.arc_max=17179869184

Behalten Sie denselben Wert in /boot/loader.conf:

vfs.zfs.arc_max="17179869184"

Ändere jeweils nur eine Einstellung, in kleinen Schritten von etwa 10 % des gesamten Arbeitsspeichers. Beobachte das Problemfenster. Behalte die Änderung nur bei, wenn der Swap-Speicher bei Null bleibt und die Latenz stabil ist. Mache die Änderung erst dauerhaft, nachdem der Laufzeittest erfolgreich war.

Anpassung der ARC an die Arbeitslast

Die Gesamt-RAM-Kapazität ist der falsche Ansatzpunkt. Die Dimensionierung des ARC sollte sich nach der Arbeitslastzusammensetzung auf dem Server richten.

WorkloadStart zfs_arc_maxARC-PrioritätAnmerkungenWichtige Kennzahl
Dedizierter Dateiserver / NAS75 % bis 80 % des ArbeitsspeichersDaten und MetadatenPrefetch aktiviert. Der aggressive Cache ist entscheidend.Gesamt-Trefferquote
Virtualisierungshost30 % bis 40 % des ArbeitsspeichersAusgewogenLassen Sie Spielraum für den Gast-RAM und Host-Aufgaben. Jeder Wert ungleich Null si/so bedeutet eine weitere Begrenzung.Host-Swap (si/so)
Datenbankserver25 % bis 50 % des ArbeitsspeichersMetadatenlastReservieren Sie zunächst Speicher für die DB-Engine. Legen Sie primarycache=metadata , wenn die Engine ihren eigenen Puffer-Cache verwaltet.Fehltreffer
Sicherungs-/ArchivierungszielKonservative ObergrenzeNur MetadatenFestgelegt primarycache=metadata damit bei Ein-Durchlauf-Scans keine nützlichen Blöcke entfernt werden.Prefetch-Fehltreffer, Metadaten-Trefferquote
Analytik / wiederholtes LesenHöhere Obergrenze nach Reservierung anderer CachesMFU-intensivL2ARC auf NVMe kann den „Hot Working Set“ über mehrere Abfrageläufe hinweg beibehalten.Demand-Fehltreffer

Ein VM-Host muss den Speicher mit seinen Gästen teilen, daher ist eine Obergrenze von 30 % bis 40 % ein sicherer Standardwert, und 50 % sind bei den meisten Konfigurationen bereits zu hoch. Datenbanken wie PostgreSQL und MySQL verwalten ihre eigenen Puffer-Caches, daher reservieren Sie zunächst Speicher für die Engine und überlassen ARC den Rest. Backup-Ziele profitieren davon primarycache=metadata , da die gelesenen Daten selten erneut benötigt werden und man nicht möchte, dass ein nächtliches Backup den gesamten Pool durchläuft und dabei den Rest des Caches leert. Bei jeder Workload bedeutet Swap-Aktivität, während ARC auf zfs_arc_max bedeutet, dass die Obergrenze zu hoch ist; diese Regel gilt immer.

Probleme diagnostizieren und wissen, wann man aufhören muss

Ein zu kleiner ARC äußert sich in hohen Lese-IOPS, niedrigen Trefferquoten bei Abfragen und langsamer Verzeichnisnavigation, während das System noch über freien Arbeitsspeicher verfügt. Ein zu großer ARC ist weniger offensichtlich. Die Trefferquote sieht gut aus, aber der Rechner beginnt mit dem Swapping, die Lastdurchschnitte steigen, Prozesse bleiben im D , während der Kernel ARC-Seiten bei Bedarf freigibt, und im schlimmsten Fall beginnt der OOM-Killer, Opfer auszuwählen. Der Cache sieht intakt aus, doch der Server läuft miserabel.

Metadaten-Druck macht sich bemerkbar, wenn demand_metadata_bytes deutlich höher liegt als demand_data_bytes in arc_summary. Das bedeutet, dass Metadaten mit Daten um Speicherplatz konkurrieren, und es lohnt sich, den prozentualen Grenzwert für Metadaten anzuheben.

Ordnen Sie das, was Sie sehen, der ersten zu überprüfenden Einstellung zu:

SymptomMögliche UrsacheZu überprüfender ParameterNächster Schritt
Hohe await mit vielen Fehlern bei hoher AuslastungDer Arbeitsspeicher überschreitet ARCzfs_arc_maxRAM hinzufügen oder L2ARC hinzufügen
Swap-Aktivität bei großem ARCARC-Mangel beeinträchtigt das Betriebssystem oder Anwendungenzfs_arc_maxObergrenze senken
Leistungseinbruch nach Speicher-SpitzenAggressives Verdrängen während der Speicherrückgewinnungzfs_arc_minLegen Sie eine Untergrenze von 25 % bis 50 % von arc_max
langsame ls, find, Operationen mit kleinen DateienMetadaten-Cache-Engpasszfs_arc_meta_limit_percentErhöhen Sie den Metadatenanteil
Steigend memory_throttle_countSystemweiter Speicherengpasszfs_arc_maxObergrenze senken; auf übermäßigen L2ARC-Index prüfen

L2ARC ist nicht kostenlos. Der Index für L2ARC-Einträge befindet sich im primären ARC, und wenn dieser Overhead etwa ein Drittel der gesamten ARC-Kapazität überschreitet, schadet der sekundäre Cache mehr, als er nützt. Greifen Sie nur dann auf L2ARC zurück, wenn der Arbeitsspeicher größer als der RAM ist, aber immer noch auf ein schnelles NVMe-Gerät passt, und nur dann, wenn die Trefferquote des primären ARC bereits gut ist.

Der richtige Zeitpunkt, die Optimierung zu beenden, ist erreicht, wenn die Latenz konstant bleibt, der Swap während desselben Auslastungsfensters, das das ursprüngliche Problem verursacht hat, bei Null bleibt und weitere Änderungen keine Verbesserungen mehr bringen. Eine hohe Trefferquote bedeutet nichts, wenn der Server auslagert. Ab diesem Punkt sollten Sie keine Anpassungen mehr vornehmen und die Einstellungen erst dann erneut überprüfen, wenn das gleiche Problem unter derselben Auslastung erneut auftritt.

Wenn Sie einen Server mit ausreichendem RAM-Spielraum benötigen, um ZFS ordnungsgemäß auszuführen, ohne mit Ihren VMs oder Datenbanken um Speicher zu konkurrieren (es lohnt sich, zunächst nachzulesen, wie viel RAM Sie tatsächlich benötigen), werfen Sie einen Blick auf die dedizierten FDC-Server.

Blog

Diese Woche im Blickpunkt

Weitere Artikel
iperf3-Tutorial: Netzwerkgeschwindigkeit unter Linux und Windows testen
#bandwidth#server-performance

iperf3-Tutorial: Netzwerkgeschwindigkeit unter Linux und Windows testen

Installieren Sie iperf3, führen Sie Bandbreitentests durch und optimieren Sie die TCP-Puffer, um unter Linux und Windows genaue Ergebnisse zu erhalten. Behandelt werden UDP-, bidirektionale und 10GbE+-Tests.

10 Min. Lesezeit - 7. Mai 2026

#server-performance

Optimierte Profile für die Workload-Optimierung von Linux-Servern

16 Min. Lesezeit - 9. Juni 2026

Weitere Artikel
background image

Haben Sie Fragen oder benötigen Sie eine individuelle Lösung?

icon

Flexible Optionen

icon

Globale Reichweite

icon

Sofortige Bereitstellung

icon

Flexible Optionen

icon

Globale Reichweite

icon

Sofortige Bereitstellung