このラップトップにはSSDが搭載されているため、スワップを省略することにしました。これはほとんどの場合うまく機能しますが、RAMが少し短くなり、コンピューターが非常に遅くなり、フリーズする傾向がある場合があります。十分な速さでフリーズに気付いた場合に備えて、カーネルに直接アクセスする「最大のプロセスを強制終了」ボタンを実装する方法はありますか?または、コンピューターであるため、最大のプロセス自体がフリーズして撮影を開始するときのヒューリスティックも問題ありません。
承認された回答:
あなたのコメントから、システムはただ交換しているように聞こえます。
LinuxにはOOMキラーがあり、システムがメモリをオーバーコミットしたときに呼び出され、現在は不足しています。
Linuxはデフォルトでメモリオーバーコミットを実行します。これは、基本的に、システムが実際に持っているよりも多くのメモリをプログラムに提供することを意味します。これは、プログラムが要求するすべてのメモリを実際に使用するわけではないことを前提としています。ただし、システムのメモリが不足すると、実行中のさまざまなプロセスにメモリがあることをすでに通知しているため、それ以上拒否することはできません。代わりに、OOMキラーを呼び出すことです。 OOMキラーは基本的に、カーネルがメモリ不足状態を緩和すると考えるプロセスを見つけます。通常、これは最も多くのメモリを使用するプロセスですが、アルゴリズムは実際にはそれよりもはるかに複雑です。
overcommit_memory
があるので に設定 (自動モード)、カーネルはメモリのオーバーコミットを実行しています。したがって、説明した動作から、システムが大幅にスワップしているように見えます。
ここから2つのオプションがあります。
スワップを減らす
システムのRAMが不足しているため、カーネルは物事をスワップに押し込み始めます。システムのスワップが不足すると、OOMキラーが呼び出されます。ただし、空きスワップスペースが残っているため、これは発生しません。
元のアイデア、手動でプロセスを強制終了します。
システムのスワップが多すぎて何かを停止する必要があると思われる場合は、手動でプロセスを強制終了できます。これは、カーネルのSysRqトリガーを介して実行できます。
カーネルには、「マジックSysRq」と呼ばれるものがあります。これは、カーネルにある種の緊急操作を実行するように指示するちょっとした機能です。これには、「すべてのボリュームを読み取り専用で再マウントする」、「すべてのファイルシステムを同期する」、「今すぐ再起動する」などがあります。これらのオプションの1つは、OOMキラーを呼び出すことでもあります。
関連:bashまたは他の言語/フレームワークで整数と浮動小数点の計算を行う方法は?
カーネルでマジックSysRqが有効になっている場合(カーネルオプションCONFIG_MAGIC_SYSRQ
)、これは2つの方法で実行できます。
- Alt + SysRq + f
キーボードのこれらの3つのキーを押すだけです。 -
echo f > /proc/sysrq-trigger
これは、キーボード方式とまったく同じタスクを実行しますが、プログラムで実行します。
スワップを完全に無効にすることもできます。これは、ほとんどのシステムで行っていることであり、まさにこの理由からです。スワップは、カーネルが使用されていないデータをプリエンプティブにスワップアウトし、より多くのRAMをキャッシュに使用できるようにするという点で有益です。しかし、それはあなたが見ているこの強制的なスワッピングの問題につながります。
個人的には、強制スワッピングでOOMキラーを呼び出すためのカーネルオプションが最善の解決策だと思います。基本的にプリエンプティブスワップを機能させますが、RAMが不足しているためにカーネルが何かをスワップに移動することを余儀なくされた場合は、OOMkillerを呼び出します。
残念ながら、これは私自身の個人的な願いです。これは行いません。