すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:ECSインスタンスがダウンし、「メモリ不足とkillableプロセスなし」というエラーメッセージが表示された場合はどうすればよいですか。

最終更新日:Dec 13, 2024

Elastic Compute Service (ECS) インスタンスがダウンし、エラーログにOut of memory and no killable processesエラーメッセージが表示された場合は、このトピックで説明されているソリューションを使用して問題を解決できます。

問題の説明

インスタンスが実行時にダウンし、次のようなコールスタックが表示されます。

[28663.625353] [ pid ]   uid  tgid total_vm      rss nr_ptes nr_pmds swapents oom_score_adj name
[28663.625363] [ 1799]     0  1799    26512      245      56       3        0         -1000 sshd
[28663.625367] [29219]     0 29219    10832      126      26       3        0         -1000 systemd-udevd
[28663.625375] Kernel panic - not syncing: Out of memory and no killable processes...
[28663.634374] CPU: 1 PID: 3578 Comm: kworker/u176:4 Tainted: G           OE   3.10.0-1062.9.1.el7.x86_64 #1
[28663.676873] Call Trace:
[28663.679312]  [<ffffffff8139f342>] dump_stack+0x63/0x81
[28663.684421]  [<ffffffff811b2245>] panic+0xf8/0x244
[28663.689184]  [<ffffffff811b98db>] out_of_memory+0x2eb/0x550
[28663.694726]  [<ffffffff811be254>] __alloc_pages_may_oom+0x114/0x1c0
[28663.700959]  [<ffffffff811bedb3>] __alloc_pages_slowpath+0x7d3/0xa40
[28663.707279]  [<ffffffff811bf229>] __alloc_pages_nodemask+0x209/0x260
[28663.713599]  [<ffffffff81216535>] alloc_pages_current+0x95/0x140
[28663.719573]  [<ffffffff811ba5ee>] __get_free_pages+0xe/0x40
[28663.725113]  [<ffffffff81075dae>] pgd_alloc+0x1e/0x160
[28663.730225]  [<ffffffff810875e4>] mm_init+0x184/0x240
[28663.735249]  [<ffffffff81088102>] mm_alloc+0x52/0x60
[28663.740186]  [<ffffffff81257640>] do_execveat_common.isra.37+0x250/0x780
[28663.759839]  [<ffffffff81257b9c>] do_execve+0x2c/0x30
[28663.764864]  [<ffffffff810a231b>] call_usermodehelper_exec_async+0xfb/0x150
[28663.777246]  [<ffffffff81741dd9>] ret_from_fork+0x39/0x50

原因

インスタンスのオペレーティングシステムカーネルがプロセスへのメモリの割り当てに失敗し、特定のプロセスを強制終了してメモリを解放しようとすると、インスタンスで実行されているプロセスを強制終了することはできません。 その結果、インスタンスがダウンします。 この問題は、次の理由で発生する可能性があります。

  • オペレーティングシステムのカーネルでメモリリークが発生し、システムで使用可能なメモリが不足します。

  • oom_score_adjの値が -1000に設定されているプロセスは、過剰なメモリを使用し、強制終了できません。 これにより、システム内の使用可能なメモリが不足します。

    説明

    oom_score_adjの値は、プロセスがメモリ不足 (OOM) 条件の下でカーネルによってキルされるように選択される可能性を示す整数である。 より低い値は、プロセスがカーネルによってOOMキリングのために選択される可能性が低いことを示し、より高い値は、プロセスが選択される可能性が高いことを示す。

解決策

重要

問題が発生したLinuxインスタンスでソリューションの操作を実行する前に、Linuxインスタンスのスナップショットを作成してデータをバックアップすることを推奨します。 これにより、偶発的な操作によるデータの損失を防ぎます。 スナップショットの作成方法については、「ディスクのスナップショットの作成」をご参照ください。

  1. オペレーティングシステムのカーネルでメモリリークが発生していないか確認してください。

    詳細については、「インスタンスのslab_unreclaimableメモリの割合が高い場合の対処方法」をご参照ください。

  2. oom_score_adjの値が正しく設定されているかどうかを確認します。

    1. pstop、またはpgrepコマンドを実行して、特定のプロセスのPIDを取得します。 サンプルコマンド:

      ps aux | grep <Process name>

      <プロセス名> を、PIDを取得するプロセスの名前に置き換えます。

    2. 次のコマンドを実行して、oom_score_adj値を確認します。

      cat /proc/<PID>/oom_score_adj

      <PID> を取得した実際のPIDに置き換えます。

      環境と要件を組み合わせて、oom_score_adjの値に基づいて、プロセスのOOMキリング設定が妥当かどうかを評価できます。 プロセスのoom_score_adjの値が -1000の場合、プロセスの優先度は低く、カーネルによるOOMキリングに選択される可能性は低くなります。 その結果、システム内の使用可能なメモリが不足する可能性がある。