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

Linux のメモリ不足 (OOM) キラーが自動的に実行されず、sysrq-key で機能するのはなぜですか?

OOM キラーが自動的に呼び出されない理由は、メモリ不足に近づいているときに、システムが完全に遅くなり、応答しなくなるためです。 y、実際にはメモリ不足の状況には達していません。

単純化しすぎて、ほぼ完全な RAM には 3 種類のデータが含まれています:

<オール>
  • 必須のカーネルデータ
  • 重要なプロセス データのページ (例:プロセスが RAM のみで作成したデータ)
  • 重要でないプロセス データのページ (たとえば、実行可能ファイルのコードなどのデータで、ディスク上またはファイル システム内にコピーがあり、現在メモリにマップされている間、使用時にディスクから「再読み取り」できるデータ) )
  • メモリ不足の状況では、私が知る限り、Linux カーネルは kswapd0 です。 カーネル スレッドは、データの損失と機能の損失を防ぐために 1. と 2. を捨てることはできませんが、現在実行されていないフォーム プロセスであるメモリ ファイルにマップされたデータを RAM から少なくとも一時的に自由に削除できます。

    これはディスクのスラッシングを伴う動作ですが、常にデータを破棄してディスクから再読み取りすることは、プロセスの必要な削除/強制終了と解放を回避するか、少なくとも延期するのと同じくらい有用であると見なすことができます。記憶を失い、高い 価格:パフォーマンス。

    [load pages from disk to ram with code of executable of process 1]
    [ run process 1 ] 
    [evict pages with binary of process 1 from ram]
    [load pages from disk to ram with code of executable of process 2]
    [ run process 2 ] 
    [evict pages with binary of process 2 from ram]
    [load pages from disk to ram with code of executable of process 3]
    [ run process 3 ] 
    [evict pages with binary of process 3 from ram]
    ....
    [load pages from disk to ram with code of executable of process 1]
    [ run process 1 ] 
    [evict pages with binary of process 1 from ram]
    

    明らかに IO コストが高く、システムが応答しなくなる可能性がありますが、技術的にはまだ完全に使い果たされていません

    ただし、ユーザーの観点からは、ハング/フリーズし、結果として応答しない UI は、単純にプロセスを強制終了するよりも、実際には好ましくない可能性があります (たとえば、ブラウザー タブのメモリ使用量が根本的な原因/原因である可能性が非常に高い可能性があります)。

    Magic SysRq はシステムの無応答による影響が少ないため、OOM を手動で開始するための Magic SysRq キー トリガーが優れているように思われる質問が示されているのは、このような場合です。

    プロセスをまったく維持することが重要なユースケースがあるかもしれませんが (パフォーマンス デスクトップの場合、ユーザーはフリーズした UI よりも OOM キラーを好む可能性があります。 stackoverflow のこの回答では、このような状況でメモリからクリーン マップされた fs でバックアップされたファイルを除外すると主張するパッチがあります。


    ストレス テスト中に、ファイル /sys/fs/cgroup/memory/memory.oom_control を監視できます。

    または

    最後のロックアップの前後に変更されたかどうかを確認するために、最終更新日を確認できます。これは、それが仕事をしようとしていたかどうかを教えてくれます.

    under_oom 0
    

    それはあなたの問題です:

    under_oom    0 or 1 (if 1, the memory cgroup is under OOM, tasks may
                 be stopped.)
    

    1 に設定されている場合は、それが oom 制御下にあることを意味します。有効。
    0 に設定すると、そのように oom の制御下にありません。無効です。


    Linux
    1. なぜCdはプログラムではないのですか?

    2. Linux – Oom Killerはどのプロセスを最初に殺すかをどのように決定しますか?

    3. Linux –ユーザーは、プロセスを実行してその所有者になるためにログインする必要がありますか?

    1. Linux –Setuidが機能しないのはなぜですか??

    2. Linux –ロケールEs_mxは機能するがEsは機能しないのはなぜですか?

    3. rc.local でスクリプトを実行します:スクリプトは機能しますが、起動時には機能しません

    1. Tomcat がポート 8080 で動作するのに 80 で動作しないのはなぜですか?

    2. 「&」を使用して Linux シェル コマンドを実行するのはなぜですか?

    3. Windows が Linux パーティション内のファイルを認識しないのはなぜですか?