Uruchomiłem coś, co wymagało dużo pamięci, a teraz wszystko jest bardzo opóźnione. Wydaje mi się, że pamięć wszystkich aplikacji zamieniła się, aby zwolnić miejsce na proces wymagający dużej ilości pamięci, a teraz wszystko powoli wraca do pamięci RAM po uzyskaniu dostępu.
Czy istnieje sposób na jawne przeniesienie wszystkiego, co możliwe, z zamiany z powrotem na pamięć RAM? A może nie wszystko, ale tylko niektóre konkretne dane?
swapoff
jeśli pamięć sięMożesz dostroić go, odbijając echem jakąś liczbę od 0 do 100
/proc/sys/vm/swappiness
.źródło
sysctl
zamiast tego użyj polecenia. W tym przypadku tak jestsysctl vm.swappiness=x
.sysctl
do interakcji użytkownika. Wynik końcowy jest taki sam, ale zwykle interfejsy wyższego poziomu są preferowane dla użytkownika do bezpośredniej interakcji. Trochę jak uruchomienie silnika przez zwarcie przewodów zapłonowych (niższy poziom) zamiast po prostu przekręcenie kluczyka (wyższy poziom).Linux dobrze sobie radzi z zarządzaniem pamięcią i nie powinieneś przeszkadzać. Wspomniane wcześniej ustawienie vm.swappiness nie przeszkadza. Bardziej prawdopodobne jest wystąpienie dziwnych problemów podczas wykonywania innych czynności.
Co uruchomiłeś, które było tak głodne pamięci? Czy można to dostroić? Jeśli nie ma własnych dyrektyw dotyczących limitów pamięci, możesz także spojrzeć na ulimit.
źródło
convert -density 200 file.pdf jpegs/file.jpg
. Z jakiegoś powodu wykorzystuje dużo pamięci, ale masz rację: można go dostroić. W każdym razie sytuacja jest możliwa przy każdej aplikacji :)convert
ma-limit
argument, aby kontrolować jego pamięć vs. użycie dysku, i powinieneś o nich poczytać. Ustawienie-limit memory 512MB
lub podobne byłoby dobre. Prawdopodobnie dobrze byłoby również podać jawną MAGICK_TEMPORARY_PATH i wyczyścić ją po wykonaniu polecenia.Jeśli masz pamięć dostępną dla wszystkich swoich aplikacji, możesz ustawić swapiness na 0, aby nic się nie zmieniło. Na przykład qemu-kvm jest dużym celem, który VMM może zamienić, ponieważ „wydaje się”, że przez większość czasu jest bezczynny. Widzę, że do 80% pamięci qemu-kvm zostaje zapisanych do zamiany. Maszyny wirtualne działające w qemu-kvm staną się prawie niereagujące, ponieważ kończą się wymiany (chociaż gość nie ma pojęcia, że tak się dzieje). Gość VM będzie myślał, że działa najlepiej, chociaż w rzeczywistości strasznie się przeciąga. Kiedy kilka maszyn wirtualnych „budzi się” i zaczynam robić rzeczy, może to zwiększyć średnią ładunek do ponad 30, nawet na sprzęcie klasy korporacyjnej z dużą szybką pamięcią i dyskiem. Wydaje mi się, że jest to błąd w gotowym projekcie qemu-kvm.
Mam nadzieję, że to komuś pomoże.
źródło
Odradzałbym próbę prześcignięcia podsystemu VM w jądrze. BARDZO nieprawdopodobne jest, abyś miał wystarczająco dużo informacji, aby podejmować lepsze decyzje niż będzie. A jeśli zmusisz go w jakiś sposób do zrobienia czegoś złego, to po prostu sprawisz, że wszystko będzie jeszcze wolniejsze.
źródło
Jeśli jesteś w stanie zrestartować system, który powinien to zrobić (i może to zająć znacznie mniej czasu niż wypróbowanie innego rozwiązania).
źródło
Aby skopiować część mojej odpowiedzi z tego pytania .
Abyś wiedział, jak działa przestrajanie swapiness. Działa to poprzez nakazanie podsystemowi VM wyszukania stron do zamiany, gdy% pamięci zamapowanej na tabele stron procesu + wartość wymiany wynosi> 100. Zatem ustawienie 60 spowoduje, że system zacznie stronicować przestarzałe strony z tabeli stron procesu gdy zużywa ponad 40% pamięci systemu. Jeśli chcesz pozwolić swoim programom na użycie większej ilości pamięci kosztem pamięci podręcznej, musisz obniżyć wartość swapiness.
źródło
Czy proces jest nadal uruchomiony? Otwórz terminal i sprawdź, czy możesz dostrzec uruchomione procesy. (ps aux | grep nazwa procesu może to nieco ułatwić). Użyj kill -9 PID, aby je zabić, jeśli nadal działają. Uważaj na to, co zabijesz. Jeśli nie wiesz, na czym polega proces, nie zabijaj go! Opublikuj również wynik free -m, abyśmy mogli sprawdzić, czy nadal używasz dużo swapów.
Jeśli wszystko nadal działa wolno, możesz nadal mieć uruchomioną aplikację. Nigdy nie włączałbym wymiany, chyba że naprawdę wiesz, co robisz lub lubisz żyć na krawędzi. =)
źródło
Uważam, że nie ma naprawdę dobrego sposobu, aby zmusić Linuksa do zamiany danych z dysku na pamięć. Kiedy swapoff / swapon jest działającym rozwiązaniem, ale jest brudne i łatwo może spowodować niestabilność systemu. W przypadkach, gdy w swapie jest więcej danych niż wolna pamięć, trudno będzie wyobrazić sobie jakąkolwiek skuteczną politykę, którą Linux może zastosować, aby zdecydować, które fragmenty danych zostaną przeniesione do pamięci, a które pozostaną na dysku.
Podsumowanie: Pozwól Linuxowi stopniowo przywracać swoją wydajność w normalny sposób. Podsystem VM jest zorganizowany w taki sposób, że dąży i stale przechodzi do idealnego stanu równowagi.
źródło
Opróżnianie pamięci podręcznej buforów
Jeśli kiedykolwiek chcesz je opróżnić, możesz użyć tego łańcucha poleceń.
Możesz zasygnalizować, że jądro Linux wyrzuci różne aspekty buforowanych elementów, zmieniając argument numeryczny na powyższe polecenie.
UWAGA: wyczyść pamięć niepotrzebnych rzeczy (jądro 2.6.16 lub nowsze). Zawsze najpierw uruchom synchronizację, aby wypłukać przydatne rzeczy na dysk !!!
Aby zwolnić pamięć podręczną:
Aby uwolnić dentries i i-węzły:
Aby zwolnić pamięć podręczną, dentries i i-węzły:
Powyższe mają być uruchamiane jako root. Jeśli próbujesz zrobić to za pomocą sudo, musisz nieznacznie zmienić składnię na coś takiego:
źródło