web-dev-qa-db-ja.com

ディスクへ/からの単一プロセスの一時停止/再開

場合によっては、UbuntuおよびOS Xサーバーでメモリを集中的に使用するプロセスを一時停止して、一部のRAMを他のジョブのために一時的に解放します。CPUの使用率だけが心配な場合は、簡単なCtrl-Zは機能します。ただし、RAM(ディスクに書き込むことにより)を解放し、プロセスを再起動(ディスク-> RAM)できるようにする必要があります。つまり、単一のプロセスを「休止」します。これを行う方法についての手がかりはありますか(できればCLIから)。

23
Mike Covington

単一のプロセスを休止状態にするための一般的な機能はなく、システム全体のみです。

ただし、プロセスイメージが再起動後も存続しないことを気にしない場合は、プロセスイメージをディスクに保存するための組み込みの機能であるスワッピングがあります。十分なスワップスペースがあることを確認します。メモリの負荷があり、プロセスがアクティブでない場合(たとえば、中断されているため)、そのメモリはスワップアウトされます。

プロセスが長期間非アクティブである可能性が高く、ある時点で高速な応答時間が必要になることがわかっている場合は、RAMを強制的に解放することができます。 RAMを短時間のプロセスで大量に割り当てることにより、例えば.

Perl -e '$tmp = "a" x 999999999' # allocate about 1GB

何がスワップアウトされるかを制御することはできないため、他のプロセスがスワップアウトされる可能性があります。 Linuxでは、マップするページに強制的にアクセスすることで、プロセスをスワップインして戻すことができます。 この答え のスクリプトはそれを行います:プロセスによってマップされたすべてのページをメモリにロードします(これには開いているファイルが含まれることに注意してください。マップ情報に基づいて領域を選択的にトラバースして、あなたはあなたが必要としないことを知っています、詳しくは この答え を参照してください)。

あなたが探している用語は " Application checkpointing "です。

それを行うことができる私が知っているツールは、CryoPIDと CryoPID2 です。

どちらのツールもLinux専用です。

BSDやOS X用の同様のツールを知りません。

14
Ikem

十分なスワップ領域があることを確認してください。システムが非アクティブなページをスワップするように設定されていることを確認してください( vm.swappiness = 1 )。次に、プロセスを一時停止するだけで十分です。カーネルは非アクティブなページをスワップアウトすることを好みます。

5
David Schwartz