「最大のプロセスを強制終了」ボタン


14

このラップトップにはSSDが搭載されているため、スワップを省略することにしました。これはほとんどの場合にうまく機能しますが、RAMが少し短くなり、コンピューターが非常に遅くなり、フリーズする傾向があります。フリーズに十分な速さで気づいた場合にカーネルに直接移動する「最大のプロセスを強制終了する」ボタンを実装する方法はありますか?または、コンピューターであるため、最大のプロセス自体がフリーズして撮影を開始したときのヒューリスティックも問題ありません。


「最大のプロセスを殺す」コマンドを意味しますか?
Ramesh 2014

Linuxにはこれがあります。それはOOMキラーと呼ばれています。ただし、メモリのオーバーコミットを有効にする必要があります(ほとんどのディストリビューションではデフォルトでオンになっています)。
Patrick 14

@パトリックovercommit_memory0overcommit_ratioです50
Reactormonk 2014

回答:


12

あなたのコメントから、それはシステムがちょうど交換しているようです。

LinuxにはOOMキラーがあり、システムがメモリをオーバーコミットしたときに呼び出され、現在は実行されています。
Linuxはデフォルトでメモリのオーバーコミットを実行します。つまり、基本的には、システムが実際に持っているよりも多くのメモリをプログラムに提供します。これは、プログラムが実際に要求するすべてのメモリを使用しないことを前提にしています。ただし、システムがメモリ不足になると、実行中のさまざまなプロセスにメモリがあることを既に通知しているため、メモリを拒否することはできません。代わりに、それはOOMキラーを呼び出すことです。OOMキラーは基本的に、カーネルがメモリ不足状態を緩和すると考えるプロセスを見つけます。通常、これは最も多くのメモリを使用するプロセスですが、アルゴリズムは実際にはそれよりもはるかに複雑です。

(自動モード)にovercommit_memory設定しているため0、カーネルはメモリのオーバーコミットを実行しています。ですから、あなたの説明された振る舞いから、それはシステムがひどく交換しているように聞こえます。

ここから2つのオプションがあります。

スワップを減らす

システムのRAMが不足しているため、カーネルが物事をスワップに押し込み始めます。システムのスワップが不足すると、OOMキラーが呼び出されます。ただし、空きスワップ領域が残っているため、これは起こりません。

オリジナルのアイデア、手動でプロセスを強制終了します。

システムのスワップが多すぎて何かを停止する必要があると思われる場合は、プロセスを手動で強制終了できます。これは、カーネルのSysRqトリガーを介して実行できます。

カーネルには「マジックSysRq」と呼ばれるものがあります。これは、ある種の緊急操作を実行するようにカーネルに指示する少しの機能です。これは、「すべてのボリュームを読み取り専用で再マウントする」、「すべてのファイルシステムを同期する」、「今すぐ再起動する」などの場合があります。これらのオプションの1つは、OOMキラーを呼び出すことでもあります。

カーネルでマジックSysRqが有効になっている場合(カーネルオプションCONFIG_MAGIC_SYSRQ)、これを行うには2つの方法があります。

  1. Alt+ SysRq+ f
    キーボードのこれら3つのキーを押すだけです。
  2. echo f > /proc/sysrq-trigger
    これは、キーボードメソッドとまったく同じタスクを実行しますが、プログラムで実行します。

スワップを完全に無効にすることもできます。これは、ほとんどのシステムで私が行っていることであり、このためです。スワップは、カーネルが使用されていないデータを先取りしてスワップアウトし、より多くのRAMをキャッシュに使用できるようにするという点で有益です。しかし、それはあなたが見ているこの強制スワッピング問題につながります。

個人的には、最善の解決策は、強制スワッピングでOOMキラーを呼び出すカーネルオプションのようなものだと思います。基本的にプリエンプティブスワップを機能させますが、RAMが不足しているためにカーネルが何かをスワップに強制的に移動する場合は、OOMキラーを呼び出します。
残念ながら、これは私自身の個人的な願いです。これは行いません。


OOM Killerについては知りませんでした。topor psコマンドを使用してメモリ使用量を継続的に監視し、それが特定のしきい値制限を超えると、コマンドを使用してそのプロセスを強制終了するスクリプトを考えていましたkill
Ramesh 2014

私はスワップを使いません。
Reactormonk 2014

OOMキラーによって殺されたプロセスを参照しますgrep -E "oom-killer|Killed process" /var/log/syslog /var/log/syslog.1
lesmana

@Tassああ、私は「スワップを省略することにしました」というコメントを完全に気にしましたが、申し訳ありません:-(。物事を殺すカーネルを経験する必要があります。
パトリック

@Patrick発生しますが、30分後です。
Reactormonk 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.