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