Gelegentlich möchten wir speicherintensive Prozesse auf unseren Ubuntu- und OS X-Servern anhalten, um vorübergehend RAM für andere Jobs freizugeben. Wenn wir uns nur Sorgen um die CPU-Auslastung machen würden, würde ein einfaches Ctrl-Z
Verfahren funktionieren. Wir müssen jedoch in der Lage sein, den RAM freizugeben (indem wir ihn auf die Festplatte schreiben) und dann den Prozess neu zu starten (Festplatte -> RAM) oder mit anderen Worten einen einzelnen Prozess "in den Ruhezustand zu versetzen". Irgendwelche Hinweise, wie das geht? (Am liebsten von CLI.) Danke.
22
Antworten:
Es gibt keine allgemeine Möglichkeit, einen einzelnen Prozess in den Ruhezustand zu versetzen, sondern nur das gesamte System.
Wenn Sie sich jedoch nicht darum kümmern, dass das Prozessabbild einen Neustart nicht übersteht, gibt es eine integrierte Funktion zum Speichern des Prozessabbilds auf der Festplatte: Auslagern. Stellen Sie sicher, dass Sie über genügend Auslagerungsspeicher verfügen. Wenn Speicherbedarf besteht und der Prozess nicht aktiv ist (z. B. weil er angehalten wurde), wird der Speicher ausgelagert.
Wenn Sie wissen, dass der Prozess wahrscheinlich für längere Zeit inaktiv ist und dass Sie irgendwann eine schnelle Reaktionszeit benötigen, können Sie die Freigabe einer großen Menge RAM erzwingen, indem Sie eine große Menge RAM in a zuweisen Prozess von kurzer Dauer, z
Sie haben keine Kontrolle darüber, was ausgelagert wird, sodass andere Prozesse ausgelagert werden können. Unter Linux können Sie einen Prozess wieder einlagern, indem Sie zwangsweise auf die zugeordneten Seiten zugreifen. Das Skript in dieser Antwort führt Folgendes aus: Laden Sie alle Seiten, die von einem Prozess zugeordnet wurden, in den Speicher (beachten Sie, dass dies geöffnete Dateien umfasst; Sie können Bereiche basierend auf den Karteninformationen selektiv durchlaufen, um das Vertauschen von Daten zu vermeiden, von denen Sie wissen, dass sie nicht benötigt werden Weitere Informationen finden Sie in dieser Antwort .
quelle
Der gesuchte Begriff ist " Application Checkpointing ".
Die Tools, die ich kenne, sind CryoPID und CryoPID2 .
Beide Tools sind nur für Linux.
Ich kenne kein ähnliches Tool für BSD oder OS X.
quelle
Stellen Sie sicher, dass Sie genügend Swap-Platz haben. Stellen Sie sicher, dass Ihr System so eingestellt ist, dass inaktive Seiten bevorzugt ausgetauscht werden ( vm.swappiness = 100 ). Dann sollte es ausreichen, den Vorgang auszusetzen. Der Kernel wird es vorziehen, die inaktiven Seiten auszutauschen.
quelle
Unter Mac OS X können Sie versuchen, mit dem
purge
Befehl (im Lieferumfang von Xcode enthalten) einen Teil des (inaktiven) Arbeitsspeichers freizugeben.quelle
purge
würde hier nicht helfen. Der Festplatten-Cache wird entfernt, der Arbeitsspeicher eines Prozesses wird jedoch nicht ausgelagert, und ein anderer Prozess erhält keinen schnelleren Arbeitsspeicher.