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 SIGSTOP
und- 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)?
linux
process
swap
virtual-memory
idelvall
quelle
quelle
Antworten:
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 criu
oderapt install criu
).Um einen laufenden Prozess zu überprüfen, erstellen Sie ein leeres Verzeichnis, in dem sich die Dateien und die CD befinden.
Ü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.
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.
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-job
erneut ausführe , kehrt der Prozess zum Prüfpunkt zurück und wird erneut gestartet.Hoffe das hilft.
quelle
/tmp
es sich um tmpfs handelt (gesichert durch Speicher / Swap Space). Wenn Sie einen Checkpoint auf ein normales festplattengesichertes Dateisystem setzen, können Sievmtouch -e
die Seiten mit diesem Checkpoint aus dem PageCache entfernen, es wird jedoch vorübergehend noch zusätzlicher Arbeitsspeicher benötigt. (Escriu
sei denn, Sie haben die Option, direkt I / O (mit O_DIRECT) zu tun ...)