Dziś zajmiemy się kluczowym aspektem zarządzania pamięcią RAM, który może znacząco poprawić responsywność Twojego serwera: ograniczaniem cache'u ZFS ARC.

Czym jest ZFS ARC i dlaczego jest "zachłanny"?

TrueNAS, zarówno w wersji CORE, jak i SCALE, opiera się na systemie plików ZFS. Jedną z jego najpotężniejszych funkcji jest ARC (Adaptive Replacement Cache). To dynamiczny bufor pamięci RAM, który ZFS wykorzystuje do przechowywania często używanych danych. Działa to podobnie do cache'u dyskowego, ale na poziomie pamięci RAM, drastycznie przyspieszając odczytywanie plików.

Domyślnie, ARC jest "zachłanny" – ZFS stara się wykorzystać do 90% dostępnej pamięci RAM w Twoim serwerze. To świetne dla wydajności samego magazynu danych, ale może stać się problemem, gdy na tym samym serwerze uruchamiasz maszyny wirtualne lub, co częściej spotykane w TrueNAS SCALE, aplikacje w kontenerach (takie jak Plex, qBittorrent, Unifi Controller czy Photoprism).

Problem: Aplikacje kontra ARC

Mimo że ZFS teoretycznie potrafi dynamicznie oddawać pamięć ARC aplikacjom, gdy jej potrzebują, w praktyce na TrueNAS SCALE proces ten bywa zbyt wolny. Powoduje to, że:

  1. Aplikacje uruchamiają się wolno: System musi najpierw "zwinąć" ARC, zanim Docker/Kubernetes dostanie wystarczająco RAM-u.

  2. Aplikacje działają niestabilnie: Często brakuje im pamięci, co prowadzi do błędów, zawieszeń, a nawet restartów.

  3. Interfejs TrueNAS spowalnia: Cały system może stać się mniej responsywny.

Pojawia się wtedy frustrujące uczucie, że Twój potężny serwer NAS działa wolniej niż powinien.

Rozwiązanie: Ograniczenie ZFS ARC

Na szczęście, możemy ręcznie narzucić limit na maksymalną ilość pamięci RAM, jaką może zużyć ARC. To prosta, ale niezwykle skuteczna optymalizacja!

Krok 1: Określ swój limit

Domyślnie ARC bierze większość RAM-u. Zalecam ustawienie limitu na poziomie 4 GB (4096 MB), co daje 4 294 967 296 bajtów. Ta wartość jest wystarczająca dla większości domowych zastosowań, zapewniając szybki dostęp do danych, jednocześnie pozostawiając spory zapas dla aplikacji.

Jeśli masz dużo RAM-u (np. 32 GB lub więcej) i uruchamiasz niewiele aplikacji, możesz rozważyć 6 GB, ale dla standardowych 16-32 GB RAM i wielu aplikacji, 4 GB to złoty środek.

Krok 2: Tymczasowe zastosowanie (przez Shell)

Aby przetestować zmianę, możesz użyć wiersza poleceń TrueNAS SCALE. Zaloguj się do swojego TrueNAS SCALE, przejdź do System Settings -> Shell i wpisz poniższą komendę:

Bash
echo 4294967296 | sudo tee /sys/module/zfs/parameters/zfs_arc_max

Dlaczego sudo tee? Bezpośrednie przekierowanie (>) z sudo nie działa tak, jak myślimy. sudo uruchamia tylko echo jako root, ale przekierowanie pliku wykonuje Twoja powłoka użytkownika, co skutkuje błędem "Permission Denied". tee rozwiązuje ten problem, pozwalając na zapis z uprawnieniami root.

Po wykonaniu tej komendy, natychmiast zauważysz poprawę w działaniu aplikacji. Możesz to zweryfikować, patrząc na widget Memory w Dashboardzie – "Free" RAM powinien się zwiększyć.

Krok 3: Trwałe zastosowanie (przez GUI)

Komenda wpisana w Shellu działa tylko do momentu restartu serwera. Aby Twoje ustawienie przetrwało ponowne uruchomienie, musisz dodać je jako skrypt Init/Shutdown Script:

  1. Przejdź do System Settings -> Advanced.

  2. Znajdź sekcję Init/Shutdown Scripts i kliknij przycisk Add.

  3. Wypełnij formularz:

    • Description: Limit ARC RAM do 4GB

    • Type: Wybierz Command.

    • Command: Wklej: echo 4294967296 > /sys/module/zfs/parameters/zfs_arc_max

    • When: Wybierz Post Init (to kluczowe – skrypt uruchomi się po załadowaniu systemu).

  4. Upewnij się, że opcja Enabled jest zaznaczona.

  5. Kliknij Save.

Podsumowanie

Ograniczenie ZFS ARC to prosta, ale niezwykle efektywna metoda na znaczną poprawę responsywności i stabilności aplikacji działających na Twoim TrueNAS SCALE. Jeśli doświadczasz problemów z "mulącymi" aplikacjami, to ustawienie prawdopodobnie rozwiąże Twój problem!

Pamiętaj, aby monitorować wykorzystanie pamięci po wprowadzeniu zmian. Jeśli kiedyś zmodernizujesz serwer o więcej pamięci RAM, możesz wrócić do tego ustawienia i dostosować limit ARC do swoich nowych potrzeb.

Powrót do bloga