Czasami chcielibyśmy zawiesić procesy wymagające dużej ilości pamięci na naszych serwerach Ubuntu i OS X, aby tymczasowo zwolnić trochę pamięci RAM na inne zadania. Gdybyśmy tylko martwili się wykorzystaniem procesora, prosty Ctrl-Z
działałby. Musimy jednak być w stanie zwolnić pamięć RAM (zapisując ją na dysk), a następnie ponownie uruchomić proces (dysk -> RAM) lub innymi słowy „hibernować” pojedynczy proces. Wszelkie wskazówki, jak to zrobić? (Najlepiej z CLI.) Dzięki.
22
Odpowiedzi:
Nie ma ogólnej możliwości hibernacji pojedynczego procesu, tylko cały system.
Jeśli jednak nie przejmuje się tym, że obraz procesu nie przetrwa ponownego uruchomienia, istnieje wbudowane narzędzie do zapisywania obrazu procesu na dysku: zamiana. Upewnij się, że masz wystarczająco dużo przestrzeni wymiany, a jeśli występuje presja pamięci, a proces nie jest aktywny (na przykład ponieważ jest zawieszony), jego pamięć zostanie wymieniona.
Jeśli wiesz, że proces będzie prawdopodobnie nieaktywny przez długi czas i że w pewnym momencie będziesz potrzebować szybkiego czasu reakcji, możesz wymusić zwolnienie dużej ilości pamięci RAM poprzez przydzielenie dużej ilości pamięci RAM w proces krótkotrwały, np
Nie masz żadnej kontroli nad tym, co zostanie zamienione, więc inne procesy mogą zostać zamienione. W systemie Linux możesz z powrotem zamienić proces, wymuszając dostęp do mapowanych stron. Skrypt w tej odpowiedzi zrobi to: załaduje do pamięci wszystkie strony odwzorowane przez proces (zwróć uwagę, że obejmuje to otwarte pliki; możesz przechodzić przez regiony selektywnie na podstawie informacji mapy, aby uniknąć zamiany danych, o których wiesz, że nie będziesz potrzebować zobacz tę odpowiedź, aby uzyskać więcej informacji).
źródło
Termin, którego szukasz, to „ Punkt kontrolny aplikacji ”.
Znane mi narzędzia, które mogą to zrobić, to CryoPID i CryoPID2 .
Oba narzędzia są przeznaczone tylko dla systemu Linux.
Nie znam podobnego narzędzia dla BSD lub OS X.
źródło
Upewnij się, że masz dużo przestrzeni wymiany. Upewnij się, że twój system woli zmieniać nieaktywne strony ( vm.swappiness = 100 ). Wtedy powinno wystarczyć zawieszenie procesu. Jądro woli wymieniać nieaktywne strony.
źródło
W systemie Mac OS X możesz spróbować użyć
purge
polecenia (dostarczonego z Xcode), aby zwolnić część (nieaktywnej) pamięci RAM.źródło
purge
nie pomogłoby tutaj. Usuwa pamięć podręczną dysku, ale nie spowoduje to zamiany pamięci procesu i nie przyspieszy innego procesu uzyskania pamięci RAM.