Linuxがスワッピングを開始すると、基本的には運命にあります。すぐにシステムは入力に反応しなくなりますが、数日の終わりまで喜んで交換します...
すべてのプロセスを保持するコマンドを思いつくことができますか?したがって、問題の原因を調べてすべてのメモリを使い果たしたプロセスを強制終了できるクリーンなシェルを開くことができますか? (メモリが完全にいっぱいになっている可能性があるため、シェルを開くためのスペースを集めるためにさらにメモリを交換する必要があるため、これは簡単ではないと思います。一方、他のすべての交換プロセスは停止する必要があります。)
このようなコマンドをホットキーに関連付けた場合は、これを緊急ボタンとして使用すると、時間を大幅に節約できます。これが可能であれば何かアイデアはありますか?誰かが以前にこのようなことを試したことがありますか?これに気付くことができれば、それはクールな機能になるでしょう:)
魔法 SysReq 他の回答で述べたように、本当にあなたが持っているのはそれだけです。 SSHアクセスしかない場合は、次のようにSysReqをトリガーできます。
# Enable Magic SysReq since most systems default this off
echo 1 > /proc/sys/kernel/sysrq
#call OOM Killer to try to free up memory
echo f > /proc/sysrq-trigger
これから実行可能スクリプトを作成し、スワッピングに気づいたらすぐにこれを実行すると、チャンスが得られる可能性があります。一時的なメモリスパイクを処理するのに十分なメモリがある場合、またはメモリが不足したときにランダムプログラムを強制終了しても問題がない場合は、スワップを無効にすることもできます。
関連する注意点として、負荷が急上昇しているリモートシステムがあり、それを完全に強制終了する必要がある場合は、これを使用して、完全にシャットダウンせずに強制的に再起動できます。
echo 1 > /proc/sys/kernel/sysrq
#Trigger BIOS reset
echo b > /proc/sysrq-trigger
1つの(次善の!)解決策は、lessスワップを提供することです。
アイデアは、あなたが絶望して手を投げる頃に OOM Killer が始まるということです。
限られたメモリマシンでLinuxを使用した私の経験は、
インタラクティブに使用する場合
一部の特殊なケースでは、これらの制限を拡張できます。大きな、しかしめったにアクティブにならないバックグラウンドプロセスはメモリに「留まる」が、たまにしかアクティブにならないため、ユーザビリティの問題にはあまり寄与しません。
とにかく、計画は利用可能なスワップを調整して、マシンが非常にビジーになるとすぐに、OOMキラーがキックインする手で物を合理的に殺すことができないようにすることです。
これは最適ではありません(OOMキラーで利用可能な複数のヒューリスティックにもかかわらず)、「正しい」ものを選択するかどうかを確認するのは困難です。
Magic SysRq は、私が知っているボタンに最も近いものです...
これを試したことはありません!
killall -SIGSTOP <main commands>
見る man killall
ニーズに合わせて調整する方法を確認します。一般に、ulimitを使用してプロセスを実行し、それらを制御し、Nagiosなどを使用してメモリ使用量を監視することをお勧めします(代替案については、膨大な数の「監視対象...」の質問を参照してください)。
Nice -20 bash
で試すこともでき、レスポンシブシェルを取得する必要があります...