Optymalizacja ZFS ARC: limity, ograniczenia i co należy mierzyć
11 min czytania - 24 czerwca 2026

Optymalizacja ZFS ARC pod kątem obciążenia. Które parametry mają znaczenie, jak ustawić zfs_arc_max w systemach Linux i FreeBSD oraz jak rozpoznać, że optymalizacja została zakończona.
ZFS domyślnie zajmuje około połowy pamięci RAM systemu na swoją pamięć podręczną odczytu, a na nieodpowiednim serwerze oznacza to aktywność pamięci wymiany, zabijanie procesów z powodu braku pamięci (OOM) lub konkurowanie bazy danych z systemem plików o pamięć. Optymalizacja ARC w ZFS polega na ustaleniu, ile z tej pamięci RAM ARC może faktycznie zachować oraz z czego trzeba zrezygnować, aby ustawić ten limit. W tym wpisie omówiono sposób wykorzystania pamięci przez ARC, co należy zmierzyć przed podjęciem jakichkolwiek działań, kilka parametrów, które warto zmienić, oraz rozsądne wartości początkowe dla serwerów plików, hiperwizorów, baz danych i miejsc docelowych kopii zapasowych. Jeśli chodzi o migawki w systemie ZFS, zapoznaj się z naszym przewodnikiem po migawkach ZFS.
Zmierz wskaźnik ARC, zanim zaczniesz cokolwiek dostosowywać
Nie zmieniaj żadnego z parametrów, dopóki nie uzyskasz danych bazowych z normalnego okresu wzmożonego ruchu. Migawki z okresów spokoju wprowadzą cię w błąd. Nocne kopie zapasowe, cotygodniowe raporty i zadania wsadowe to zazwyczaj sytuacje, w których zachowanie ARC staje się interesujące, dlatego zbieraj dane z kilku dni.
Trzy narzędzia pokrywają większość potrzeb:
arcstat 1zapewnia na bieżąco przewijany widok liczników trafień i pominięć, aktywności zapotrzebowania w porównaniu z aktywnością pobierania z wyprzedzeniem oraz aktualnego rozmiaru ARC. Używaj go podczas testów obciążenia i okien tworzenia kopii zapasowych.arc_summarywyświetla pojedynczą migawkę: rozmiar i wartość docelową ARC, podział MFU/MRU, współczynniki metadanych oraz aktywne parametry regulacyjne. Uruchom poleceniearc_summary -s arctylko dla sekcji ARC.- Surowe liczniki działają w
/proc/spl/kstat/zfs/arcstatsw systemie Linux oraz w ramachkstat.zfs.miscorazvfs.zfsdrzewach sysctl w systemie FreeBSD. Należy je pobierać z systemu monitorowania, zamiast analizować sformatowane dane wyjściowe.
Liczniki, które warto zarejestrować przed wprowadzeniem jakichkolwiek zmian:
| Metryka | Gdzie ją znaleźć | Dlaczego jest to istotne |
|---|---|---|
Rozmiar ARC, wartość docelowa, wartość maksymalna (size, c, c_max) | arcstat, kstat | Informuje, czy pamięć ARC osiągnęła swój limit, czy też nadal ma miejsce na rozszerzenie |
| Wskaźniki trafień danych i metadanych na żądanie | arcstat, arc_summary | Braki w zaspokajaniu zapotrzebowania przekładają się bezpośrednio na opóźnienia w działaniu aplikacji |
Dostępna pamięć i aktywność wymiany (si/so) | free -h, vmstat 1 | Ciągłe operacje zamiany pamięci przy dużym rozmiarze ARC to najwyraźniejszy znak obciążenia pamięci |
Czas obsługi dysku (await) oraz jej wykorzystanie | iostat -x | Łączy nieudane operacje ARC z rzeczywistymi wąskimi gardłami pamięci masowej |
memory_throttle_count | /proc/spl/kstat/zfs/arcstats | Rosnąca liczba potwierdza, że system ZFS jest ograniczany z powodu obciążenia pamięci |
Są dwie rzeczy, które ludzie często mylą w tym kontekście. Należy obserwować pamięć dostępną, a nie wolną; system Linux bez problemu zgłasza niski poziom wolnej pamięci RAM jako stan stabilny, a samo to nie stanowi problemu. Istotnym sygnałem jest pamięć dostępna bliska zeru w połączeniu z utrzymującą się aktywnością wymiany (podręcznik zarządzania pamięcią w systemie Linux wyjaśnia, dlaczego). Należy też traktować współczynnik trafień jako trend, a nie cel. Współczynnik trafień na poziomie 99% na komputerze, na którym odbywa się wymiana, oznacza niepowodzenie w dostrajaniu, a nie sukces.
Cztery istotne parametry regulacyjne ARC
Większość dostrajania w środowisku produkcyjnym sprowadza się do czterech ustawień. Dopasuj ustawienie do ciśnienia faktycznie zmierzonego w pomiarach bazowych. Aktywność wymiany wskazuje na zfs_arc_max. Odzyskiwanie danych, które ciągle kasują gorącą pamięć podręczną, wskazuje na zfs_arc_min. Powolne przeszukiwanie katalogów wskazuje na limit metadanych.
| Parametr | Co robi | Kiedy należy to zmienić | Ryzyko w przypadku nieprawidłowego ustawienia |
|---|---|---|---|
zfs_arc_max | Sztywny górny limit wykorzystania pamięci RAM przez ARC | Współhostowanie baz danych lub maszyn wirtualnych wymagających zarezerwowanej pamięci RAM | Zbyt niska wartość: większa liczba operacji wejścia/wyjścia na dysku i opóźnienia. Zbyt wysoka wartość: obciążenie pamięci wymiany lub błąd OOM. |
zfs_arc_min | Próg zapobiegający nadmiernemu zmniejszaniu się ARC | Obciążenia charakteryzujące się krótkimi skokami zapotrzebowania na pamięć, które nieustannie czyszczą pamięć podręczną | Zbyt wysoka: powoduje niedobór pamięci dla aplikacji w sytuacji rzeczywistego obciążenia pamięci |
zfs_arc_meta_limit_percent | Udział pamięci ARC dostępnej dla metadanych (zastępuje starszą zfs_arc_meta_limit) | Miliony małych plików, rozgałęzione drzewa katalogów, spowolnienie ls/find | Zbyt niska: wyszukiwanie w katalogach przebiega bardzo wolno. Zbyt wysoka: ogranicza buforowanie danych. |
zfs_arc_free_target | Ile wolnej pamięci systemowej ZFS stara się utrzymać w stanie dostępnym | Serwery z nagłymi dużymi skokami alokacji (uruchamianie maszyn wirtualnych, rozbudowane plany zapytań) | Zbyt wysoka: ARC pozostaje mały, nawet gdy pamięć RAM jest dostępna |
Zacznij od najmniejszej zmiany, która rozwiązuje zauważony problem. W zfs_arc_max, właściwy pułap zależy od obciążenia (omówione w następnej sekcji). W przypadku zfs_arc_minwartość minimalna wynosząca od 25% do 50% zfs_arc_max jest rozsądnym punktem wyjścia, jeśli w ogóle jest on potrzebny. W przypadku metadanych najnowsze domyślne ustawienia OpenZFS już przydzielają im 75% ARC poprzez zfs_arc_meta_limit_percent, co jest wartością wystarczającą dla większości obciążeń; należy to zmieniać tylko wtedy, gdy braki metadanych są wyraźnie widoczne w arcstat.
Wdrażanie zmian w systemach Linux i FreeBSD
W systemie Linux zmianę można przetestować w trakcie działania systemu, zapisując ją w pliku parametrów sysfs. Nie jest wymagane ponowne uruchomienie systemu:
echo 17179869184 > /sys/module/zfs/parameters/zfs_arc_maxSpowoduje to zfs_arc_max wartość na 16 GiB. Aby zmiana została zachowana po ponownym uruchomieniu, dodaj ją do /etc/modprobe.d/zfs.conf:
options zfs zfs_arc_max=17179869184W systemie FreeBSD zmiany w czasie wykonywania wykorzystują sysctl:
sysctl vfs.zfs.arc_max=17179869184Aby zachować tę samą wartość w /boot/loader.conf:
vfs.zfs.arc_max="17179869184"Zmieniaj po jednym ustawieniu na raz, małymi krokami wynoszącymi około 10% całkowitej pamięci RAM. Obserwuj okno z problemami. Zachowaj zmianę tylko wtedy, gdy wymiana pozostaje na poziomie zero, a opóźnienie jest stabilne. Utrwal zmianę dopiero po pomyślnym zakończeniu testu w czasie wykonywania.
Dostosowanie ARC do obciążenia
Całkowita pojemność pamięci RAM nie jest właściwym punktem wyjścia. Dobór rozmiaru pamięci ARC powinien opierać się na strukturze obciążenia danego urządzenia.
| Obciążenie | Początkowe zfs_arc_max | Priorytet ARC | Uwagi | Kluczowy wskaźnik |
|---|---|---|---|---|
| Dedykowany serwer plików / NAS | 75% do 80% pamięci RAM | Dane i metadane | Włączone pobieranie z wyprzedzeniem. Chodzi o agresywną pamięć podręczną. | Ogólny współczynnik trafień |
| Host wirtualizacji | 30% do 40% pamięci RAM | Zrównoważony | Zostaw rezerwę dla pamięci RAM systemu-gościa i zadań hosta. Każda wartość niezerowa si/so oznacza dalsze ograniczenie. | Pamięć wymiany hosta (si/so) |
| Serwer bazy danych | od 25% do 50% pamięci RAM | Zorientowane na metadane | Najpierw zarezerwuj pamięć dla silnika bazy danych. Ustaw primarycache=metadata , jeśli silnik samodzielnie zarządza własną pamięcią podręczną bufora. | Braki w zaspokojeniu żądań |
| Miejsce docelowe kopii zapasowej / archiwum | Konserwatywny limit | Tylko metadane | Ustaw primarycache=metadata tak, aby skanowanie w jednym przebiegu nie usuwało przydatnych bloków. | Błędy pobierania z wyprzedzeniem, wskaźnik trafień metadanych |
| Analiza / wielokrotne odczyty | Wyższy limit po zarezerwowaniu innych pamięci podręcznych | Duża liczba operacji MFU | L2ARC w pamięci NVMe może utrzymywać często używany zestaw danych podczas kolejnych operacji zapytań. | Błędy związane z zapotrzebowaniem |
Host maszyn wirtualnych musi dzielić pamięć ze swoimi gośćmi, więc limit od 30% do 40% jest bezpiecznym ustawieniem domyślnym, a 50% to już zbyt dużo w większości konfiguracji. Bazy danych, takie jak PostgreSQL i MySQL, zarządzają własnymi pamięciami podręcznymi, więc najpierw rezerwuje się pamięć dla silnika, a ARC otrzymuje to, co pozostało. Miejsca docelowe kopii zapasowych czerpią korzyści z primarycache=metadata ponieważ odczytywane dane rzadko są ponownie potrzebne, a nie chcesz, aby nocna kopia zapasowa przeszukiwała całą pulę i opróżniała resztę pamięci podręcznej po drodze. We wszystkich obciążeniach aktywność wymiany, gdy ARC jest przypięty na poziomie zfs_arc_max oznacza, że limit jest zbyt wysoki; ta zasada pozostaje niezmienna.
Diagnozowanie problemów i wiedza, kiedy przestać
Zbyt mała pamięć ARC objawia się wysoką liczbą operacji IOPS odczytu, niskim współczynnikiem trafień zapytań oraz powolnym przeglądaniem katalogów, podczas gdy system nadal dysponuje wolną pamięcią RAM. Zbyt duża pamięć ARC jest mniej oczywista. Współczynnik trafień wygląda dobrze, ale serwer zaczyna korzystać z pamięci wymiany, średnie obciążenie rośnie, procesy blokują się w D stanie, podczas gdy jądro odzyskuje strony ARC na żądanie, a w najgorszym przypadku mechanizm OOM killer zaczyna wybierać ofiary. Pamięć podręczna wygląda na sprawną, a serwer działa fatalnie.
Obciążenie metadanymi ujawnia się, gdy demand_metadata_bytes znacznie przewyższa demand_data_bytes w arc_summary. Oznacza to, że metadane walczą o miejsce z danymi i warto podnieść limit procentowy metadanych.
Porównaj to, co widzisz, z pierwszym ustawieniem, które należy sprawdzić:
| Objaw | Prawdopodobna przyczyna | Pierwszy parametr do sprawdzenia | Kolejny krok |
|---|---|---|---|
Wysoki await z dużą liczbą nieudanych żądań | Zestaw roboczy przekracza pojemność ARC | zfs_arc_max | Dodaj pamięć RAM lub dodaj L2ARC |
| Aktywność wymiany przy dużym ARC | ARC ogranicza dostępność pamięci dla systemu operacyjnego lub aplikacji | zfs_arc_max | Zmniejsz limit |
| Spadek wydajności po skokach zużycia pamięci | Agresywne usuwanie danych podczas odzyskiwania pamięci | zfs_arc_min | Ustaw dolną granicę na 25% do 50% arc_max |
powolnych ls, findoperacji na małych plikach | Wyczerpanie pamięci podręcznej metadanych | zfs_arc_meta_limit_percent | Zwiększ procent metadanych |
Rosnące memory_throttle_count | Obciążenie pamięci w całym systemie | zfs_arc_max | Obniż limit; sprawdź, czy indeks L2ARC nie jest nadmiernie rozbudowany |
L2ARC nie jest bezpłatny. Indeks wpisów L2ARC znajduje się w głównym ARC, a jeśli obciążenie to przekroczy około jednej trzeciej całkowitej pojemności ARC, pamięć podręczna drugiego poziomu przynosi więcej szkody niż pożytku. Z L2ARC należy korzystać tylko wtedy, gdy zestaw roboczy jest większy niż pamięć RAM, ale nadal mieści się na szybkim urządzeniu NVMe, i tylko wtedy, gdy współczynnik trafień w pamięci ARC głównej jest już na odpowiednim poziomie.
Właściwym momentem na zaprzestanie optymalizacji jest sytuacja, gdy opóźnienie pozostaje na stałym poziomie, swap utrzymuje się na poziomie zerowym w tym samym oknie obciążenia, które spowodowało pierwotny problem, a dalsze zmiany nie przynoszą już żadnej poprawy. Wysoki współczynnik trafień nie ma znaczenia, jeśli serwer korzysta ze swapowania. Po osiągnięciu tego punktu należy zaprzestać dostosowywania ustawień i powrócić do nich tylko wtedy, gdy ten sam problem powróci przy takim samym obciążeniu.
Jeśli potrzebujesz serwera z wystarczającą rezerwą pamięci RAM, aby poprawnie uruchamiać system plików ZFS bez konkurowania o pamięć z maszynami wirtualnymi lub bazami danych (warto najpierw przeczytać, ile pamięci RAM faktycznie potrzebujesz), zapoznaj się z ofertą serwerów dedykowanych FDC.

Zmęczenie oczu spowodowane korzystaniem z urządzeń cyfrowych: jak chronić wzrok w świecie, w którym spędzamy dużo czasu przed ekranem
Cały dzień wpatrujesz się w ekran? Dowiedz się, jak zmniejszyć zmęczenie oczu spowodowane pracą z ekranem, korzystając ze sprawdzonych technik i narzędzi. Ten przewodnik jest niezbędny dla osób pracujących zdalnie, programistów i wszystkich osób z branży technologicznej.
4 min czytania - 21 maja 2025
Dlaczego warto mieć wydajny serwer VPS z nieograniczonym transferem danych
8 min czytania - 9 maja 2025

Masz pytania lub potrzebujesz niestandardowego rozwiązania?
Elastyczne opcje
Globalny zasięg
Natychmiastowe wdrożenie
Elastyczne opcje
Globalny zasięg
Natychmiastowe wdrożenie