EC2インスタンスでアプリケーションを動かしていた際、突然プロセスが終了した原因を調査したときの記録です。
はじめに
EC2上でKeycloakを動かしていたところ、予期せずアプリケーションが停止してしまいました。ここでは、その原因を特定するために実施した手順をまとめます。
調査手順
-
ログ取得
まず、EC2インスタンスに接続してログを取得しました。直接インスタンスにログインして確認するか、scp
でログをダウンロードすることが可能です。いずれの場合も、/var/log/messages
ファイルを確認することが重要です。ssh -t {EC2インスタンスのIP} 'sudo cat /var/log/messages' > messages
-
ログ確認
アプリケーションが停止した時間の近くのログを調べます。以下はその抜粋です。Sep 3 18:18:13 ip-10-0-1-127 kernel: Out of memory: Killed process 18267 (java) total-vm:2405852kB, anon-rss:515832kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:1492kB oom_score_adj:0
このログから、
java
プロセスがメモリ不足(Out of Memory, OOM)によってoom-killer
により殺されたことが確認できます。該当プロセスはKeycloak(PID 18267)であり、大量のメモリを消費していたことがわかります。また、その前には以下のようなログが記録されていました。
Sep 3 18:18:13 ip-10-0-1-127 kernel: amazon-cloudwat invoked oom-killer: gfp_mask=0x100cca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
amazon-cloudwat
がoom-killer
を実行したことがわかります。これにより、システム全体のメモリ不足が引き金となり、Keycloakのプロセスが終了しました。