Docker コンテナの OOM キラー コンテナの再起動をトラブルシューティングするにはどうすればよいですか?
4845
Created On 05/29/25 21:30 PM - Last Modified 07/09/25 17:28 PM
Objective
- 次の Docker コマンドの出力を確認します。
- docker ps
- docker 検査
- docker 統計
目的は、Docker コンテナが再起動したかどうかを判断し、再起動した場合は、コンテナの再起動の原因が OOM キラーであるかどうかを確認することです。
Environment
- Linux/macOSマシン
- Dockerランタイム
Procedure
- ドッカーPS
1. このコマンドは、環境内で実行中のコンテナを表示します。
2. コンテナがどのくらいの期間保管されているかを確認するには、 STATUS列をチェックする必要があります。
健康で走り回っています。
3. 実行時間から、コンテナが再起動/再作成された可能性が証明されます(この場合、2時間) - docker 検査
1. 以下に示すスニペットはこのコマンドの出力から切り取ったもので、コンテナが停止/強制終了された原因がOOM キラーであったことが確認できます。
コンテナはFinishedAtに最後に強制終了されました: "2025-05-19T13:42:31.566652718Z OOM キラー プロセス。
2. このコマンドの出力には、もう 1 つのスニペット、つまり 1 行があり、 "RestartCount": 41 と記載されています。 - docker 統計
1. このコマンドは、コンテナに設定されている cgroup 制限を表示します。この制限を超えていることが、再起動の原因となっている可能性が最も高いです。
解決:
Dockerの更新する コマンドは、特定のリソース制限と設定オプションを変更できる強力なユーティリティです。実行中のコンテナ停止して再作成する必要はありません。これは、ワークロードに基づいてリソース割り当てを動的に調整するのに非常に便利です。
Dockerを更新する方法は次のとおりです 特にリソース制限に関連して機能します:
-
メモリ制限:
--memoryor-m: Sets the maximum amount of memory the container can use (e.g.,512m,2g). If a container exceeds this limit, it may be OOMKilled (Out Of Memory Killed) by the system.--memory-swap: The total amount of memory and swap the container can use. If you set--memorybut not--memory-swap, the container can use swap space up to twice the memory limit (if host swap is enabled). To prevent a container from using any swap, set--memory-swapto the same value as--memory
- このユースケースでは、コンテナに4Giのメモリが不足しているため、コンテナの再起動が発生します。これは次のコマンドで変更できます。
docker update --memory=6g <name-of-the-container>
以下の点にご注意ください:
- Memory Swap (
--memory-swap): Allows you to update the total memory the container can use (RAM + Swap).- If
--memory-swapis set to the same value as--memory, the container cannot use swap. - If
--memory-swapis-1, the container can use unlimited swap (up to the host's available swap). - If
--memoryis set and--memory-swapis not, the container can use swap up to the same amount as the memory limit (total 2x the memory limit)
- If
Additional Information
OOM メッセージは、次のコマンドを使用して確認できます。
sudo dmesg -T | grep -i "oom-killer" or sudo journalctl -k | grep -i "oom-killer"