So stoppen Sie einen Linux-Prozess für eine spätere Ausführung, indem Sie seinen Speicher austauschen


19

Ich möchte einen lang laufenden Prozess stoppen, damit er keine CPU- oder physischen Speicherressourcen beansprucht, um in Zukunft denselben Prozess wieder aufzunehmen .

Ich weiß, dass der CPU-Teil mit SIGSTOPund- SIGCONT Signalen erreichbar ist, aber ist es möglich, den privaten RSS-Speicher eines (angehaltenen) Prozesses sofort auszublättern ( im Fall von verunreinigten Seiten auszutauschen)?


1
Was ist die Absicht dahinter? Möchten Sie sicherstellen, dass der Prozess schneller fortgesetzt wird? Oder möchten Sie verhindern, dass vertrauliche Daten auf die Festplatte geschrieben werden? Oder etwas anderes? Wenn wir die Absicht kennen, können wir möglicherweise bessere Antworten geben.
Oliver

13
Das Betriebssystem wird dies automatisch tun. Es gibt wirklich keinen Grund, etwas Bestimmtes zu tun.
David Schwartz

@oliver Ich erstelle einen Batch Scheduler ( github.com/brutusin/wava ). Die aktuelle Implementierung bietet nicht vorbeugende Zeitplanung, aber ich möchte zu einer vorbeugenden Zeitplanung übergehen (in der Lage sein, die Ausführung von Jobs zu stoppen), um einige Deadlock-Situationen zu vermeiden, in denen alle ausgeführten Jobs von Jobs in der Warteschlange abhängen. Ich brauche genau das Verhalten gefragt, weiterhin gestoppte Prozesse (keine neuen von einem Checkpoint
erstellen

1
@ DavidSchwartz das ist eine riskante Behauptung
idelvall

@idelvall Dann hört es sich so an, als würdest du dem Gedächtnis nichts Besonderes tun wollen.
David Schwartz

Antworten:


11

Sie könnten eine Technik untersuchen, die Checkpoint / Restore genannt wird. Auf diese Weise können Sie einen laufenden Prozess ausführen und seinen Status in einer Reihe von Dateien speichern und ihn zu einem späteren Zeitpunkt wiederherstellen.
Um es zu verwenden, installieren Sie zunächst das Programm criu [ git , wiki ] ( yum install criuoder apt install criu).

Um einen laufenden Prozess zu überprüfen, erstellen Sie ein leeres Verzeichnis, in dem sich die Dateien und die CD befinden.

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

Überprüfen Sie nun den laufenden Prozess. In diesem Fall verwende ich den --shell-Job, da mein Prozess in einer Shell mit einem zugehörigen tty ausgeführt wird.

criu dump -t 404 --shell-job

404 ist die PID des Prozesses, den ich überprüfen möchte. Wenn ich dies tue, wird mein laufender Prozess abgebrochen und mein / var / tmp / checkpoint-Verzeichnis wird mit einer Reihe von Dateien gefüllt, die zum Wiederherstellen erforderlich sind.

Um den Prozess wiederherzustellen, stelle ich sicher, dass ich mich im Verzeichnis mit den Prüfpunktdateien befinde und stelle sie wieder her.

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

Der Prozess wird dort fortgesetzt, wo er aufgehört hat, in dem Terminal, in dem dies ausgeführt wurde. Wenn ich diesen ausgeführten Prozess beende und criu restore --shell-joberneut ausführe , kehrt der Prozess zum Prüfpunkt zurück und wird erneut gestartet.

Hoffe das hilft.


4
Dies tut nicht das, was das OP behauptet. Probieren Sie es aus - der verwendete Speicher wird nicht reduziert. Es wird lediglich vom privaten Prozessspeicher zum Festplatten-Cache gewechselt (da die Dateigruppe herausgeschrieben wurde). Es werden nur ein zusätzlicher Speicherschritt und ein zusätzlicher Wiederherstellungsschritt ausgeführt, und derselbe Speicher wird auf dieselbe Weise verwendet (und kann ausgeworfen werden). Tatsächlich kann dies die Situation verschlimmern, da ein Teil des Speichers dupliziert wird, da alles Neue zum Ausschreiben generiert wird.
David Schwartz

heh, guter Punkt @David, besonders wenn /tmpes sich um tmpfs handelt (gesichert durch Speicher / Swap Space). Wenn Sie einen Checkpoint auf ein normales festplattengesichertes Dateisystem setzen, können Sie vmtouch -edie Seiten mit diesem Checkpoint aus dem PageCache entfernen, es wird jedoch vorübergehend noch zusätzlicher Arbeitsspeicher benötigt. (Es criusei denn, Sie haben die Option, direkt I / O (mit O_DIRECT) zu tun ...)
Peter Cordes

1
Es ist schwer zu wissen, ob dies das ist, was das OP will oder nicht, weil das OP nach einer bestimmten Lösung fragt, anstatt zu erklären, welches Problem es zu lösen versucht. Dies könnte die perfekte Antwort sein oder es könnte für ihn nutzlos sein, können wir nicht sagen.
David Schwartz

Ich habe es mir noch nicht im Detail angesehen, aber es scheint, dass der wiederhergestellte Prozess ein neuer Prozess ist (andere PID), und das ist nicht genau das, was ich brauche ...
idelvall

1
@idelvall: So funktionieren die meisten Varianten von checkpoint / restore. Ein wichtiger Anwendungsfall ist das Speichern des Fortschritts bei einer Berechnung über Neustarts hinweg.
Peter Cordes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.