GNU/Linux >> Linux の 問題 >  >> Linux

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

キーボードの組み合わせにより、OOM キラー (メモリ不足のキラー) を直接呼び出すことができます:

SysRq-F

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

OOM-killer が一部のプロセス (-es) を強制終了し、システムが再び応答するようになります。

上記のコメントで、この機能に関するアドバイスをくれた Raman さんに感謝します。

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


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

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

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

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

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

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


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

Linux OOM キラーはその仕事を適切に行うことができないため、ユーザー空間の OOM キラー:Earlyoom を使い始めました。これは C で書かれており、かなり設定可能で、私にとって魅力的に機能しています。

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


Linux
  1. 4.0 GiB が確実にあるのに、システムが 3.2 GiB の RAM しか表示しないのはなぜですか

  2. Linux:より大きなチャンクでスワップアウトします

  3. 十分な空きメモリが残っているときにスワップが使用されるのはなぜですか?

  1. dmidecode:Linuxでシステムハードウェア情報を取得する

  2. システム統計:知っておくべきLinux統計コマンド

  3. Linux –メモリが不足するとシステムがハングしますか?

  1. スラッシング(RAMから)時にシステムが応答しなくなるのを防ぐ方法は?

  2. RAM を消費する Python プログラム

  3. Linux マシン内から RAM メモリ チップの仕様を検出する方法