ZFS ARC-optimering: Tak, gränser och vad man ska mäta

11 min läsning - 24 juni 2026

hero section cover
Innehållsförteckning
  • Mät ARC innan du justerar något
  • De fyra viktiga ARC-inställningarna
  • Anpassa ARC efter arbetsbelastning
  • Att diagnostisera problem och veta när man ska avbryta
Dela

ZFS ARC-inställning 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-avbrott 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 ger upp 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 perioder med låg belastning 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 1 ger 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_summary skriver ut en enskild ögonblicksbild: ARC-storlek och mål, fördelningen mellan MFU och MRU, metadataprocentandelar samt aktiva inställningsparametrar. Kör arc_summary -s arc endast för ARC-avsnittet.
  • Råa räknare finns i /proc/spl/kstat/zfs/arcstats på Linux och under kstat.zfs.misc och vfs.zfs sysctl-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ärdeVar du hittar denVarför det är viktigt
ARC-storlek, mål, max (size, c, c_max)arcstat, kstatVisar 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 metadataarcstat, arc_summaryMissade efterfrågor leder direkt till fördröjningar i applikationen
Tillgängligt minne och swap-aktivitet (si/so)free -h, vmstat 1Kontinuerlig in- och utlagring medan ARC är stort är det tydligaste tecknet på minnespress
Diskens servicetid (await) och utnyttjandeiostat -xKopplar samman ARC-missar med faktiska lagringsflaskhalsar
memory_throttle_count/proc/spl/kstat/zfs/arcstatsEtt 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äffkvoten som en trend, inte ett mål. En träffkvot 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 med att byta ut pekar på zfs_arc_max. Återvinning av churn som hela tiden rensar en varm cache pekar på zfs_arc_min. Långsamma kataloggenomgångar pekar på metadatagränsen.

Justerbar parameterVad den görNär ska den ändrasRisk vid fel inställning
zfs_arc_maxHård övre gräns för ARC-RAM-användningSamkörning av databaser eller virtuella maskiner som behöver reserverat RAM-minneFör lågt: mer disk-I/O och latens. För högt: swap-tryck eller OOM.
zfs_arc_minGolv som förhindrar att ARC krymper kraftigtArbetsbelastningar med korta minnespikar som hela tiden rensar cachenFör högt: gör att applikationer svälter under verklig minnespress
zfs_arc_meta_limit_percentAndel av ARC som är tillgänglig för metadata (ersätter den äldre zfs_arc_meta_limit)Miljontals små filer, djupa katalogträd, långsam ls/findFör lågt: katalogsökningar går på krypfart. För högt: begränsar datacaching.
zfs_arc_free_targetHur mycket ledigt systemminne ZFS försöker hålla tillgängligtServrar 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 är tillgängligt

Börja med den minsta ändringen som åtgärdar den belastning du kan se. För zfs_arc_maxberor det rätta taket på arbetsbelastningen (behandlas i nästa avsnitt). För zfs_arc_minär en lägsta 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.

Att 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_max

Det ställer in zfs_arc_max till 16 GiB omedelbart. För att ändringen ska kvarstå efter en omstart, lägg till den i /etc/modprobe.d/zfs.conf:

options zfs zfs_arc_max=17179869184

I FreeBSD använder körningsändringar sysctl:

sysctl vfs.zfs.arc_max=17179869184

Behå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-utrymmet förblir noll och latensen är stabil. Gör ändringen permanent först efter att testet under körning 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.

ArbetsbelastningStart zfs_arc_maxARC-prioritetAnmärkningarViktig mätparameter
Dedikerad filserver / NAS75–80 % av RAM-minnetData och metadataFörhämtning på. Aggressiv cachelagring är nyckeln.Total träfffrekvens
Virtualiseringsvärd30–40 % av RAM-minnetBalanseradLämna utrymme för gästens RAM och värdens uppgifter. Alla värden som inte är noll si/so betyder att gränsen sänks ytterligare.Värdens swap (si/so)
Databasserver25–50 % av RAM-minnetMetadatainriktadReservera minne för DB-motorn först. Ställ in primarycache=metadata om motorn hanterar sin egen buffertcache.Efterfrågan missar
Mål för säkerhetskopiering/arkiveringKonservativ gränsEndast metadataAnge primarycache=metadata så att skanningar i ett steg inte rensar bort användbara block.Missar vid förhämtning, träfffrekvens för metadata
Analys / upprepade läsningarHögre tak efter att andra cacher har reserveratsMFU-intensivtL2ARC 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 installationer. 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 under tiden. För alla arbetsbelastningar gäller att swap-aktivitet 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 avbryta

En för liten 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. En för stor ARC är mindre uppenbar. Träfffrekvensen ser bra ut, men servern börjar svappa, belastningsgenomsnittet stiger, processer blockeras i D tillstånd medan kärnan återvinner ARC-sidor på begäran, och i värsta fall börjar OOM-killer välja offer. Cachen ser frisk ut och servern känns usel.

Metadatatryck 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:

SymptomTrolig orsakFörsta inställningen att kontrolleraNästa steg
Hög await med många missar vid hög belastningArbetsminnet överskrider ARCzfs_arc_maxLägg till RAM eller lägg till L2ARC
Swap-aktivitet när ARC är stortARC begränsar operativsystemet eller apparnazfs_arc_maxSänk taket
Prestandan sjunker efter minnespikarAggressiv utplacering under återvinningzfs_arc_minStäll in en lägsta gräns på 25 % till 50 % av arc_max
Långsamma ls, find, operationer med små filerBrist på metadatacachezfs_arc_meta_limit_percentHöj andelen metadata
Ökar memory_throttle_countSystemomfattande minnesbelastningzfs_arc_maxSänk taket; kontrollera om L2ARC-indexet har svällt

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 ligger kvar på 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.

Blogg

Utvalda denna vecka

Fler artiklar
Digital ögonbelastning: Så skyddar du din syn i en värld där skärmar spelar en stor roll

Digital ögonbelastning: Så skyddar du din syn i en värld där skärmar spelar en stor roll

Stirrar du på skärmar hela dagen? Lär dig hur du kan minska digital ögonbelastning med beprövade tekniker och verktyg. Den här guiden är oumbärlig för distansarbetare, utvecklare och alla som arbetar inom teknikbranschen.

4 min läsning - 21 maj 2025

Varför det är viktigt att ha en kraftfull VPS utan datataks

8 min läsning - 9 maj 2025

Fler artiklar
background image

Har du frågor eller behöver du en anpassad lösning?

icon

Flexibla alternativ

icon

Global räckvidd

icon

Omedelbar driftsättning

icon

Flexibla alternativ

icon

Global räckvidd

icon

Omedelbar driftsättning