場合によっては、UbuntuおよびOS Xサーバーでメモリを集中的に使用するプロセスを一時停止して、他のジョブのためにRAMを一時的に解放したいことがあります。心配しているのがCPUの使用量だけだった場合、単純な方法で問題ありCtrl-Z
ません。ただし、RAMを解放して(ディスクに書き込むことにより)、プロセスを再起動(ディスク-> RAM)するか、つまり単一のプロセスを「休止状態」にする必要があります。これを行う方法についての手がかりはありますか?(できればCLIから。)ありがとう。
場合によっては、UbuntuおよびOS Xサーバーでメモリを集中的に使用するプロセスを一時停止して、他のジョブのためにRAMを一時的に解放したいことがあります。心配しているのがCPUの使用量だけだった場合、単純な方法で問題ありCtrl-Z
ません。ただし、RAMを解放して(ディスクに書き込むことにより)、プロセスを再起動(ディスク-> RAM)するか、つまり単一のプロセスを「休止状態」にする必要があります。これを行う方法についての手がかりはありますか?(できればCLIから。)ありがとう。
回答:
単一のプロセスを休止状態にするための一般的な機能はなく、システム全体のみです。
ただし、プロセスイメージが再起動後も存続しないことを気にしない場合は、プロセスイメージをディスクに保存するための組み込み機能があります:スワッピング。十分なスワップ領域があることを確認してください。メモリのプレッシャーがあり、プロセスがアクティブでない場合(たとえば、中断されているため)、そのメモリはスワップアウトされます。
プロセスが長時間非アクティブである可能性が高く、ある時点で高速な応答時間を必要とすることがわかっている場合は、多くのRAMを短期間のプロセス、例えば
perl -e '$tmp = "a" x 999999999' # allocate about 1GB
スワップアウトされるものを制御できないため、他のプロセスがスワップアウトされる可能性があります。Linuxでは、マップされているページに強制的にアクセスすることで、プロセスを元に戻すことができます。この答えのスクリプトはそれを行います:プロセスによってマップされたすべてのページをメモリにロードします(これには開いているファイルが含まれることに注意してください。マップ情報に基づいて領域を選択的に走査して、不要なデータの交換を回避できます、詳細についてはこの回答をご覧ください)。
お探しの用語は「アプリケーションチェックポイント」です。
私が知っていることができるツールはCryoPIDとCryoPID2です。
両方のツールはLinux専用です。
BSDまたはOS X用の同様のツールは知りません。
十分なスワップ領域があることを確認してください。システムが非アクティブなページのスワップを優先するように設定されていることを確認してください(vm.swappiness = 100)。その後、プロセスを一時停止するだけで十分です。カーネルは、非アクティブなページをスワップアウトすることを好みます。
Mac OS Xでは、purge
コマンド(Xcodeで提供)を使用して(非アクティブな)RAMを解放しようとする場合があります。
vm_stat
purge
vm_stat
purge
ここでは役に立ちません。ディスクキャッシュは削除されますが、プロセスのメモリがスワップアウトされることはありません。また、別のプロセスがRAMを取得する速度が向上することもありません。