Myślałem, że cała esencja wymiany miała działać jako tymczasowa siatka bezpieczeństwa przechowywania, gdy pamięć RAM była pełna, ale moja partycja wymiany jest ciągle używana, mimo że czasami mam aż 3 GB wolnej pamięci RAM. Czy to normalne?
kernel
swap
memory-usage
Mysterio
źródło
źródło
free -m
,top -b 1
Odpowiedzi:
Możesz spróbować zmienić wartość „swapiness”:
Z FAQ wymiany Ubuntu :
Możesz także sprawdzić: https://askubuntu.com/a/103916/54187
źródło
sudo sysctl --load=/etc/sysctl.conf
po edycji pliku, aby zastosować zmianyPytanie ma kilka różnych aspektów.
Po pierwsze, jaka jest twoja definicja „wolnego”. W rzeczywistości nie jest tak prosty, jak się wydaje w Linuksie (lub w dowolnym nowoczesnym systemie operacyjnym).
Jak Linux używa pamięci RAM (bardzo uproszczone)
Każda aplikacja może zużywać trochę pamięci. Linux używa całej innej niezajętej pamięci (z wyjątkiem ostatnich kilku Mb) jako „pamięci podręcznej”. Obejmuje to pamięć podręczną strony, pamięć podręczną i-węzłów itp. To dobra rzecz - pomaga przyspieszyć składowanie. Zarówno zapis na dysk, jak i odczyt z dysku mogą zostać znacznie przyspieszone przez pamięć podręczną.
Idealnie, masz wystarczającą ilość pamięci dla wszystkich swoich aplikacji i wciąż masz kilkaset Mb pamięci podręcznej. W tej sytuacji, o ile aplikacje nie zwiększają wykorzystania pamięci, a system nie stara się uzyskać wystarczającej ilości miejsca na pamięć podręczną, nie ma potrzeby wymiany.
Gdy aplikacje zajmą więcej pamięci RAM, po prostu trafiają do miejsca zajmowanego przez pamięć podręczną, zmniejszając pamięć podręczną. Cofnięcie alokacji pamięci podręcznej jest tanie i na tyle łatwe, że odbywa się to po prostu w czasie rzeczywistym - wszystko, co znajduje się w pamięci podręcznej, jest albo tylko drugą kopią czegoś, co już znajduje się na dysku, więc można ją natychmiast zwolnić lub jest to coś, co chcielibyśmy musieli wylewać na dysku w ciągu kilku sekund i tak .
Nie jest to sytuacja specyficzna dla Linuksa - wszystkie nowoczesne systemy operacyjne działają w ten sposób. Różne systemy operacyjne mogą po prostu inaczej zgłaszać wolną pamięć RAM: niektóre zawierają pamięć podręczną jako część tego, co uważają za „wolne”, a niektóre nie.
Kiedy mówimy o wolnej pamięci RAM, bardziej sensowne jest uwzględnienie pamięci podręcznej, ponieważ jest ona praktycznie bezpłatna - jest dostępna na żądanie dowolnej aplikacji. W systemie Linux
free
polecenie to zgłasza na dwa sposoby - pierwszy wiersz zawiera pamięć podręczną w kolumnie używanej pamięci RAM, a drugi wiersz zawiera pamięć podręczną (i bufory) w wolnej kolumnie.Jak Linux wykorzystuje swap (jeszcze bardziej uproszczony)
Po zużyciu wystarczającej ilości pamięci, aby zabrakło wystarczającej ilości na płynnie działającą pamięć podręczną, Linux może zdecydować o ponownym przydzieleniu nieużywanej pamięci aplikacji z pamięci RAM do zamiany.
Nie robi tego zgodnie z określonym punktem odcięcia. To nie tak, że osiągniesz pewien procent alokacji, wtedy Linux zacznie się zamieniać. Ma raczej „niewyraźny” algorytm. Bierze pod uwagę wiele rzeczy, które najlepiej można opisać przez „jak duży jest nacisk na przydzielanie pamięci”. Jeśli istnieje duża „presja” na przydzielenie nowej pamięci, zwiększy to szanse, że niektóre zostaną zamienione, aby zrobić więcej miejsca. Jeśli będzie mniej „presji”, zmniejszy to te szanse.
Twój system ma ustawienie „swapiness”, które pomaga dostosować sposób obliczania tego „ciśnienia”. Zwykle w ogóle nie jest to zalecane, a ja nie polecam ci tego zmieniać. Zamiana jest ogólnie bardzo dobrą rzeczą - choć istnieje kilka skrajnych przypadków, w których obniża wydajność, jeśli spojrzysz na ogólną wydajność systemu, jest to korzyść netto dla szerokiego zakresu zadań. Jeśli zmniejszysz swapiness, pozwolisz, aby ilość pamięci podręcznej zmniejszyła się nieco bardziej niż w innym przypadku, nawet jeśli może być naprawdę przydatna. To, czy jest to wystarczająco dobry kompromis, niezależnie od tego, jaki masz problem z zamianą, zależy od Ciebie. Powinieneś po prostu wiedzieć, co robisz, to wszystko.
Znana jest sytuacja, w której zamiana naprawdę szkodzi postrzeganej wydajności w systemie stacjonarnym, i to w tym, jak szybko aplikacje mogą ponownie reagować na dane wejściowe użytkownika po długim pozostawieniu bezczynności i obciążeniu procesów tła w IO (takich jak backup nocny) uruchom. Jest to bardzo widoczna powolność, ale niewystarczająca, aby uzasadnić wyłączenie wymiany i bardzo trudna do uniknięcia w żadnym systemie operacyjnym. Wyłącz swap i ta początkowa powolność po utworzeniu kopii zapasowej / skanowania w poszukiwaniu wirusów może się nie zdarzyć, ale system może działać trochę wolniej przez cały dzień. Nie jest to również sytuacja ograniczona do Linuksa.
Wybierając, co ma zostać zamienione na dysk, system próbuje wybrać pamięć, która nie jest faktycznie używana - odczytywana lub zapisywana z. Ma dość prosty algorytm do obliczania tego, który wybiera dobrze przez większość czasu.
Jeśli masz system, w którym masz ogromną ilość pamięci RAM (w momencie pisania, 8 GB to ogromna ilość jak na typową dystrybucję Linuksa), wtedy bardzo rzadko zdarza się sytuacja, w której zamiana jest w ogóle potrzebna. Możesz nawet spróbować wyłączyć swap. Nigdy tego nie zalecam, ale tylko dlatego, że nigdy nie wiadomo, kiedy więcej pamięci RAM może uchronić Cię przed awarią niektórych aplikacji. Ale jeśli wiesz, że nie będziesz go potrzebować, możesz to zrobić.
Ale w jaki sposób swap może przyspieszyć mój system? Czy zamiana nie spowalnia rzeczy?
Przenoszenie danych z pamięci RAM do wymiany jest powolną operacją, ale jest podejmowane tylko wtedy, gdy jądro jest całkiem pewne, że ogólna korzyść przeważy to. Na przykład, jeśli pamięć aplikacji wzrosła do tego stopnia, że prawie nie masz już pamięci podręcznej, a Twoje operacje we / wy są bardzo nieefektywne z tego powodu, możesz faktycznie uzyskać znacznie większą szybkość z systemu, zwalniając część pamięci, nawet po początkowym koszcie zamiany danych w celu ich uwolnienia.
Jest to również ostatnia deska ratunku, jeśli Twoje aplikacje rzeczywiście wymagają więcej pamięci niż faktycznie masz. W takim przypadku zamiana jest konieczna, aby zapobiec sytuacji braku pamięci, która często powoduje awarię aplikacji lub konieczność przymusowego zabicia.
Zamiana jest powiązana tylko z czasami, w których system działa słabo, ponieważ dzieje się tak w momentach, w których kończy się użyteczna pamięć RAM, co spowalnia system (lub czyni go niestabilnym), nawet jeśli nie masz zamiany. Tak więc, aby uprościć rzeczy, zamiana następuje, ponieważ system jest zapchany, a nie na odwrót.
Kiedy dane są zamieniane, kiedy znów się pojawiają?
Przenoszenie danych z wymiany jest (przynajmniej w przypadku tradycyjnych dysków twardych) tak samo czasochłonne, jak ich umieszczenie. Zrozumiałe jest, że twoje jądro będzie tak samo niechętne usuwaniu danych z wymiany, szczególnie jeśli nie jest ono faktycznie używane (tj. Odczytywane lub zapisywane). Jeśli masz dane w swapie i nie są one używane, to dobrze, że pozostaje w swapie, ponieważ pozostawia więcej pamięci na inne rzeczy, które są używane, potencjalnie przyspieszając system.
źródło
free -m
.Ustawienie wartości swapiness nie działa w każdej sytuacji. Jeśli to działa, świetnie. Jeśli nie, napisałem skrypt, aby okresowo wyczyścić swap, wyłączając go i włączając ponownie.
Przełączanie zamiany jest trochę ryzykowne, jeśli nie jesteś ostrożny. Jeśli nie masz wystarczającej ilości wolnej pamięci RAM, aby pomieścić wszystko w pamięci RAM i wszystko w zamianie, próba wyłączenia wymiany spowoduje, że system przestanie odpowiadać. Mój skrypt najpierw sprawdza, czy jest wystarczająca ilość wolnej pamięci RAM (co zajmuje trochę czasu, ponieważ rzeczywista ilość wolnej pamięci RAM różni się od tego, co
free
zgłasza jako wolna), a następnie przełącza tylko, jeśli tak jest. Ale jeśli brakuje Ci pamięci RAM, nie uruchamiaj kolejnego ważnego procesu podczas działania skryptu. Oto on:Musisz uruchomić ten skrypt jako root (np. Z
sudo
). Ten skrypt nie pozostawia systemu bez odpowiedzi; jeśli masz niewystarczającą ilość pamięci RAM, odmówi to zamiany. Używam tego skryptu bez problemów od prawie pięciu lat.źródło
Ogólnie rzecz biorąc, swap pozostaje nieużywany w systemach obecnie. Z mojego doświadczenia wynika, że procesy, które działają przez długi czas bez intensywnych operacji, są przenoszone do systemu Linux.
Powoduje to, że kilka programów, których dotyczy problem, działa wolno.
Jeśli masz dużo wolnej pamięci RAM, możesz wyłączyć zamianę, uruchamiając polecenie:
swapoff -av
(będziesz potrzebowaćsudo
do tego uprawnień.)Jeśli nie podoba ci się zamiana, możesz ją włączyć, używając polecenia symetrycznego:
swapon -av
( ponowniesudo
wymagane).źródło
Po zmianie programu na program pozostaje on zmapowany przez cały czas jego trwania. Wiele programów ma kod (i dane), który jest rzadko używany. Po wymianie pamięci jest mało prawdopodobne, aby została zamieniona.
Jednym ze sposobów wymuszenia tych stron w pamięci jest wyłączenie urządzenia wymiany. Jeśli masz dwa, możesz wyłączyć jeden, włączyć go ponownie, a następnie wyłączyć drugi. Jeśli naprawdę potrzebna jest zamiana, będzie się ona przemieszczać między urządzeniami. Możesz po prostu wyłączyć urządzenie wymiany (lub plik), ale jeśli naprawdę potrzebujesz wymiany przestrzeni, mogą się zdarzyć drastyczne rzeczy.
Oprócz normalnych rzeczy w pamięci, tempfs używa przestrzeni wymiany i zamieni się jak reszta pamięci. Jeśli uruchomisz coś, co wymaga dużo dysku tymczasowego, może to wymusić zamianę stron. Raz utworzonych plików tymczasowych nie można już używać po kilku minutach i są dobrymi kandydatami do przeniesienia na urządzenie wymiany.
W skrócie możesz użyć pliku jako urządzenia wymiany. Jest to przydatne, jeśli potrzebujesz tymczasowo dodatkowej przestrzeni wymiany.
źródło
Zredagowałem skrypt Scotta Severance'a, aby pasował do nowszych wersji darmowych, które już zawierają całkowite dostępne pole pamięci.
źródło