Kiedy otwieram aplikację intensywnie korzystającą z pamięci RAM (VirtualBox ustawiony na 2 GB pamięci RAM), zwykle wykorzystuje się trochę przestrzeni wymiany, w zależności od tego, co jeszcze mam w tym czasie otwarte.
Jednak po wyjściu z tej ostatniej aplikacji 2 GB pamięci RAM zostaje zwolnione, ale pozostaje takie samo wykorzystanie przestrzeni wymiany.
Na przykład teraz, około dwóch godzin po zamknięciu VirtualBox, mam 1,6 GB wolnej pamięci RAM i nadal 770 MB w zamianie.
Jak mogę powiedzieć Ubuntu, aby przestał używać tej wymiany i powrócił do korzystania z pamięci RAM?
performance
swap
ram-usage
jfoucher
źródło
źródło
Odpowiedzi:
To, że swap jest alokowany, nie oznacza, że jest „używany”. Podczas gdy programy, takie jak monitor systemu i góra, pokażą część przydzielonej przestrzeni wymiany (w twoim przykładzie 770 MB), nie oznacza to, że system aktywnie zamienia wejścia / wyjścia.
Aby dowiedzieć się, czy cokolwiek zmienia się we / wy, możesz użyć
vmstat
polecenia. Pozostaw to na kilka sekund na ustabilizowanie się i obserwujsi
kolumny (swapin) iso
(swapout). Jeśli nic się nie dzieje, nie ma powodu do obaw.Oto wynik działania
vmstat 1
, w którym widać, że moja maszyna w ogóle się nie zmienia.Ale tutaj
top
widzicie, że mam przydzielone miejsce do wymiany: -źródło
Jądro Linuksa leżące u podstaw Ubuntu automatycznie „zamienia” te strony z dysku na pamięć RAM w razie potrzeby, więc ogólnie powiedziałbym, że niech to się stanie naturalnie.
Jeśli jednak naprawdę uważasz, że musisz to wymusić (widzę scenariusz, w którym chciałbyś wiedzieć, że system będzie później reagować), możesz chwilowo wyłączyć i ponownie włączyć zamianę
LUB alternatywnie jako pojedyncza linia
Zachowaj ostrożność, ponieważ może to spowodować niestabilność systemu, zwłaszcza jeśli ma już mało pamięci RAM.
źródło
Możesz również ustawić wartość „swapiness” na domyślną 60, w ten sposób swap na początku nie będzie tak duży. Dlaczego domyślna wysyłka jest ustawiona na 60, gdy zalecana wartość to 10, wprawia mnie w zakłopotanie. Z Ubuntu SwapFAQ :
Zmieniając tę wartość na 10, a nawet 0, możesz dodać znaczący i zauważalny wzrost prędkości do starszego systemu z wolnym napędem. Ustawienie tej wartości na 0 nie wyłącza zamiany w jądrze Linuksa 3.4 i niższych, ale w wersji 3.5+ robi to, więc będziesz chciał użyć wartości 1, jeśli chcesz utrzymać ją na najniższym ustawieniu *.
Nie widzę powodu, aby nie ustawiać tego na 0, ponieważ wszystko, co trafi na dysk, jest wolniejsze niż pamięć RAM. Mam 8 wirtualnych rdzeni, szybki dysk SSD i 8 GB pamięci, a moja zamiana jest ustawiona na 0. W tej chwili mam uruchomione 3 maszyny wirtualne, moje użycie pamięci wynosi 7,1 z 7,7 GB, moja używana wymiana wynosi tylko 576 KB 952 MB i wszystkie systemy działają płynnie!
Z Ubuntu SwapFAQ :
Poniżej znajdują się podstawowe instrukcje sprawdzania zamiany, opróżniania zamiany i zmiany zamiany na 0:
Aby sprawdzić wartość swapiness:
Aby tymczasowo ustawić swap na 0 ( zgodnie z sugestią SpamapS ):
Spowoduje to opróżnienie wymiany i przeniesienie całej wymiany z powrotem do pamięci. Najpierw upewnij się, że masz wystarczającą ilość pamięci, przeglądając kartę zasobów gnome-system-monitor, wolna pamięć powinna być większa niż wykorzystana zamiana. Ten proces może chwilę potrwać, użyj gnome-system-monitor do monitorowania i weryfikacji postępu.
Aby ustawić nową wartość na 0:
Aby ponownie włączyć zamianę:
Aby na stałe ustawić swapiness na 0:
sudoedit /etc/sysctl.conf
vm.swappiness = 0
sudo shutdown -r now
# zrestartuj system* W przypadku jądra w wersji 3.5+ ustawienie swapiness na 0 powoduje całkowite wyłączenie, a ustawienie 1 jest zalecane, jeśli chcesz algorytmu najniższej swapiness. źródło: https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/
źródło
Przekonałem się, że zamiana opróżniania może bardzo pomóc w systemach z wolnymi dyskami i ograniczoną pamięcią RAM. Oczywiście, jak już wspomniano, sposobem na to jest uruchomienie
sudo swapoff -a; sudo swapon -a
. Problem polega na tym, że jeśli nie ma wystarczającej ilości pamięci RAM, spowoduje to różnego rodzaju problemy.Napisałem skrypt, który nazywam
toggle_swap
, który działał dla mnie przez ostatnie kilka lat. Sprawdza, czy jest wystarczająca ilość wolnej pamięci RAM, zanim dezaktywuje swap. Oto on:źródło
Po kilku dniach kręcenia się ze swapowaniem doszedłem do wniosku, że jądro powinno być pozostawione własnym urządzeniom. Wie, co robi i jest zoptymalizowany, aby zapewnić najlepsze wrażenia.
Jeśli nie masz naprawdę dobrego powodu, aby chcieć odzyskać ten dysk, zostawiłbym go.
źródło
Nie ma to wpływu na wydajność, jeśli przestrzeń wymiany jest zajęta. Jedyną karą za wydajność jest to, że rzeczy są wymieniane. Jeśli nic nie jest zamieniane / zamieniane, nie musisz się o nic martwić.
źródło