
つまり、私のシステムは DOS 攻撃を受けているか、かなり巨大なファイル (openstreetmaps planet.osm) を開いたばかりです。システムは完全に応答しなくなります... 応答しなくなると、シェルに入り、top を実行して、問題のプロセスを強制終了するのに約 10 分かかります。リセット ボタンを押す準備ができています。
質問: システムが停止した場合でも、CPU の 2% (2GHz システム ~ 40 MHz! - シェルには十分なはずですよね? つまり、90 年代初期には機能していました) をどこかに確保できるように、システム リソースの最小量を確保することは可能ですか? または、問題のあるプロセスを抑制する方法はありますか?
全体的なパフォーマンスが 10% 低下するとしても、OS が暴走プロセスを抑制してシステムを引き続き使用できるようにしてほしいと思う状況があります。このような状況で完全に無力になるのではなく、行動できる能力があれば... 素晴らしいと思います。
答え1
「ナイス」と言うのは面白いですね。 1 つの解決策は、問題のあるプロセスを「再ナイス」にして、CPU を独占しないようにすることです (基本的に、アプリの優先度を下げる)。
優先度の低いプロセスを起動するには:
nice <program> &
実行中のプロセスの優先度を変更するには:
renice 4 <program>
優先度のスケールは -20 から 20 までです。0 がデフォルト、20 が最低優先度、-20 が最高優先度です。
答え2
tty0 または ttyS0 で実行されているプロセス、または優先ルート ログインが必要な場所で実行されているプロセスを検索するスクリプトを作成し、それらのプロセスをリアルタイム スケジューリングの優先度に設定することができます。スクリプト自体は、リアルタイム優先度で開始する必要があります。
スワップ ストーム中にメモリにアクセスするのは、より困難な作業です。Linux cgroups を使用できます。スクリプトではなく C でプログラムを作成し、mlockall を使用してメモリを RAM にロックできます。その後、そのプログラムは ptrace を使用して他のプロセスにアクセスし、mlockall を呼び出すように強制できます。これを使用して、スワップの影響を受けない bash シェルを取得できます。
あなたがプログラマーであるか、すでにこれを書いた人を見つけることができない限り (私は見つけられませんでした)、cgroups はおそらく優先度の高いメモリを予約するより簡単な方法です。