メモリが不足するとシステムがハングする


34

eeePC 900aを持っています。ディスクとして8GBのフラッシュと1GBのRAMしかありません。インストールされているLinuxディストリビューションはArchLinuxです。

システムのメモリが不足すると、非常に応答しなくなります。TTY1への切り替えやマウスポインターの移動などを行うのに数秒/分かかります。時々、システムがフリーズしたように見えることがあります。3年前、私はそれを放っておき、今のところ何も変更されていません。

このeeePCでスワップパーティション/ファイルを作成することは避けたいと思います。ディスクがすでにそれほど小さく、また、スワップスペースに多くの書き込みを行うと、フラッシュカードの寿命が大幅に短くなるためです。さらに、スワップファイル/パーティションは、問題を明確に修正するのではなく、単に移動させるだけだと思います。

カーネルは、メモリを使い果たしたときにいくつかのランダムなアプリケーションを強制終了することになっていないのですか?なぜそれをするのに失敗するのですか?

数ヶ月/数年前、私はすでにこれをさらに調べようとしましたが、実際に機能するものは見つかりませんでした...


1
セットアップで使用しているDE / WM、実行しているサービス/デーモンは何ですか?完全なデスクトップ環境を使用して、たとえばChromiumまたはFirefoxでブラウジングすると、ブランチのRAMが消費されます。Arch Linux自体を実行するには1GBのRAMで十分ですが、本当に重要なのはその上に置くものです。

1
LXDEを使用しています。Chromiumは通常、RAMのほとんどを使用するプログラムです。とにかく、これはポイントではありません。私のシステムが使用しているメモリの量を気にする必要があるのは私ではなく、そのために死ぬべきではないのは私のシステムです。システムのメモリが不足している場合、必要なアプリケーションを自由に強制終了できます。フリーズないようにしたいだけです。
ペオ

6
つまり、次のようなスクリプトを(擬似コードで)実行することを真剣に考えていますwhile(true){ if( $FREE_MEMORY<10MB ){ kill -9 $RANDOM_PID; } }。これは間違いなく私の問題を解決するでしょう。しかし、待ってください、カーネルはそれを行うべきではありませんか(そして、私のスクリプトよりもはるかに良い方法で)?なぜ仕事をしていないのですか?
ペオ

2
@Marcin、それは問題を動かすだけで、それを修正しません。4GBのメモリがあったとしても(何らかのスワップのおかげで)、システムがメモリ不足になる可能性があります(したがって、ハングします)。避けたいのは、RAMがなくなったときにシステムがフリーズすることです。私のカーネルがRAMが終わるとすぐにクロムを突然殺してしまうなら、今持っている1GBでも満足です。
ペオロ

4
@Lee「マジックsysrq」は、カーネルに直接移動する主要なコンボです。これは、キーボードとマウスが応答しない場合でも機能することがよくあります。参照en.wikipedia.org/wiki/Magic_SysRq_key
ラマン

回答:


14

キーボードの組み合わせにより、OOM-killer(out of memory killer)を直接呼び出すことができます。

SysRq-F

SysRqキーは通常、キーボードのPrtScキー内で結合されます。

OOM-killerは一部のプロセスを強制終了し(-es)、システムは再び応答します。

上記のコメントでこの機能に関するアドバイスについては、Thx Raman。

PS:これはとても助かりました。これは、Chromeやメモリ欲張りソフトウェアが原因である場合、これがその問題に関する最も有用なアドバイスであるという意見に同意します。しかし、OOM-killerはいくつかの本当に重要なプロセスを殺す可能性があることに注意してください。慎重に使用してください。


2
私は鍵を持っていますPrtScn|SysRq。ただし、押すとSysRq - Fスクリーンショットが表示されるだけです
リー

2
あなたは基本的に上記の私のコメントを受け取り、それを答えにしたので、小さな帰属がいいでしょう。とにかくあなたを支持しました。:-)
ラマン

3
@Lee有効にする必要があります。一部のディストリビューションでは、マジックsysrqがデフォルトで有効になっていません。これは役立つはずです:google.ca/search
ラマン

2
@Ramanマシンが既にフリーズしているため、これをデフォルトで「有効にする」ことができないと思う人は99%だと思います...なぜデフォルトで有効になっていないのですか?
-themihai

3
@themihaiは、多くの人がセキュリティリスクと考えているためです。ロック画面などのアプリケーションの状態に関係なく、入力デバイスへの物理アクセスを介してカーネルに直接アクセスできます。
ラマン

12

物事の自然な状態は、アプリケーションデータがRAMにあり、ファイルがディスクにあることです。
パフォーマンスに関しては、物事の理想的な状態は、頻繁に使用するデータはRAMにあり、現時点では必要のないデータはディスクにあるということです。
通常のシステムでは、カーネルはこの理想に到達するために2つのことを行います。

  • しばらく使用されていないアプリケーションデータはディスクに移動できます。これはスワップです。
  • 最近使用されたファイルのデータはRAMに保持されます。これは、ディスクキャッシュ(ディスクから読み取られるデータ用)とディスクバッファー(ディスクに書き込まれようとしているデータ用)です。

典型的なシステムでは、RAMのかなりの部分がキャッシュとバッファに割り当てられます(50%が典型的な数値です)。RAMは有限のリソースであるため、一部のアプリケーションデータを置き換えてスワップする必要があります(RAMを使用するより良い方法がある場合にのみスワップが必要です)。

スワップのないシステムでは、アプリケーションデータがほとんどすべてのRAMを使用しているため、キャッシュ用のスペースがほとんどありません。その場合、システムは遅くなる可能性があります。カーネルは、本当に必要になるまでアプリケーションの強制終了を開始しません。アプリケーションが利用可能なメモリの99%のみを満たしている限り、システムは動作を続けますが、ファイルデータを常にディスクからロードおよびリロードする必要があるため、非常にゆっくりです。同じアプリケーションが実行されていれば、システムはその時点でのスワップにより高速になります。

この問題の詳細については、このlkmlのディスカッションこのブログ投稿を参照してください。

ディスクキャッシュ用に最小量のRAMを予約するようカーネルに指示する直接的な方法は知りません。RAMのごく一部を、おそらく圧縮されたスワップスペースとして設定できます。その面で成功報告がありますが、特定のケースでは保証しません。


1
説明とリンクのおかげで、彼らはスワップに関するいくつかの疑問を解決するのに役立ちました。私の質問に対する@Marcinの回答に続いて、RAMに256MBの圧縮仮想スワップ(compcache)を設定しました。しかし、これは私の質問に完全には答えません。RAM全体がアプリケーションのみで使用され、何もキャッシュされない場合、システムが遅くなることを理解しています。それでも、RAMが完全になくなったときに、このシステムが数分/時間(おそらく永遠に)ハングする理由を理解できません。3時間ではTTY1に切り替えることができない場合、メモリ不足のときにカーネルがアプリケーションを強制終了するという仕事をしていないと思います。
-peoro

32GBの物理メモリでスワップが無効になっていて、メモリ割り当てで不正なソフトウェアがなくなると(hello ld、ごみの断片)、それでもほぼ1分間ハングアップし、信じられないほどラグのあるマウスを1秒間動かすことができますまたは数秒ごとに2つ。LinuxのOOM処理は完全に不要です。運がよければ、OOMキラーは、デスクトップ環境を完全に台無しにすることなく、適切なプロセスを強制終了します。そして、私はLinuxの大ファンです。ページングを有効にすると、さらに悪化します。Linuxページングは​​冗談です。
doug65536

6

これは2007年以降の既知のバグです- 高いメモリ使用量でシステムがフリーズするを参照してください。

この状況では、Windowsは1つ以上のアプリケーションを閉じるようにユーザーに警告するダイアログを表示します。


2
Ubuntuでは「未割り当て」のようです。おそらく、DEはユーザーに警告するか、メモリを集中的に使用するアプリをフリーズする必要がありますか?
nkkollaw

1
@nbrogi-静かにフリーズします。しかし、Ubuntu開発者にそうするよう説得してください。
ダンダスカレスク

6

最近、私の問題の解決策を見つけました。

Linux OOM Killerは適切に機能しないため、ユーザー空間OOM Killer:earlyoomの使用を開始しました。それはCで書かれており、かなり設定可能であり、私にとって魅力のように機能しています。

FacebookのOOMDなど、サーバーで実行するために開発された代替手段についても聞いたことがありますが、これを試したことはありません

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