OOMに近い待ち時間が長い状況を回避するには?

OOMに近い待ち時間が長い状況を回避するには?

sudo swapoff -aスワップ(またはテスト前の実行)がないLinuxシステムの最小テストケース。一般ユーザーとして次の bash 行を実行します。

while true; do date; nice -20 stress --vm-bytes $(awk '/MemAvailable/{printf "%d\n", $2 + 4000;}' < /proc/meminfo)k --vm-keep -m 1 --timeout 10s; sleep 5s; done

そして、優先順位の高いルートシェルを使用して、次のbashシングルライナー(例sudo nice -n -19 bash:)を実行します。

while true; do NS=$(date '+%N' | sed 's/^0*//'); let "S=998000000 - $NS"; S=$(( S > 0 ? S : 0)); LC_ALL=C sleep "0.$S"; date --iso=ns; done

優先順位の高いプロセスは、date毎秒できるだけ正確に実行する必要があります。ただし、プロセスが優先順位で実行されている場合でも、優先順位-19で実行されるバックグラウンド プロセスによって20大きな遅延が発生する可能性があります。値を大きくすると、より高いレイテンシがアクティブになる可能性があるため、優先度の低いバックグラウンドプロセスによって発生するレイテンシに制限はないようですstress --timeout

stressこれを達成するために最大遅延を制限し(必要な場合)、自動的にシャットダウンする方法はありますか?追加/proc/sys/vm/user_reserve_kbytesまたは役に立たないようです/proc/sys/vm/admin_reserve_kbytes/proc/sys/vm/min_free_kbytes

ベストアンサー1

*カーネルパッチを試してください。これ質問です。これまでは私は仕事をしているようで(oomの周りの高いレイテンシを防ぎ)(質問のコードを使ってテストしたり)、ディスクスラッシングもかなり避けました(例:コンパイル時)。 Firefox) メモリ不足によりオペレーティングシステムがフリーズすることがよくあります。
パッチはActive(file)ページの除去を防ぎ、(少なくとも)実行可能なコードページをRAMに保持し、コンテキスト切り替えによる問題を防止する。kswapd0(?)再読み込み(これにより多くのディスク読み取りが発生し、オペレーティングシステムの凍結)。

*またはより良い方法を提案しますか?

おすすめ記事