Od lat mam ten sam problem z moimi małymi konfiguracjami Ubuntu: używana przestrzeń wymiany rośnie z czasem. Mam wrażenie, że dzieje się tak głównie dlatego, że przydzielona pamięć nigdy nie wraca do pamięci RAM, mimo że jest na nią wystarczająco dużo miejsca, z wyjątkiem przypadku akcji użytkownika, takiej jak wyłączenie wymiany.
Zrobiłem krótkie cron
polecenie, aby to zautomatyzować i mam dobre wyniki:
#! /bin/sh
echo "* */1 * * * root swapoff -a && swapon -a" >> /etc/crontab
Ale ponieważ jest to bardziej podstęp niż prawdziwe rozwiązanie tego problemu, zastanawiam się nad potencjalnymi powodami, dla których może to być zły pomysł, lub jak mogę ulepszyć ten skrypt, aby uczynić go trochę bardziej sprytnym?
Odpowiedzi:
Używanie tego w ten sposób: tak, źle. Naprawdę musisz sprawdzić, czy dostępna jest wystarczająca ilość pamięci, zanim wyłączysz swap. Zobacz /ubuntu//a/90399/15811 dla lepszej wersji.
Ponadto: jesteś tego pewien? Przydzielenie swapu nie oznacza użycia swapu. Polecenie
vmstat
, kolumnysi
(zamień w) iso
(zamień). Jeśli pozostaną 0, masz inny problem. Z mojego doświadczenia wynika, że zamiana jest rzadko używana i być może nie używasz jej, myśląc, że jej nie opróżnia, ale nie ma nic do opróżnienia.źródło
vmstat
.Powiedziałbym, że to zły pomysł. Jeśli uważasz, że masz wolną pamięć i aktywny proces nie jest przenoszony z zamiany do pamięci RAM, to albo nie masz tyle wolnej pamięci, ile myślisz, lub proces nie jest tak aktywny, jak myślisz jest.
Jeśli aktywny proces nadal jest zamieniany, powinieneś naprawić wszystko, co powoduje presję na pamięć. Jeśli nie jest to aktywny proces, o co chodzi?
źródło
To zły pomysł.
Jądro rozpoczyna kopiowanie (nie przenoszenie) danych w celu zamiany na długo przed zapełnieniem pamięci fizycznej, ponieważ jeśli jakiś proces kiedykolwiek wymaga dużej ilości pamięci, każda strona, która ma już prawidłową kopię w zamianie, może zostać natychmiast ponownie wykorzystana bez konieczności kolejnego zapisu na dysk.
Zasadniczo dzieje się tak głównie w przypadku stron, które nie były otwierane od dłuższego czasu, co jest dobrym wskaźnikiem, że jest mało prawdopodobne, że będą dostępne wkrótce.
Jeśli wyraźnie odrzucisz kopie, nie przyniesie to żadnych korzyści, ponieważ dane nadal istnieją w pamięci RAM, ale może kosztować szybkość, gdy jakiś proces chce przydzielić dużo pamięci i konieczna jest wymiana.
Jądro zawsze będzie używać przestrzeni wymiany, gdy tylko pamięć fizyczna zapełni się w ponad 50%, więc liczby te będą niezerowe, nawet jeśli masz zainstalowaną wystarczającą ilość pamięci.
źródło
/proc/sys/vm/swappiness
pozostała wartość domyślna70
, co jest dobre dla serwerów i dość agresywnie wysuwa brudne strony z procesów, które nie dotknęły ich przez jakiś czas, aby zrobić miejsce dla większej ilości pamięci podręcznej. Jest to często niekorzystne dla komputerów stacjonarnych, ponieważ Alt-Tab może zwolnić.swappiness=70
), ale opóźnienie jest ważniejsze dla doświadczenia użytkownika na pulpicie. To jest kompromis. Jeśli rutynowo kompilujesz rzeczy, które są nieco za duże, aby pozostać w pamięci podręcznej, to z pewnością pozostawswappiness
trochę wyżej, na przykład 20 lub 30 zamiast 5 lub 10. Zobacz także akitaonrails.com/2017/01/17/optimizing-linux-for -wolne komputery . Wyświetlanievm.vfs_cache_pressure
poniżej 100 również sprzyja buforowaniu metadanych i-węzłów / katalogów na stronach danych, co jest również miłe z punktu widzenia responsywności interfejsu użytkownika.To jest zły pomysł. Gdyby było to przydatne, jądro Linuksa zaimplementowałoby to w ten sposób. Nie wierzę, że istnieje powód, aby zmieniać więcej niż kilka parametrów dostrajania, ponieważ taki prosty skrypt powłoki najprawdopodobniej nie jest bardziej sprytny niż algorytmy programistów jądra.
Zasadniczo masz dwa przypadki:
Są więc dwa główne punkty:
Pomimo problemów z brakiem pamięci w przypadku zbyt wielu programów, niektóre programy mogą przydzielać pamięć na podstawie aktualnie wolnej pamięci RAM (być może Twoja przeglądarka będzie używać więcej pamięci podręcznej i będziesz mógł przeglądać szybciej), a jądro może używać wolnej pamięci RAM do buforowania dysku i podobne optymalizacje. Gdy wymusisz pustą wymianę, jądro upuści pamięć podręczną odczytu i np. Uruchomienie nowej instancji Firefoksa potrwa dłużej niż wtedy, gdy Firefox nadal znajduje się w pamięci podręcznej dysku.
Jeśli chcesz dostroić zachowanie jądra, zobacz parametr swappiness .
Dwa dodatkowe zasoby pochodzą z @ peter-cordes:
Jeśli naprawdę chcesz mieć pustą zamianę, możesz ją wyłączyć na stałe. Nie rozumiem, dlaczego włączenie go przez godzinę, a następnie opróżnienie ma zalety w porównaniu z brakiem zamiany.
źródło
Możesz osiągnąć te same wyniki, informując jądro o zwolnieniu pamięci podręcznej:
W ten sposób unikniesz krótkiego momentu możliwego głodu pamięci i opuścisz jądro, aby zdecydować, co jest konieczne, a co można odrzucić.
źródło
Wbrew powszechnemu poglądowi SWAP sam w sobie nie jest zły .
To, co faktycznie spowalnia twój system, to aktywność jądra, która przenosi dane z pamięci RAM do SWAP iz powrotem do pamięci RAM
swappiness
.System robi to automatycznie, ponieważ jest skonfigurowany z
swappiness
.To powoduje, że pamięć z nieaktywnych procesów jest zrzucana na partycję wymiany dysku twardego.
Sam pracowałem przez lata z maszyną, która nie miała tyle pamięci RAM i zawsze korzystałem z pamięci SWAP. Mimo to moja maszyna działała dobrze, dopóki nie zaczniesz przenosić pamięci z powrotem do pamięci RAM, być może próbując zamknąć otwartą aplikację. Następnie obciążenie pracą zaczęło rosnąć.
Raczej sugerowałbym, abyś dokładnie przestudiował, która aplikacja korzysta z pamięci w wierszu poleceń wraz z
htop
aplikacją i zdecydowała się zamknąć niektóre aplikacje.gnome-system-monitor
Może dać dobry wgląd, jak również, w procesie-Tab.Jeśli masz duże aplikacje, które używają dużo pamięci RAM. Nie uruchamiaj ich wszystkich naraz.
źródło