Ladění ZFS ARC: limity, omezení a co měřit
11 min čtení - 24. června 2026

Ladění ZFS ARC podle pracovního zatížení. Které parametry jsou důležité, jak nastavit zfs_arc_max v systémech Linux a FreeBSD a jak poznat, že je ladění hotové.
ZFS si ve výchozím nastavení tiše zabere zhruba polovinu systémové RAM pro svou čtecí cache, a na nevhodném typu serveru to znamená aktivitu swapování, ukončování procesů kvůli nedostatku paměti (OOM) nebo situaci, kdy databáze soupeří o paměť s souborovým systémem. Ladění ARC v ZFS spočívá v rozhodnutí, kolik z této RAM smí ARC skutečně zabrat a čeho se vzdáte, abyste nastavili tento limit. Tento příspěvek popisuje, jak ARC využívá paměť, co je třeba změřit, než začnete cokoli měnit, několik parametrů, které stojí za to upravit, a rozumné výchozí hodnoty pro souborové servery, hypervizory, databáze a cíle zálohování. Pokud jde o snapshoty v ZFS, podívejte se na náš průvodce po ZFS snapshotách.
Změřte ARC, než začnete cokoli ladit
Neměňte ani jeden nastavitelný parametr, dokud nebudete mít základní hodnoty z běžného období s vysokým zatížením. Snímky z období s nízkým zatížením vás nasměrují špatným směrem. Noční zálohy, týdenní zprávy a dávkové úlohy jsou obvykle místy, kde se chování ARC stává zajímavým, proto sbírejte data v průběhu několika dní.
Většinu toho, co potřebujete, pokryjí tři nástroje:
arcstat 1poskytuje živý posuvný přehled počítadel hitů a missů, aktivity poptávky versus přednačítání a aktuální velikosti ARC. Používejte jej během zátěžových testů a zálohovacích oken.arc_summaryvytiskne jeden snímek: velikost ARC a cílovou hodnotu, rozdělení MFU/MRU, poměry metadat a aktivní laditelné parametry. Spusťte příkazarc_summary -s arcpouze pro sekci ARC.- Surové počítadla jsou k dispozici
/proc/spl/kstat/zfs/arcstatsna Linuxu a podkstat.zfs.miscavfs.zfsstromech sysctl ve FreeBSD. Získejte je z monitorování, místo abyste parsovali formátovaný výstup.
Počítadla, která je vhodné zaznamenat před jakoukoli změnou:
| Metrika | Kde ji najít | Proč je důležitá |
|---|---|---|
Velikost ARC, cílová hodnota, maximální hodnota (size, c, c_max) | arcstat, kstat | Uvádí, zda je ARC vyčerpán na maximum, nebo má ještě prostor pro růst |
| Míra zásahů dat a metadat na základě poptávky | arcstat, arc_summary | Nesplnění poptávky se přímo promítá do latence aplikace |
Dostupná paměť a aktivita swapování (si/so) | free -h, vmstat 1 | Trvalé načítání a ukládání na odkládací prostor při velkém ARC je nejjasnějším znakem tlaku na paměť |
Doba obsluhy disku (await) a využití | iostat -x | Propojuje selhání ARC se skutečnými úzkými místy úložiště |
memory_throttle_count | /proc/spl/kstat/zfs/arcstats | Rostoucí počet potvrzuje, že ZFS je omezován kvůli nedostatku paměti |
V této souvislosti se lidé často mýlí ve dvou věcech. Sledujte dostupnou paměť, nikoli volnou paměť; Linux bez problémů hlásí nízkou hodnotu volné RAM jako stabilní stav a to samo o sobě není problém. Důležitým signálem je dostupná paměť blížící se nule v kombinaci s trvalou aktivitou odkládacího prostoru (důvody vysvětluje úvod do správy paměti v Linuxu). A poměr zásahů berte jako trend, ne jako cíl. Poměr zásahů 99 % na stroji, který využívá odkládací prostor, je selháním ladění, nikoli úspěchem.
Čtyři důležité nastavitelné parametry ARC
Většina ladění v produkčním prostředí se omezuje na čtyři nastavení. Nastavení přizpůsobte tlaku, který jste skutečně naměřili v základní linii. Aktivity výměny poukazují na zfs_arc_max. Znovuzískání odchodů, které neustále vymazávají „hot cache“, ukazuje na zfs_arc_min. Pomalé procházení adresářů ukazuje na limit metadat.
| Nastavovací parametr | Co dělá | Kdy jej změnit | Riziko při nesprávném nastavení |
|---|---|---|---|
zfs_arc_max | Pevná horní hranice využití paměti ARC RAM | Sdílené hostování databází nebo virtuálních strojů, které vyžadují vyhrazenou RAM | Příliš nízká hodnota: vyšší zatížení disku a latence. Příliš vysoká hodnota: tlak na odkládací prostor nebo OOM. |
zfs_arc_min | Minimální hodnota, která zabrání agresivnímu zmenšování ARC | Pracovní zátěže s krátkými výkyvy paměti, které neustále vymazávají cache | Příliš vysoká: omezuje výkon aplikací při skutečném nedostatku paměti |
zfs_arc_meta_limit_percent | Podíl ARC dostupný pro metadata (nahrazuje starší zfs_arc_meta_limit) | Miliony malých souborů, hluboké adresářové stromy, pomalé ls/find | Příliš nízká: vyhledávání v adresářích se zpomaluje. Příliš vysoká: omezuje ukládání dat do mezipaměti. |
zfs_arc_free_target | Kolik volné systémové paměti se ZFS snaží udržet k dispozici | Servery s náhlými velkými návaly alokací (spouštění virtuálních strojů, rozsáhlé dotazové plány) | Příliš vysoká hodnota: ARC zůstává malý, i když je k dispozici RAM |
Začněte s nejmenší změnou, která vyřeší tlak, který pozorujete. zfs_arc_max, správná horní hranice závisí na pracovním zatížení (to bude popsáno v další části). Pro zfs_arc_minje dolní hranice 25 % až 50 % zfs_arc_max je rozumným výchozím bodem, pokud vůbec nějaký potřebujete. U metadat poskytují nejnovější výchozí nastavení OpenZFS metadatům již 75 % ARC prostřednictvím zfs_arc_meta_limit_percent, což je pro většinu pracovních zátěží velkorysé; zasahujte do toho pouze tehdy, jsou-li chyby v metadatech jasně viditelné v arcstat.
Aplikace změn v systémech Linux a FreeBSD
V systému Linux otestujte změnu za běhu zápisem do parametrického souboru sysfs. Není třeba restartovat:
echo 17179869184 > /sys/module/zfs/parameters/zfs_arc_maxTím se zfs_arc_max hodnotu na 16 GiB. Chcete-li, aby změna přetrvala restart, přidejte ji do /etc/modprobe.d/zfs.conf:
options zfs zfs_arc_max=17179869184Ve FreeBSD se pro změny za běhu používá sysctl:
sysctl vfs.zfs.arc_max=17179869184Uchovejte stejnou hodnotu v /boot/loader.conf:
vfs.zfs.arc_max="17179869184"Měňte vždy jen jedno nastavení, v malých krocích o velikosti přibližně 10 % celkové RAM. Sledujte okno s problémy. Změnu ponechte pouze v případě, že swap zůstane na nule a latence je stabilní. Změnu uložte trvale až po úspěšném absolvování testu za běhu.
Nastavení ARC podle pracovního zatížení
Celková velikost RAM není správným výchozím bodem. Dimenzování ARC by mělo vycházet ze skladby pracovních zátěží na daném zařízení.
| Pracovní zátěž | Počáteční zfs_arc_max | Priorita ARC | Poznámky | Klíčová metrika |
|---|---|---|---|---|
| Vyhrazený souborový server / NAS | 75 % až 80 % paměti RAM | Data a metadata | Přednačítání zapnuto. Klíčem je agresivní cache. | Celková úspěšnost |
| Host virtualizace | 30 % až 40 % paměti RAM | Vyvážené | Nechte rezervu pro RAM hosta a úlohy hostitele. Jakákoli hodnota odlišná od nuly si/so znamená další omezení. | Swap hostitele (si/so) |
| Databázový server | 25 % až 50 % paměti RAM | S převahou metadat | Nejprve vyhraďte paměť pro databázový engine. Nastavte primarycache=metadata , pokud engine spravuje vlastní vyrovnávací paměť. | Nedostatek paměti při požadavcích |
| Cíl zálohování / archivace | Konzervativní limit | Pouze metadata | Nastaveno primarycache=metadata tak, aby skenování v jednom průchodu nevyřazovalo užitečné bloky. | Chyby přednačítání, míra úspěšnosti metadat |
| Analýza / opakované čtení | Vyšší limit po rezervaci pro ostatní mezipaměti | S vysokým počtem MFU | L2ARC na NVMe dokáže udržet často používanou sadu dat během provádění dotazů. | Neshoda poptávky |
Host virtuálního stroje musí sdílet paměť se svými hosty, takže limit 30 % až 40 % je bezpečným výchozím nastavením a 50 % je u většiny sestavení již příliš vysoké. Databáze jako PostgreSQL a MySQL spravují své vlastní vyrovnávací paměti, takže nejprve rezervujete paměť pro engine a ARC necháte to, co zbývá. Cíle zálohování z toho těží primarycache=metadata protože načtená data se zřídka znovu potřebují a nechcete, aby noční záloha procházela celý pool a přitom vyprázdňovala zbytek mezipaměti. U všech typů zátěže platí, že pokud je aktivita swapování při fixaci ARC na zfs_arc_max znamená, že limit je nastaven příliš vysoko; toto pravidlo se nemění.
Diagnostika problémů a rozpoznání, kdy přestat
Příliš malá velikost ARC se projevuje vysokým počtem IOPS při čtení, nízkou mírou úspěšnosti požadavků a pomalým procházením adresářů, zatímco systém má stále volnou RAM. Příliš velká velikost ARC je méně zřejmá. Míra úspěšnosti vypadá v pořádku, ale systém začne swapovat, průměrné zatížení stoupá, procesy se blokují ve D stavu, zatímco jádro uvolňuje stránky ARC na vyžádání, a v nejhorším případě začne OOM killer vybírat oběti. Cache vypadá v pořádku, ale server funguje příšerně.
Tlak na metadata se projeví, když demand_metadata_bytes je mnohem vyšší než demand_data_bytes v arc_summary. To znamená, že metadata soupeří o místo s daty, a v takovém případě se vyplatí zvýšit procentuální limit pro metadata.
Porovnejte to, co vidíte, s prvním nastavením, které je třeba zkontrolovat:
| Příznak | Pravděpodobná příčina | První nastavitelný parametr, který je třeba zkontrolovat | Další krok |
|---|---|---|---|
Vysoká await s vysokým počtem chyb při vyžádání | Pracovní sada překračuje ARC | zfs_arc_max | Přidejte RAM nebo L2ARC |
| Aktivita swapování při velkém ARC | ARC omezuje operační systém nebo aplikace | zfs_arc_max | Snižte limit |
| Výkon klesá po výkyvech paměti | Agresivní uvolňování paměti během reclaimu | zfs_arc_min | Nastavte dolní hranici na 25 % až 50 % arc_max |
pomalých ls, findoperací s malými soubory | Nedostatek mezipaměti pro metadata | zfs_arc_meta_limit_percent | Zvyšte procentuální podíl metadat |
Rostoucí memory_throttle_count | Tlak na paměť v celém systému | zfs_arc_max | Snižte limit; zkontrolujte, zda nedochází k nadměrnému nárůstu indexu L2ARC |
L2ARC není bez nákladů. Index pro položky L2ARC je uložen v primárním ARC a pokud tato režie překročí přibližně třetinu celkové kapacity ARC, sekundární mezipaměť přináší více škody než užitku. Používejte L2ARC pouze tehdy, když je pracovní sada větší než RAM, ale stále se vejde na rychlé zařízení NVMe, a pouze tehdy, když je poměr zásahů v primární ARC již v pořádku.
Správný čas na ukončení ladění nastává, když se latence ustálí, swap zůstává na nule i během stejného období vysokého zatížení, které původní problém způsobilo, a další změny již nic nezlepšují. Vysoká úspěšnost přístupů k ARC nemá žádný význam, pokud server provádí swapování. Po dosažení tohoto bodu přestaňte nastavení upravovat a vraťte se k nim pouze v případě, že se stejný problém znovu objeví při stejném pracovním zatížení.
Pokud potřebujete server s dostatečnou rezervou RAM, aby systém ZFS běžel správně, aniž by se o paměť musel přetahovat s vašimi virtuálními stroji nebo databázemi (nejprve si přečtěte, kolik RAM vlastně potřebujete), podívejte se na dedikované servery FDC.

Návod k programu iperf3: Testování rychlosti sítě v systémech Linux a Windows
Nainstalujte si iperf3, proveďte testy šířky pásma a vyladěte TCP buffery, abyste dosáhli přesných výsledků v systémech Linux a Windows. Zahrnuje testování UDP, obousměrné testy a testy 10GbE+.
10 min čtení - 7. května 2026
Optimalizované profily pro optimalizaci zatížení linuxových serverů
16 min čtení - 9. června 2026

Máte dotazy nebo potřebujete vlastní řešení?
Flexibilní možnosti
Globální dosah
Okamžité nasazení
Flexibilní možnosti
Globální dosah
Okamžité nasazení