Uwalnianie pamięci RAM z niepotrzebnych danych
Napisał: Patryk Krawaczyński
10/10/2010 w Administracja Brak komentarzy. (artykuł nr 285, ilość słów: 553)
K
iedy zapisujemy dane na dysku – nie koniecznie są one tam zapisywane. Jądro przechowuje pamięć podręczną wielu rzeczy, a ciągłe zapisywanie danych na dysku wymaga wiele pracy przy wykonywaniu, której należy wszystkie inne procesy również wykonywać szybko i sprawnie. Dlatego przechowywanie wielu procesów i danych w pamięci z pewnością jest z korzyścią dla wydajności systemu, ale czasami po prostu chcemy mieć wolną pamięć RAM od niepotrzebnych informacji, a dane zapisane na dysku.
Z pomocą przychodzi wirtualny system plików /proc, który jest interfejsem do pewnych struktur danych działającego systemu (jądra). Znajduje się w nim podkatalog sys zawierający więcej pseudo plików reprezentujących zmienne jądra, a dokładniej mówiąc – są w nim głównie podkatalogi z podziałem tych zmiennych na grupy. Jednym z głównych podkatalogów jest vm, czyli pamięć wirtualna (ang. virtual memory). Pliki w tym katalogu mogą zostać użyte do dostrajania pracy pamięci wirtualnej podsystemu jądra Linuksa oraz zapisywania “brudnych” (czyt. mogących zostać zapisanych, a trzymanych jeszcze w pamięci) danych na dysku.
Od wersji jądra 2.6.16 odpowiedni wpis dokonany do /proc/sys/vm/drop_caches spowoduje zwolnienie przez jądro czystych buforów, dentries (ang. directory entry) i i-węzłów (system plików w pamięci reprezentowany jest za pomocą dentries oraz i-węzłów) z pamięci. Na przykład, aby zwolnić bufor stronicowania, należy użyć polecenia:
echo 1 > /proc/sys/vm/drop_caches
W celu zwolnienia dentries i i-węzłów, należy użyć:
echo 2 > /proc/sys/vm/drop_caches
Aby zwolnić bufor stronicowania, dentries i i-węzły, należy użyć:
echo 3 > /proc/sys/vm/drop_caches
Ponieważ operacja ta nie jest destrukcyjna i “brudne” obiekty nie są zwalniane, użytkownik powinien wcześniej uruchomić polecenie: sync w celu upewnienia się, że wszystkie zbuforowane obiekty zostaną zwolnione. Przykład zastosowania:
darkstar:~# free -m total used free shared buffers cached Mem: 8000 3848 4151 0 257 2207 -/+ buffers/cache: 1384 6615 Swap: 7632 1 7630 darkstar:~# sync; echo 3 > /proc/sys/vm/drop_caches darkstar:~# free -m total used free shared buffers cached Mem: 8000 2020 5979 0 0 670 -/+ buffers/cache: 1350 6649 Swap: 7632 1 7630
Więcej informacji: Virtual Memory, Drop Caches