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インスタンスのスナップショットを作成してデータをバックアップすることを推奨します。 これにより、偶発的な操作によるデータの損失を防ぎます。 スナップショットの作成方法については、「ディスクのスナップショットの作成」をご参照ください。
オペレーティングシステムのカーネルでメモリリークが発生していないか確認してください。
詳細については、「インスタンスのslab_unreclaimableメモリの割合が高い場合の対処方法」をご参照ください。
oom_score_adj
の値が正しく設定されているかどうかを確認します。ps
、top
、またはpgrep
コマンドを実行して、特定のプロセスのPIDを取得します。 サンプルコマンド:ps aux | grep <Process name>
<プロセス名>
を、PIDを取得するプロセスの名前に置き換えます。次のコマンドを実行して、
oom_score_adj
値を確認します。cat /proc/<PID>/oom_score_adj
<PID>
を取得した実際のPIDに置き換えます。環境と要件を組み合わせて、
oom_score_adj
の値に基づいて、プロセスのOOMキリング設定が妥当かどうかを評価できます。 プロセスのoom_score_adj
の値が-1000
の場合、プロセスの優先度は低く、カーネルによるOOMキリングに選択される可能性は低くなります。 その結果、システム内の使用可能なメモリが不足する可能性がある。