テクノロジー · 実用ガイド

コンテナが 137 で終了、または「OOMKilled」と表示?メモリを増やす前に SIGKILL 境界を証明する

137 はプロセスが SIGKILL を受けたことを示しますが、送信者は示しません。同じ障害時間帯のランタイム、cgroup、ノード、オーケストレーターの証拠を突き合わせてから制限を変えます。

終了コード 137 周辺のランタイム、cgroup、ノード、オーケストレーターの証拠を結ぶ図
イラスト:四層の証拠を相関して初めて 137 を診断にできます。 Watch at Ease

終了コードは手掛かりであり根本原因ではありません。137 は通常 SIGKILL を表しますが、プロセスは送信者を報告できません。OOMKilled も同じ試行と時間帯に結び付く場合だけ強い証拠です。

メモリ変更前に時刻付き台帳を作り、ランタイム終了記録、cgroup カウンター、ノードカーネル、オーケストレーターイベントを比較します。各層が一致するか、不一致を明示した場合だけ診断を受け入れます。

1. 一つの障害時間帯を固定する

正確なコンテナ試行、ノード、開始・終了時刻、コード、シグナル、ランタイム理由、最後の動作を記録します。再起動は状態を置き換えます。

時刻を正規化し生の出力を保持します。現在のカウンターを古いログや別レプリカと混ぜません。

2. 137 を SIGKILL の証拠として扱う

送信候補としてカーネル OOM、運用者、自動化、ランタイムのタイムアウト、オーケストレーターの猶予期間、特権プロセスを列挙します。

OOMKilled は同じ試行に結び付けます。false または欠落なら OOM を仮説のままにします。

3. メモリ境界を特定する

実際の cgroup と上限を特定し、memory.max、使用量、memory.events とリーフ・祖先の差分を保存します。

リーフの oom_kill 増加はその境界を支持し、ノード OOM はより広い境界を支持します。差分がなければ検証を続けます。

4. ノードとオーケストレーターを相関する

同じ秒のログとイベントを読み、メモリ圧力、退避、削除、プローブ失敗、ロールアウト、ドレイン、猶予満了を探します。

得られない証拠は欠落として記録します。制限やローテーションは確信度を下げますが、仮説を事実にはしません。

5. 証明した境界を直す

コンテナ OOM なら作業セット、割り当てピーク、並行度を測ります。ノード圧力、停止エスカレーション、外部キルなら容量、終了処理、送信者を直します。

制御負荷で再現し、oom_kill 差分、ノード OOM、説明不能なエスカレーションがなく、終了記録が期待どおりなら受け入れます。

コンテナ OOM、ノード OOM、停止エスカレーション、外部 SIGKILL の判断図
イラスト:一致する証拠で経路を分け、実際に終了させた境界だけを変更します。 Watch at Ease