Kubernetes: OOMKilled
Kubernetesでコンテナがメモリ制限を超えて強制終了されるエラーの原因と解決策
概要
コンテナが設定されたメモリ制限を超えた際にOOM Killerによって強制終了されるエラーです。
エラーメッセージ
``` State: Terminated Reason: OOMKilled Exit Code: 137 ```
原因
- メモリ制限が低すぎる: アプリケーションの必要量を下回る
- メモリリーク: アプリケーションのバグ
- JVMヒープ設定ミス: コンテナ制限とヒープサイズの不整合
- 一時的なスパイク: 負荷増加時のメモリ急増
解決策
1. メモリ使用量を確認
```bash
Pod のメモリ使用状況
kubectl top pod
コンテナの詳細
kubectl describe pod ```
2. リソース制限を調整
```yaml apiVersion: v1 kind: Pod spec: containers:
- name: app resources: requests: memory: “256Mi” limits: memory: “512Mi” ```
3. JVMアプリケーションの場合
```yaml env:
- name: JAVA_OPTS value: “-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0” ```
4. VPA (Vertical Pod Autoscaler) を使用
```yaml apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-vpa spec: targetRef: apiVersion: apps/v1 kind: Deployment name: my-app updatePolicy: updateMode: “Auto” ```
よくある間違い
- limitsなしでデプロイ(ノード全体に影響)
- requestsとlimitsの差が大きすぎる
- JVMでコンテナ認識が無効
関連エラー
関連エラー
Kubernetes の他のエラー
この記事は役に立ちましたか?