時々、あまりにも多くのプログラム/プロセスを実行した後、コンピュータが遅く実行され始め、時にはほとんどクラッシュ/ハングするように見えます。 Debian Linuxを使用すると、メモリが不足してスムーズに実行される前に一部のプロセスを自動的に終了する方法はありますか?
答え1
デフォルトでは、利用可能なメモリを監視するデーモンが必要です。指定されたしきい値を下回ると、一部のプロセスを選択して終了してメモリを解放します。
while (true) {
size_t free_memory = get_free_memory();
if (free_memory < free_memory_threshold) {
pid_t pid = choose_a_process_to_kill();
kill(pid, SIGTERM);
}
}
明らかな質問は、終了するプロセスを選択する方法です。簡単な答えは、最大のメモリ使用量を持つプロセスです。これは誤動作する「メモリホグ」である可能性が高く、そのプロセスを終了すると、他の多くのプロセスに十分なメモリが確保されます。
しかし、より基本的な質問は次のとおりです。他のプロセスのためのメモリを解放するためにそのようなプロセスを終了することは本当に大丈夫ですか?大規模なプロセスが何であるかをどうやって知ることができますか?それほど重要ではない他の人と比べると?一般的な答えはありません。また、後でその大きなプロセスを再実行しようとすると、他の多くのプロセスが終了することを許可しますか?そうすれば、そんなことはなかったでしょう。無限の複数の循環?
実際、仮想メモリ機構はすでに同様の機能を果たす。プロセスを殺す代わりに、交換する他の人が使用できるように、メモリの一部をディスクにコピーします。前のプロセスが後で対応するメモリ部分を使用しようとすると、仮想メモリメカニズム交換ページが戻ります。これが発生すると、さまざまなプロセスで紛争が発生します(いわゆる勝つ)、メモリを解放するには、一部のプロセスを終了する必要があります。より良い方法は、より多くのメモリを使用できるようにすることです。システム起動時