Jak zatrzymać proces systemu Linux w celu późniejszego wykonania, zamieniając jego pamięć


19

Chcę zatrzymać długotrwały proces, aby nie zużywał zasobów procesora ani pamięci fizycznej, z zamiarem wznowienia tego samego procesu w przyszłości.

Wiem, że część procesora jest osiągalny za pomocą SIGSTOPi SIGCONT sygnały , ale jest to możliwe do strony out (swap w przypadku brudnych stron procesu) natychmiast prywatny RSS z pamięci (zatrzymany) proces?


1
Jaki jest tego cel? Czy chcesz mieć pewność, że proces zostanie wznowiony szybciej? A może chcesz zapobiec zapisywaniu poufnych danych na dysku? Albo coś innego? Jeśli znamy intencję, możemy być w stanie udzielić lepszych odpowiedzi.
— oliver

13
System operacyjny zrobi to automatycznie. Naprawdę nie ma powodu, aby robić cokolwiek konkretnego.
— David Schwartz

@oliver Tworzę harmonogram wsadowy ( github.com/brutusin/wava ). Obecna implementacja oferuje planowanie zapobiegawcze, ale chcę przejść do działania zapobiegawczego (możliwość zatrzymania uruchomionych zadań), aby w sposób płynny uniknąć niektórych sytuacji zakleszczenia, gdy wszystkie uruchomione zadania zależą od zadań w kolejce. Potrzebuję dokładnie takiego zachowania, kontynuowania zatrzymanych procesów (nie tworzenia nowych z punktu kontrolnego)
— idelvall,

1
@DavidSchwartz, co jest ryzykownym stwierdzeniem
— idelvall,

@idelvall Wygląda na to, że nie chcesz robić nic specjalnego w pamięci.
— David Schwartz

Odpowiedzi:


11

Możesz spojrzeć na technikę o nazwie punkt kontrolny / przywracanie. Umożliwi to uruchomienie uruchomionego procesu i zapisanie jego stanu w zestawie plików, a następnie przywrócenie go w późniejszym czasie.
Aby z niego skorzystać, zacznij od zainstalowania programu criu [ git , wiki ] ( yum install criulub apt install criu).

Aby sprawdzić działający proces, utwórz pusty katalog, w którym będą przechowywane jego pliki, i włóż dysk CD do tego katalogu.

mkdir /var/tmp/checkpoint
cd /var/tmp/checkpoint

Teraz sprawdź działający proces. W tym przypadku korzystam z zadania --shell, ponieważ mój proces działa w powłoce z powiązanym tty.

criu dump -t 404 --shell-job

404 to pid procesu, który chcę sprawdzić. Kiedy to robię, widzę, że mój proces został zabity, a mój katalog / var / tmp / checkpoint został zapełniony zestawem plików potrzebnych do jego przywrócenia.

Aby przywrócić proces, upewniam się, że jestem w katalogu z plikami punktów kontrolnych i przywracam.

cd /var/tmp/checkpoint
criu restore --shell-job

Proces rozpocznie się w miejscu, w którym został przerwany, w terminalu, w którym został uruchomiony. Jeśli zabiję ten uruchomiony proces i uruchomię go criu restore --shell-jobponownie, proces powróci do punktu kontrolnego i uruchomi się ponownie.

Mam nadzieję że to pomoże.


4
To nie robi tego, co twierdzi OP, że chce zrobić. Spróbuj - nie zostanie zmniejszone zużycie pamięci. Po prostu przełączy się z przetwarzania pamięci prywatnej na pamięć podręczną dysku (z powodu wypisania zestawu plików). Po prostu robi dodatkowy krok zapisu i dodatkowy krok przywracania, a ta sama pamięć jest używana (i wysuwana) w ten sam sposób. W rzeczywistości może to pogorszyć sytuację, ponieważ część pamięci zostaje zduplikowana z powodu wygenerowania wszystkiego, co można zapisać.
— David Schwartz

heh, dobry punkt @David, szczególnie jeśli /tmpjest to tmpfs (wspierany przez pamięć / przestrzeń wymiany). Jeśli vmtouch -ezaznaczysz punkt kontrolny do normalnego systemu plików opartego na dysku, możesz następnie użyć do eksmisji stron z pamięci podręcznej, ale nadal tymczasowo używa dodatkowej pamięci RAM. (Chyba że criuma opcję bezpośredniego wejścia / wyjścia (z O_DIRECT) ...)
— Peter Cordes

1
Trudno wiedzieć, czy tego właśnie chce OP, czy nie, ponieważ OP prosi o konkretne rozwiązanie, a nie wyjaśnia, jaki problem próbuje rozwiązać. To może być idealna odpowiedź lub może być dla niego bezużyteczna, nie możemy powiedzieć.
— David Schwartz

Nie przyjrzałem się temu szczegółowo, ale wydaje się, że przywrócony proces jest procesem nowym (inny wykres) i nie jest to dokładnie to, czego potrzebuję ...
— idelvall,

1
@idelvall: Tak działa większość smaków punktu kontrolnego / przywracania. Jednym z głównych przypadków użycia jest zapisanie postępów w obliczeniach między restartami.
— Peter Cordes,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.