携わっている案件で、アプリケーション操作中にDockerコンテナが停止するという事象の報告を受けた。
そのコンテナはM1 MacbookProで動かしている(ローカル開発環境)。よくよく調べると、メモリ使用が多い処理が複数走っている時にコンテナが落ちるようである。
私はDockerを活用して開発する機会に触れる前にマネジメントの役割に携わることになり、Dockerについて詳しくない。なので、少し調べてみることにした。
調べてみたところ、メモリ不足(OOM)エラーが発生したら、デフォルトではアプリケーションのプロセスをkillするような設定になっているらしい。(Docker実践ガイド第3版より)
また、OOMでkillされたかどうかは、docker inspectコマンドで確認ができるようである。
実際に事象の報告を受けた操作を行なってコンテナが停止した後、docker inspectコマンドで確認したところ、OOM killで停止していたことを確認した("OOMKilled": trueというのが出力の中に含まれている)。
ネットで調べたところ、--oom-kill-disableというオプションがあり、これをtrueにすると強制的に停止することは無くなるらしい。
試してみたが、Macだからか「Your kernel does not support OomKillDisable.」と言われた。サポートされていないらしい。Linuxだったらサポートされているのかも。
対策としては、割り当てメモリを増やす+Swapを増やすことだろうか。
---
よし、ひとつアウトプットしたぞー。
雑でもいいから、まずはアウトプットすることを優先に。
今日はこれで終わり。