ZFS ARC-optimering: Tak, gränser och vad man ska mäta
11 min läsning - 24 juni 2026

ZFS ARC-optimering efter arbetsbelastning. Vilka inställningar som är viktiga, hur man ställer in zfs_arc_max på Linux och FreeBSD, och hur man vet när man är klar.
ZFS tar som standard tyst ungefär hälften av systemets RAM-minne för sin läscache, och på fel typ av server innebär det swap-aktivitet, OOM-avstängningar eller att en databas konkurrerar med filsystemet om minnet. ZFS ARC-justering handlar om att bestämma hur mycket av det RAM-minnet som ARC faktiskt får behålla, och vad du avstår från för att sätta gränsen. Det här inlägget behandlar hur ARC använder minne, vad du bör mäta innan du gör några ändringar, de få inställningar som är värda att ändra samt rimliga utgångspunkter för filservrar, hypervisorer, databaser och säkerhetskopieringsmål. För information om ZFS-snapshots, se vår guide till ZFS-snapshots.
Mät ARC innan du justerar något
Ändra inte en enda inställning förrän du har basvärden från en normal period med hög belastning. Ögonblicksbilder från lugna perioder leder dig i fel riktning. Nattliga säkerhetskopieringar, veckorapporter och batchjobb är vanligtvis de tillfällen då ARC-beteendet blir intressant, så samla in data under flera dagar.
Tre verktyg täcker det mesta av vad du behöver:
arcstat 1ger en rullande realtidsvy av hit- och miss-räknare, efterfrågan kontra prefetch-aktivitet samt aktuell ARC-storlek. Använd det under belastningstester och säkerhetskopieringsfönster.arc_summaryskriver ut en enskild ögonblicksbild: ARC-storlek och mål, fördelningen mellan MFU och MRU, metadataproportioner samt aktiva inställningsparametrar. Körarc_summary -s arcendast för ARC-avsnittet.- Råa räknare finns
/proc/spl/kstat/zfs/arcstatspå Linux och underkstat.zfs.miscochvfs.zfssysctl-träd på FreeBSD. Hämta dessa från övervakningen istället för att analysera formaterad utdata.
De mätvärden som bör registreras innan någon ändring görs:
| Mätvärde | Var du hittar den | Varför det är viktigt |
|---|---|---|
ARC-storlek, mål, max (size, c, c_max) | arcstat, kstat | Visar om ARC har nått sin övre gräns eller om det fortfarande finns utrymme att växa |
| Träfffrekvens för efterfrågedata och metadata | arcstat, arc_summary | Efterfrågefel leder direkt till applikationsfördröjning |
Tillgängligt minne och swap-aktivitet (si/so) | free -h, vmstat 1 | Kontinuerlig in- och utlagring medan ARC är stort är det tydligaste tecknet på minnesbelastning |
Diskens servicetid (await) och utnyttjande | iostat -x | Kopplar samman ARC-missar med faktiska lagringsflaskhalsar |
memory_throttle_count | /proc/spl/kstat/zfs/arcstats | Ett stigande antal bekräftar att ZFS stryps på grund av minnespress |
Det finns två saker som folk ofta missförstår här. Håll koll på tillgängligt minne, inte ledigt minne; Linux rapporterar gärna lågt ledigt RAM-minne som ett normaltillstånd, och det är i sig inget problem. Den signal som spelar roll är tillgängligt minne nära noll i kombination med ihållande swap-aktivitet (introduktionen till Linux minneshantering förklarar varför). Och betrakta träfffrekvensen som en trend, inte ett mål. En träfffrekvens på 99 % på en maskin som swappar är ett misslyckande i optimeringen, inte en framgång.
De fyra viktiga ARC-inställningarna
Det mesta av produktionsjusteringen handlar om fyra inställningar. Anpassa inställningen efter det tryck du faktiskt mätte i baslinjen. Aktiviteten på Swap pekar på zfs_arc_max. Återvinn churn som hela tiden rensar en varm cache pekar på zfs_arc_min. Långsamma kataloggenomgångar pekar på metadatagränsen.
| Justerbar parameter | Vad den gör | När ska den ändras | Risk vid fel inställning |
|---|---|---|---|
zfs_arc_max | Hård övre gräns för ARC-RAM-användning | Samkörning av databaser eller virtuella maskiner som behöver reserverat RAM-minne | För lågt: mer disk-I/O och latens. För högt: swap-tryck eller OOM. |
zfs_arc_min | Golv som förhindrar att ARC krymper kraftigt | Arbetsbelastningar med korta minnespikar som hela tiden rensar cachen | För högt: gör att applikationer svälter under verklig minnespress |
zfs_arc_meta_limit_percent | Andel av ARC som är tillgänglig för metadata (ersätter den äldre zfs_arc_meta_limit) | Miljontals små filer, djupa katalogträd, långsamt ls/find | För lågt: katalogsökningar går på krypfart. För högt: begränsar datacaching. |
zfs_arc_free_target | Hur mycket ledigt systemminne ZFS försöker hålla tillgängligt | Servrar med plötsliga stora allokeringsspikar (uppstart av virtuella maskiner, stora frågeplaner) | För högt: ARC förblir litet även när RAM-minne finns tillgängligt |
Börja med den minsta ändringen som åtgärdar den belastning du kan se. För zfs_arc_max beror det rätta taket på arbetsbelastningen (behandlas i nästa avsnitt). För zfs_arc_minär en nedre gräns på 25–50 % av zfs_arc_max är en rimlig utgångspunkt om du överhuvudtaget behöver en. För metadata ger de senaste standardinställningarna i OpenZFS redan metadata 75 % av ARC via zfs_arc_meta_limit_percent, vilket är generöst för de flesta arbetsbelastningar; ändra detta endast när metadata-missar är tydligt synliga i arcstat.
Tillämpa ändringar på Linux och FreeBSD
På Linux testar du en ändring under körning genom att skriva till sysfs-parameterfilen. Ingen omstart behövs:
echo 17179869184 > /sys/module/zfs/parameters/zfs_arc_maxDet ställer in zfs_arc_max till 16 GiB omedelbart. För att ändringen ska bestå efter en omstart lägger du till den i /etc/modprobe.d/zfs.conf:
options zfs zfs_arc_max=17179869184I FreeBSD använder körningsändringar sysctl:
sysctl vfs.zfs.arc_max=17179869184Behåll samma värde i /boot/loader.conf:
vfs.zfs.arc_max="17179869184"Ändra en inställning i taget, i små steg på cirka 10 % av det totala RAM-minnet. Håll koll på problemfönstret. Behåll ändringen endast om swap förblir noll och latensen är stabil. Gör ändringen permanent först efter att körningstestet har godkänts.
Anpassa ARC efter arbetsbelastning
Det totala RAM-minnet är fel utgångspunkt. Dimensioneringen av ARC bör baseras på arbetsbelastningsmixen på servern.
| Arbetsbelastning | Start zfs_arc_max | ARC-prioritet | Anmärkningar | Viktig mätparameter |
|---|---|---|---|---|
| Dedikerad filserver / NAS | 75–80 % av RAM-minnet | Data och metadata | Förhämtning på. Aggressiv cachelagring är nyckeln. | Total träfffrekvens |
| Virtualiseringsvärd | 30–40 % av RAM-minnet | Balanserad | Lämna utrymme för gästramminne och värduppgifter. Alla värden som inte är noll si/so betyder att gränsen sänks ytterligare. | Värdens swap (si/so) |
| Databasserver | 25–50 % av RAM-minnet | Metadatainriktad | Reservera minne för DB-motorn först. Ställ in primarycache=metadata om motorn hanterar sin egen buffertcache. | Efterfrågemissar |
| Mål för säkerhetskopiering/arkivering | Konservativ gräns | Endast metadata | Inställt primarycache=metadata så att skanningar i ett steg inte tar bort användbara block. | Missar vid förhämtning, träfffrekvens för metadata |
| Analys / upprepade läsningar | Högre tak efter att andra cacher reserverats | MFU-intensivt | L2ARC på NVMe kan behålla den aktiva arbetsuppsättningen mellan olika sökningar. | Efterfrågemissar |
En VM-värd måste dela minne med sina gäster, så en gräns på 30–40 % är ett säkert standardvärde och 50 % är redan för högt för de flesta konfigurationer. Databaser som PostgreSQL och MySQL hanterar sina egna buffertcacher, så du reserverar minne för motorn först och låter ARC ta det som blir över. Backupmål drar nytta av primarycache=metadata eftersom de data som läses sällan behövs igen, och man vill inte att en nattlig säkerhetskopiering ska gå igenom hela poolen och tömma resten av cachen efterhand. För alla arbetsbelastningar gäller att om swap-aktivitet förekommer medan ARC är låst vid zfs_arc_max att taket är för högt; den regeln gäller alltid.
Att diagnostisera problem och veta när man ska sluta
Ett för litet ARC visar sig som höga läs-IOPS, låga träfffrekvenser och långsam katalogbläddring samtidigt som systemet fortfarande har ledigt RAM-minne. Ett för stort ARC är mindre uppenbart. Träfffrekvensen ser bra ut, men servern börjar svappa, belastningsgenomsnittet stiger, processer blockeras i D medan kärnan återvinner ARC-sidor vid behov, och i värsta fall börjar OOM-killer välja offer. Cachen ser frisk ut och servern känns usel.
Metadatapress uppstår när demand_metadata_bytes ligger betydligt högre än demand_data_bytes i arc_summary. Det är då metadata konkurrerar med data om utrymme, och det är värt att höja gränsen för metadataandelen.
Jämför det du ser med den första inställningen som ska kontrolleras:
| Symptom | Trolig orsak | Första inställningen att kontrollera | Nästa steg |
|---|---|---|---|
Hög await med många missar vid hög belastning | Arbetsminnet överskrider ARC | zfs_arc_max | Lägg till RAM eller lägg till L2ARC |
| Swap-aktivitet när ARC är stort | ARC begränsar operativsystemet eller apparna | zfs_arc_max | Sänk gränsen |
| Prestandan sjunker efter minnespikar | Aggressiv utplåning under återvinning | zfs_arc_min | Ställ in en lägsta gräns på 25–50 % av arc_max |
Långsamma ls, find, små filoperationer | Brist på metadatacache | zfs_arc_meta_limit_percent | Höj andelen metadata |
Ökar memory_throttle_count | Systemomfattande minnesbelastning | zfs_arc_max | Sänk taket; kontrollera om L2ARC-indexet sväller |
L2ARC är inte gratis. Indexet för L2ARC-poster finns i primär ARC, och om den extra belastningen överstiger ungefär en tredjedel av den totala ARC-kapaciteten gör den sekundära cachen mer skada än nytta. Använd L2ARC endast när arbetsuppsättningen är större än RAM-minnet men fortfarande ryms på en snabb NVMe-enhet, och endast när träfffrekvensen i den primära ARC-cachen redan är god.
Rätt tidpunkt att sluta med finjusteringen är när latensen är stabil, swap-användningen förblir noll under samma belastningsperiod som orsakade det ursprungliga problemet, och ytterligare ändringar inte längre förbättrar något. En hög träfffrekvens betyder ingenting om servern swappar. När du har passerat den punkten ska du sluta justera inställningarna och endast se över dem igen om samma problem återkommer under samma arbetsbelastning.
Om du behöver en server med tillräckligt med RAM-minne för att köra ZFS ordentligt utan att behöva konkurrera om minnet med dina virtuella maskiner eller databaser (det är värt att först läsa om hur mycket RAM-minne du faktiskt behöver), ta en titt på FDC:s dedikerade servrar.

iperf3-handledning: Testa nätverkshastigheten på Linux och Windows
Installera iperf3, kör bandbreddstester och justera TCP-buffertarna för exakta resultat på Linux och Windows. Omfattar UDP-, dubbelriktade och 10GbE+-tester
10 min läsning - 7 maj 2026
Anpassade profiler för optimering av arbetsbelastningen på Linux-servrar
16 min läsning - 9 juni 2026

Har du frågor eller behöver du en anpassad lösning?
Flexibla alternativ
Global räckvidd
Omedelbar driftsättning
Flexibla alternativ
Global räckvidd
Omedelbar driftsättning