Oczyszczanie wolnej pamięci RAM w systemie Linux

Jeśli proces w systemie Linux zużywa dużo pamięci, albo masz wrażenie że system wykorzystuje więcej wolnej pamięci niż powinien, można ją łatwo zwolnić. W tym poradniku pokażemy, jak wyczyścić pamięć podręczną RAM, bufor i przestrzeń wymiany w systemie Linux, aby zwiększyć ogólną wydajność.
    Słownik pojęć:

  • Pamięć podręczna jest mechanizmem używanym przez jądro do przechowywania regularnie używanych danych. Chociaż zwiększa to szybkość reakcji systemu, przeciążona pamięć podręczna może prowadzić do przechowywania przestarzałych danych, wpływając na wydajność.
  • Bufor przechowuje dane tymczasowo, ale różni się przeznaczeniem. Bufory przechowują dane przesyłane między komponentami, takimi jak procesor i dysk twardy, ułatwiając płynną komunikację. Jednak nadmiar buforowanych danych może zmniejszyć szybkość systemu.
  • Przestrzeń wymiany to przydzielony obszar na dysku twardym, który działa jako pamięć wirtualna, gdy fizyczna pamięć RAM jest wyczerpana. Zapobiega to awariom systemu z powodu braku pamięci, ale może spowolnić system, jeśli jest nadużywany.
  • W systemie Linux, "Inode" (indeks węzła) to struktura danych, która reprezentuje plik. Każdy plik w systemie Linux ma unikalny Inode, który zawiera informacje o pliku, takie jak jego rozmiar, właściciel, uprawnienia, daty utworzenia, modyfikacji i dostępu, a także lokalizację danych pliku na dysku. Dentry (wpis katalogowy) to struktura danych, która reprezentuje katalog. Dentry są używane do budowania pamięci podręcznej, która reprezentuje strukturę plików na dysku. Gdy system operacyjny musi uzyskać listę katalogów, może przejść do Dentry - jeśli katalog jest tam - i wylistować jego zawartość (serię Inode’ów).
Każdy system Linux ma trzy opcje czyszczenia pamięci podręcznej bez przerywania jakichkolwiek procesów lub usług. Aby wyczyścić tylko pamięć podręczną (PageCache), można użyć następującego polecenia, pomagając zwolnić zasoby pamięci.
user@linux:~$ sudo sync; echo 1 > /proc/sys/vm/drop_caches
Aby wyczyścić tylko pamięć podręczną wpisów "Dentry" oraz "Inode", można użyć następującego polecenia, które zsynchronizuje system plików i wyczyści pamięć podręczną tych wpisów, poprawiając wydajność systemu poprzez zwolnienie buforowanych informacji o katalogach i plikach.
user@linux:~$ sudo sync; echo 2 > /proc/sys/vm/drop_caches
Aby wyczyścić wszystkie elementy pamięci podręcznej (tzn: PageCache, Dentry, Inode), można użyć następującego polecenia, które zsynchronizuje system plików i wyczyści całą wolną pamięć.
user@linux:~$ sudo sync; echo 3 > /proc/sys/vm/drop_caches
Aby wyczyścić przestrzeń wymiany, można użyć polecenia swapoff, która wyłączy wszystkie partycje wymiany.
user@linux:~$ sudo swapoff -a
Następnie włącz ją ponownie, uruchamiając następujące polecenie, które aktywuje wszystkie partycje wymiany.
user@linux:~$ sudo swapon -a
Ogólnie rzecz biorąc, ręczne zwalnianie bufora i pamięci podręcznej w systemie Linux powinno być używane w przypadku poważnej presji na pamięć i braku możliwości zwolnienia pamięci w inny sposób. Nie mniej jednak należy mieć świadomość potencjalnego wpływu na wydajność. Aby zautomatyzować proces i regularnie czyścić pamięć, można skonfigurować zadanie cron do uruchamiania poleceń w określonych odstępach czasu. Można to zrobić w następujący sposób. Otwórz terminal i wpisz polecenie:
user@linux:~$ crontab -e
Następnie dodaj następujące linie, aby umożliwić systemowi automatyczne czyszczenie pamięci podręcznej, buforu oraz przestrzeni wymiany codziennie o północy.
0 0 * * * sudo sync; echo 3 > /proc/sys/vm/drop_caches
0 0 * * * sudo echo 1 > /proc/sys/vm/drop_caches
0 0 * * * sudo sync; echo 2 > /proc/sys/vm/drop_caches
0 0 * * * sudo swapoff -a && sudo swapon -a
Całość ma wyglądać mniej więcej tak, zapisz plik kombinacją klawiszy CTRL + O po czym zamknij proces za pomocą CTRL + X. Gotowe!