このノートパソコンにはSSDがあり、交換は省略することにしました。これはほとんどの場合うまく機能しますが、時にはRAMが少し不足し、コンピュータが非常に遅く停止する傾向があります。十分に速く停止した場合にカーネルに直接移動できる「最大プロセス終了」ボタンを実装する方法はありますか?または、コンピュータなので、停止を開始し、最大プロセスを撮影するときに独自のヒューリスティックも動作します。
ベストアンサー1
あなたの意見によると、システムが変わっているようです。
Linuxには、システムがメモリを過剰に使用して廃棄されたときに呼び出されるOOMキラーがあります。
Linuxはデフォルトでメモリオーバーコミットを実行します。これは、基本的にシステムが実際に持っているよりも多くのメモリをプログラムに提供することを意味します。これは、プログラムが要求したすべてのメモリを実際に使用していないという前提で行われます。ただし、システムのメモリが不足すると、実行中のさまざまなプロセスにメモリがあることを知らせるため、これを拒否することはできません。代わりにOOMキラーを呼び出します。 OOM キラーは、基本的にカーネルがメモリ不足状態を軽減できると考えるプロセスを探します。通常、これは最も多くのメモリを使用するプロセスですが、実際にはアルゴリズムはそれよりはるかに複雑です。
overcommit_memory
(自動モード)に設定されているため、0
カーネルがメモリオーバーコミットを実行しています。説明したように、システムは多くのスワッピングを実行しているように聞こえます。
ここでは2つのオプションがあります。
スワップを減らす
システムにメモリが不足しているため、カーネルはエントリをスワップにプッシュし始めます。システムにスワップ領域が不足すると、OOM キラーが呼び出されます。しかし、余分なスワップスペースが残っているので、これは起こりません。
最初の考えは、プロセスを手動で終了することです。
システムが交換されすぎていて、一部のプロセスを終了する必要があると思われる場合は、プロセスを手動で終了できます。これはカーネルSysRqトリガーを介して行うことができます。
カーネルには「魔法のSysRq」という機能があります。これはカーネルに緊急作業を行うよう指示する関数です。これは、「すべてのボリュームを読み取り専用で再マウント」、「すべてのファイルシステムを同期する」、「今すぐ再起動」などです。これらのオプションの1つは、OOMキラーを呼び出すことです。
カーネルでマジックSysRq(カーネルオプションCONFIG_MAGIC_SYSRQ
)が有効になっている場合は、2つの方法でこれを実行できます。
- Alt+ SysRq+f
キーボードでこの3つのキーを押すだけです。 echo f > /proc/sysrq-trigger
これはキーボード方式とまったく同じことを行いますが、プログラム的に行われます。
また、スワップを完全に無効にすることもできます。これはまさにこの理由のためにほとんどのシステムで行うことです。スワップの利点は、カーネルが使用されていないデータを最初にスワップして、キャッシュにさらに多くのメモリを使用できることです。ただし、これにより強制スワップの問題が発生します。
個人的に最善の解決策は、スワップを強制するときにOOM Killerを呼び出す一種のカーネルオプションだと思います。デフォルトでは、プリエンプティブスワップが機能しますが、RAMが不足してカーネルがスワップするアイテムを強制的に移動する必要がある場合は、OOMキラーを呼び出します。
残念ながら、これは私の個人的な願いです。そうしません。