Pamięć RAM i SWAP Linuks

Linux potrafi zarządzać pamięcią w sposób bardzo efektywny. Jeśli jednak zachodzi potrzeba wyczyszczenia pamięci podręcznej, swap’u czy opróżnienia buforów, system operacyjny Linux umożliwia nam przeprowadzenie tej operacji na kilka sposobów.

Istnieją trzy opcje, które pozawalają wyczyścić pamięć podręczną bez przerywania pracy procesów i usług.

Czyszczenie PageCache

Pierwszą opcją, którą można wykorzystać jest czyszczenie PageCache. Page Cache w Linuksie ma za zadanie przyspieszenie odczytu plików. Realizowane jest to przez wykorzystanie buforowania przy pierwszym odczycie lub zapisie na urządzeniu magazynującym (takim jak np. dysk twardy). Zbuforowane dane przechowywane są w pamięci RAM. W chwili gdy zajdzie potrzeba odczytu danych, które znajdują się w buforach, odczyt zostanie przeprowadzony z pamięci RAM, która jest o wiele szybsza niż standardowy dysk twardy.

Aby wyczyścić PageCache należy użyć następującej sekwencji poleceń:

sync; echo 1 > /proc/sys/vm/drop_caches

Polecenie sync spowoduje opróżnienie buforu sytemu plików. Polecenia oddzielone od siebie „;” wykonywane są sekwencyjnie. Shell poczeka na zakończenie wykonania polecenia sync a następnie uruchomi polecenie nakazujące opróżnienie PageCache. Uruchomienie polecenia czyszczącego PageCache nie powinno wpłynąć na działanie aktualnie uruchomionych procesów i usług.

Informacje o pomięci przed czyszczeniem:

free -m
             total       used       free     shared    buffers     cached
Mem:         16022      15908        113          0          5      14703
-/+ buffers/cache:       1199      14823
Swap:        30516          0      30516

Nakazanie wyczyszczenia PageCache:

sync; echo 1 > /proc/sys/vm/drop_caches

Sytuacja po wyczyszczeniu PageCache:

free -m
             total       used       free     shared    buffers     cached
Mem:         16022        819      15203          0          1         34
-/+ buffers/cache:        783      15239
Swap:        30516          0      30516

Czyszczenie zbuforowanych informacji o strukturach inode i dentry

I-węzeł (ang. i-node) odpowiada fizycznemu blokowi kontrolnemu pliku. Zawiera metadane o danym pliku, jednoznacznie identyfikuje plik i jego fizyczną pozycji na dysku. I-węzeł w pamięci reprezentowany jest przez strukturę inode.

Dentry umożliwią natomiast dokonanie powiązania i-węzłów z plikami. Wiążą numery i-węzłów z nazwami plików. Struktury dentry odgrywają również dużą rolę podczas cache’owaniu katalogów w pamięci podręcznej. Umożliwiają np. przechowywanie najczęściej używanych plików w celu zapewnienia szybszego dostępu do nich.

Aby wyczyścić z pamięci podręczej infomracje o strukturach inode i dentry należy wydać polecenie:

sync; echo 2 > /proc/sys/vm/drop_caches

Czyszczenie PageCache, dentry i inode z pamięci podręcznej

Aby wyczyścić jednocześnie PageCache, dentry i indode należy wydać polecenie:

sync; echo 3 > /proc/sys/vm/drop_caches 

Najbezpieczniejszym rozwiązaniem w środowisku produkcyjnym jest wykonanie czyszczenia PageCache. Pozostałe opcje nie są rekomendowane. Chyba, że wiemy co robimy. Więcej informacji można znaleźć w dokumentacji na stronie kernel.org

Czyszczenie przestrzeni Swap w systemie Linux

Aby wyczyścić obszar Swap należy wydać następujące polecenie:

swapoff -a && swapon -a
Q2B