Optimizarea ZFS ARC: plafoane, limite și ce trebuie măsurat
11 min citire - 24 iunie 2026

Optimizarea ZFS ARC în funcție de sarcina de lucru. Ce parametri de configurare sunt importanți, cum se setează zfs_arc_max pe Linux și FreeBSD și cum se poate ști când procesul de optimizare este finalizat.
În mod implicit, ZFS va ocupa discret aproximativ jumătate din memoria RAM a sistemului pentru cache-ul de citire, iar pe un tip de server nepotrivit, acest lucru înseamnă activitate de swap, terminarea proceselor din cauza epuizării memoriei (OOM) sau o bază de date care concurează cu sistemul de fișiere pentru memorie. Optimizarea ARC a ZFS înseamnă să decideți cât din acea memorie RAM are ARC permisiunea efectivă să păstreze și la ce renunțați pentru a seta limita. Acest articol prezintă modul în care ARC utilizează memoria, ce trebuie măsurat înainte de a interveni, câteva setări care merită modificate și puncte de pornire recomandate pentru servere de fișiere, hipervizori, baze de date și destinații de backup. Pentru informații despre instantaneele ZFS, consultați ghidul nostru privind instantaneele ZFS.
Măsurați ARC înainte de a regla orice
Nu modificați niciun parametru reglabil până când nu aveți valorile de referință dintr-o perioadă normală de trafic intens. Instantaneele din perioadele de trafic redus vă vor îndruma în direcția greșită. Backup-urile nocturne, rapoartele săptămânale și sarcinile de tip batch sunt, de obicei, momentele în care comportamentul ARC devine interesant, așa că capturați date pe parcursul mai multor zile.
Trei instrumente acoperă cea mai mare parte a ceea ce aveți nevoie:
arcstat 1oferă o vizualizare în timp real, cu derulare, a contoarelor de acces reușite și eșuate, a activității de cerere față de cea de preluare anticipată și a dimensiunii curente a ARC. Utilizați-l în timpul testelor de încărcare și al ferestrelor de backup.arc_summaryimprimă o singură instantanee: dimensiunea și ținta ARC, împărțirea MFU/MRU, raporturile de metadate și parametrii de reglare activi. Rulațiarc_summary -s arcdoar pentru secțiunea ARC.- Contoarele brute se găsesc
/proc/spl/kstat/zfs/arcstatspe Linux și subkstat.zfs.miscșivfs.zfsarborii sysctl pe FreeBSD. Extrageți-le din sistemul de monitorizare, în loc să analizați ieșirea formatată.
Contorii care merită înregistrați înainte de orice modificare:
| Metrică | Unde se găsește | De ce este important |
|---|---|---|
Dimensiunea ARC, valoarea țintă, valoarea maximă (size, c, c_max) | arcstat, kstat | Vă indică dacă ARC a atins limita maximă sau dacă mai are spațiu de creștere |
| Rata de acoperire a cererilor de date și metadate | arcstat, arc_summary | Eșecurile cererilor se traduc direct în latența aplicației |
Memoria disponibilă și activitatea de swap (si/so) | free -h, vmstat 1 | Activitatea susținută de swap-in/swap-out atunci când ARC este mare este cel mai clar semn al presiunii asupra memoriei |
Timpul de serviciu al discului (await) și gradul de utilizare | iostat -x | Leagă ratările ARC de blocajele reale de stocare |
memory_throttle_count | /proc/spl/kstat/zfs/arcstats | O creștere a numărului confirmă faptul că ZFS este limitat din cauza presiunii asupra memoriei |
Două greșeli frecvente în acest context. Urmăriți memoria disponibilă, nu memoria liberă; Linux raportează fără probleme un nivel scăzut de RAM liber ca stare normală, iar acest lucru în sine nu reprezintă o problemă. Semnalul care contează este memoria disponibilă aproape de zero, combinată cu o activitate susținută de swap (ghidul de bază privind gestionarea memoriei în Linux explică de ce). Și tratați rata de acces reușit ca pe o tendință, nu ca pe un obiectiv. O rată de acces reușit de 99% pe un sistem care utilizează swap reprezintă un eșec al optimizării, nu un succes.
Cele patru parametri ARC care contează
Cea mai mare parte a reglajelor de producție se reduce la patru setări. Potriviți setarea cu presiunea pe care ați măsurat-o efectiv în linia de bază. Activitatea de swap indică zfs_arc_max. Recuperarea pierderilor de clienți care șterg în mod repetat un cache activ indică zfs_arc_min. Parcurgerea lentă a directoarelor indică limita de metadate.
| Parametru | Ce face | Când trebuie modificat | Risc în caz de setare incorectă |
|---|---|---|---|
zfs_arc_max | Limită maximă strictă pentru utilizarea memoriei RAM ARC | Găzduirea în comun a bazelor de date sau a mașinilor virtuale care necesită memorie RAM rezervată | Prea mică: mai multe operațiuni de I/O pe disc și latență. Prea mare: presiune asupra spațiului de swap sau OOM. |
zfs_arc_min | Limita minimă care împiedică reducerea agresivă a ARC | Sarcini de lucru cu vârfuri scurte de memorie care șterg continuu cache-ul | Prea mare: blochează aplicațiile în timpul unei presiuni reale asupra memoriei |
zfs_arc_meta_limit_percent | Proporția de ARC disponibilă pentru metadate (înlocuiește vechea zfs_arc_meta_limit) | Milioane de fișiere mici, arbori de directoare adânci, încetinire ls/find | Prea mică: căutările în directoare se desfășoară extrem de lent. Prea mare: limitează stocarea datelor în cache. |
zfs_arc_free_target | Câtă memorie liberă de sistem încearcă ZFS să mențină disponibilă | Servere cu vârfuri bruște de alocare (pornirea mașinilor virtuale, planuri de interogare mari) | Prea mare: ARC rămâne mic chiar și când există RAM disponibil |
Începeți cu cea mai mică modificare care rezolvă presiunea pe care o observați. Pentru zfs_arc_max, limita superioară corectă depinde de volumul de lucru (subiect abordat în secțiunea următoare). Pentru zfs_arc_min, o valoare minimă de 25% până la 50% din zfs_arc_max este un punct de plecare rezonabil, dacă aveți nevoie de unul. Pentru metadate, valorile implicite recente ale OpenZFS alocă deja metadatelor 75% din ARC prin zfs_arc_meta_limit_percent, ceea ce este suficient pentru majoritatea sarcinilor de lucru; modificați această setare doar atunci când lipsurile de metadate sunt clar vizibile în arcstat.
Aplicarea modificărilor pe Linux și FreeBSD
Pe Linux, testați o modificare în timpul rulării scriind în fișierul de parametri sysfs. Nu este necesară repornirea:
echo 17179869184 > /sys/module/zfs/parameters/zfs_arc_maxAceasta setează zfs_arc_max imediat la 16 GiB. Pentru ca modificarea să se mențină după repornire, adăugați-o la /etc/modprobe.d/zfs.conf:
options zfs zfs_arc_max=17179869184Pe FreeBSD, modificările în timpul rulării utilizează sysctl:
sysctl vfs.zfs.arc_max=17179869184Persistați aceeași valoare în /boot/loader.conf:
vfs.zfs.arc_max="17179869184"Modificați câte o setare pe rând, în pași mici de aproximativ 10% din memoria RAM totală. Urmăriți fereastra de monitorizare a problemelor. Păstrați modificarea doar dacă swap-ul rămâne la zero și latența este stabilă. Persistați modificarea doar după ce testul în timpul rulării este reușit.
Dimensionarea ARC în funcție de încărcarea de lucru
Memoria RAM totală nu este un punct de plecare adecvat. Dimensionarea ARC trebuie să țină cont de combinația de sarcini de lucru de pe server.
| Sarcina de lucru | Inițial zfs_arc_max | Prioritatea ARC | Note | Indicator cheie |
|---|---|---|---|---|
| Server de fișiere dedicat / NAS | 75% până la 80% din RAM | Date și metadate | Prefetch activat. Cache-ul agresiv este esențial. | Rata generală de accesare |
| Gazdă de virtualizare | 30% până la 40% din RAM | Echilibrat | Lăsați marjă pentru memoria RAM a sistemului invitat și pentru sarcinile gazdei. Orice valoare diferită de zero si/so înseamnă o limită și mai mare. | Swap gazdă (si/so) |
| Server de baze de date | 25% până la 50% din memorie RAM | Cu accent pe metadate | Rezervați mai întâi memorie pentru motorul bazei de date. Setați primarycache=metadata dacă motorul gestionează propriul cache de buffer. | Eșecuri de cerere |
| Țintă de backup/arhivare | Limită conservatoare | Numai metadate | Set primarycache=metadata astfel încât scanările într-o singură trecere să nu elimine blocurile utile. | Eșecuri de preîncărcare, rata de accesare a metadatelor |
| Analize / citiri repetate | Limită maximă mai mare după rezervarea altor cache-uri | Cu utilizare intensă a MFU | L2ARC pe NVMe poate menține setul de lucru activ pe durata execuțiilor de interogări. | Eșecuri de cerere |
Un gazdă VM trebuie să împartă memoria cu oaspeții săi, așa că o limită de 30% până la 40% este o valoare implicită sigură, iar 50% este deja prea mare pentru majoritatea configurațiilor. Bazele de date precum PostgreSQL și MySQL își gestionează propriile cache-uri de buffer, așa că rezervați mai întâi memoria pentru motor și lăsați ARC să folosească ce rămâne. Țintele de backup beneficiază de primarycache=metadata faptul că datele citite sunt rareori necesare din nou, iar dumneavoastră nu doriți ca o copie de rezervă nocturnă să parcurgă întregul pool și să golească restul cache-ului pe măsură ce avansează. Pentru orice sarcină de lucru, activitatea de swap în timp ce ARC este fixat la zfs_arc_max înseamnă că limita maximă este prea mare; această regulă nu se schimbă.
Diagnosticarea problemelor și cunoașterea momentului în care trebuie să vă opriți
Un ARC subdimensionat se manifestă prin IOPS de citire ridicate, rate de acces la cerere scăzute și navigare lentă în directoare, în timp ce sistemul încă dispune de memorie RAM liberă. Un ARC supradimensionat este mai puțin evident. Rata de acces pare în regulă, dar sistemul începe să utilizeze swap-ul, mediile de încărcare cresc, procesele se blochează în D în timp ce kernelul recuperează paginile ARC la cerere, iar în cel mai rău caz, OOM killer începe să aleagă victimele. Cache-ul pare sănătos, iar serverul funcționează extrem de prost.
Presiunea asupra metadatelor se manifestă atunci când demand_metadata_bytes este mult mai mare decât demand_data_bytes în arc_summary. Atunci metadatele se luptă cu datele pentru spațiu, iar limita procentuală a metadatelor merită mărită.
Corelați ceea ce observați cu prima setare pe care trebuie să o verificați:
| Simptom | Cauză probabilă | Primul parametru de verificat | Următorul pas |
|---|---|---|---|
Nivel ridicat await cu rate ridicate de ratare a cererilor | Setul de lucru depășește ARC | zfs_arc_max | Adăugați RAM sau adăugați L2ARC |
| Activitate de swap în timp ce ARC este mare | ARC limitează sistemul de operare sau aplicațiile | zfs_arc_max | Reduceți limita |
| Performanța scade după vârfuri de memorie | Evacuare agresivă în timpul recuperării | zfs_arc_min | Setați un prag minim între 25% și 50% din arc_max |
Operațiunile ls, find, operațiuni cu fișiere mici | Epuizarea cache-ului de metadate | zfs_arc_meta_limit_percent | Creșteți procentul de metadate |
În creștere memory_throttle_count | Presiune asupra memoriei la nivel de sistem | zfs_arc_max | Reduceți limita; verificați dacă indexul L2ARC este supraîncărcat |
L2ARC nu este gratuit. Indexul pentru intrările L2ARC se află în ARC-ul primar, iar dacă această suprasolicitare depășește aproximativ o treime din capacitatea totală a ARC-ului, cache-ul secundar face mai mult rău decât bine. Apelați la L2ARC numai atunci când setul de lucru este mai mare decât memoria RAM, dar încă încape pe un dispozitiv NVMe rapid, și numai atunci când rata de accesare a ARC-ului primar este deja satisfăcătoare.
Momentul potrivit pentru a opri optimizarea este atunci când latența rămâne constantă, swap-ul rămâne la zero pe durata aceleiași perioade de încărcare care a cauzat problema inițială, iar modificările suplimentare nu mai aduc nicio îmbunătățire. O rată de acces reușit ridicată nu înseamnă nimic dacă serverul folosește swap-ul. După acest punct, opriți ajustarea setărilor și revizuiți-le doar dacă aceeași problemă reapare în condițiile aceleiași sarcini de lucru.
Dacă aveți nevoie de un server cu suficient spațiu liber în memoria RAM pentru a rula ZFS corespunzător, fără a intra în conflict cu mașinile virtuale sau bazele de date pentru memorie (merită să citiți mai întâi articolul „De câtă memorie RAM aveți nevoie de fapt?”), aruncați o privire la serverele dedicate FDC.

Oboseala ochilor cauzată de ecranele digitale: Cum să vă protejați vederea într-o lume dominată de ecrane
Te uiți la ecran toată ziua? Află cum poți reduce oboseala oculară cauzată de ecranele digitale cu ajutorul unor tehnici și instrumente dovedite. Acest ghid este esențial pentru cei care lucrează de la distanță, pentru dezvoltatori și pentru oricine activează în domeniul tehnologiei.
4 min citire - 21 mai 2025
De ce este important să aveți un VPS performant și nelimitat
8 min citire - 9 mai 2025

Aveți întrebări sau aveți nevoie de o soluție personalizată?
Opțiuni flexibile
Acoperire globală
Implementare instantanee
Opțiuni flexibile
Acoperire globală
Implementare instantanee