Optymalizacja ZFS ARC: limity, ograniczenia i co należy mierzyć

11 min czytania - 24 czerwca 2026

hero section cover
Spis treści
  • Zmierz wskaźnik ARC, zanim zaczniesz cokolwiek dostosowywać
  • Cztery istotne parametry regulacyjne ARC
  • Dostosowanie ARC do obciążenia
  • Diagnozowanie problemów i wiedza, kiedy przestać
Udostępnij

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 1 zapewnia 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_summary wyświetla pojedynczą migawkę: rozmiar i wartość docelową ARC, podział MFU/MRU, współczynniki metadanych oraz aktywne parametry regulacyjne. Uruchom polecenie arc_summary -s arc tylko dla sekcji ARC.
  • Surowe liczniki działają w /proc/spl/kstat/zfs/arcstats w systemie Linux oraz w ramach kstat.zfs.misc oraz vfs.zfs drzewach 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:

MetrykaGdzie ją znaleźćDlaczego jest to istotne
Rozmiar ARC, wartość docelowa, wartość maksymalna (size, c, c_max)arcstat, kstatInformuje, czy pamięć ARC osiągnęła swój limit, czy też nadal ma miejsce na rozszerzenie
Wskaźniki trafień danych i metadanych na żądaniearcstat, arc_summaryBraki 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 1Cią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 wykorzystanieiostat -xŁączy nieudane operacje ARC z rzeczywistymi wąskimi gardłami pamięci masowej
memory_throttle_count/proc/spl/kstat/zfs/arcstatsRosną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.

ParametrCo robiKiedy należy to zmienićRyzyko w przypadku nieprawidłowego ustawienia
zfs_arc_maxSztywny górny limit wykorzystania pamięci RAM przez ARCWspółhostowanie baz danych lub maszyn wirtualnych wymagających zarezerwowanej pamięci RAMZbyt 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_minPróg zapobiegający nadmiernemu zmniejszaniu się ARCObciąż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_percentUdział 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/findZbyt niska: wyszukiwanie w katalogach przebiega bardzo wolno. Zbyt wysoka: ogranicza buforowanie danych.
zfs_arc_free_targetIle wolnej pamięci systemowej ZFS stara się utrzymać w stanie dostępnymSerwery 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_max

Spowoduje 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=17179869184

W systemie FreeBSD zmiany w czasie wykonywania wykorzystują sysctl:

sysctl vfs.zfs.arc_max=17179869184

Aby 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ążeniePoczątkowe zfs_arc_maxPriorytet ARCUwagiKluczowy wskaźnik
Dedykowany serwer plików / NAS75% do 80% pamięci RAMDane i metadaneWłączone pobieranie z wyprzedzeniem. Chodzi o agresywną pamięć podręczną.Ogólny współczynnik trafień
Host wirtualizacji30% do 40% pamięci RAMZrównoważonyZostaw 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 danychod 25% do 50% pamięci RAMZorientowane na metadaneNajpierw 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 / archiwumKonserwatywny limitTylko metadaneUstaw 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 odczytyWyższy limit po zarezerwowaniu innych pamięci podręcznychDuża liczba operacji MFUL2ARC 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ć:

ObjawPrawdopodobna przyczynaPierwszy parametr do sprawdzeniaKolejny krok
Wysoki await z dużą liczbą nieudanych żądańZestaw roboczy przekracza pojemność ARCzfs_arc_maxDodaj pamięć RAM lub dodaj L2ARC
Aktywność wymiany przy dużym ARCARC ogranicza dostępność pamięci dla systemu operacyjnego lub aplikacjizfs_arc_maxZmniejsz limit
Spadek wydajności po skokach zużycia pamięciAgresywne usuwanie danych podczas odzyskiwania pamięcizfs_arc_minUstaw dolną granicę na 25% do 50% arc_max
powolnych ls, findoperacji na małych plikachWyczerpanie pamięci podręcznej metadanychzfs_arc_meta_limit_percentZwiększ procent metadanych
Rosnące memory_throttle_countObciążenie pamięci w całym systemiezfs_arc_maxObniż 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.

Blog

Polecane w tym tygodniu

Więcej artykułów
Zmęczenie oczu spowodowane korzystaniem z urządzeń cyfrowych: jak chronić wzrok w świecie, w którym spędzamy dużo czasu przed ekranem

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

Więcej artykułów
background image

Masz pytania lub potrzebujesz niestandardowego rozwiązania?

icon

Elastyczne opcje

icon

Globalny zasięg

icon

Natychmiastowe wdrożenie

icon

Elastyczne opcje

icon

Globalny zasięg

icon

Natychmiastowe wdrożenie