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ě zabírat 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 oblasti, 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/arcstatsv systému Linux 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á stojí za zaznamenání před jakoukoli změnou:
| Metrika | Kde ji najít | Proč je důležitá |
|---|---|---|
Velikost ARC, cílová hodnota, maximum (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í paměť při velkém ARC je nejjasnějším znakem přetížení paměti |
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. 99% poměr zásahů 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. Obnovení ztrát, které neustále vymazávají vyhřívanou mezipaměť, ukazuje na zfs_arc_min. Pomalé procházení adresářů ukazuje na limit metadat.
| Nastavovací parametr | Co dělá | Kdy jej změnit | Riziko v případě nesprávného 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 nedostatek paměti (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í mezipaměť | 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 následující čá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 již nejnovější výchozí nastavení OpenZFS přiděluje metadatům 75 % ARC prostřednictvím zfs_arc_meta_limit_percent, což je pro většinu pracovních zátěží dostatek; tuto hodnotu upravujte pouze tehdy, jsou-li 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. Aby změna přetrvala i po restartu, 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 |
| Hostitel 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 důrazem na metadata | 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 nevymazalo užitečné bloky. | Počet chyb 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 při vyžádání |
Host virtuálních strojů 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 příliš vysoký; 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 výrazně vyšší než demand_data_bytes v arc_summary. To znamená, že metadata soupeří s daty o místo, 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 požadavcích | 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ě způsobilo problém, 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 upravovat nastavení 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.

Digitální únava očí: Jak chránit svůj zrak ve světě, kde trávíme mnoho času před obrazovkami
Celý den zíráte do obrazovky? Naučte se, jak snížit digitální únavu očí pomocí osvědčených technik a nástrojů. Tento průvodce je nepostradatelný pro pracovníky na dálku, vývojáře a všechny, kdo se pohybují v oblasti technologií.
4 min čtení - 21. května 2025
Proč je důležité mít výkonný VPS s neomezeným datovým přenosem
8 min čtení - 9. května 2025

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í