EC2で動かしていたアプリケーションが突然動かなくなった時の話

EC2インスタンスでアプリケーションを動かしていた際、突然プロセスが終了した原因を調査したときの記録です。

はじめに

EC2上でKeycloakを動かしていたところ、予期せずアプリケーションが停止してしまいました。ここでは、その原因を特定するために実施した手順をまとめます。

調査手順

  1. ログ取得
    まず、EC2インスタンスに接続してログを取得しました。直接インスタンスにログインして確認するか、scpでログをダウンロードすることが可能です。いずれの場合も、/var/log/messagesファイルを確認することが重要です。

    ssh -t {EC2インスタンスのIP} 'sudo cat /var/log/messages' > messages
    
  2. ログ確認
    アプリケーションが停止した時間の近くのログを調べます。以下はその抜粋です。

    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-cloudwatoom-killerを実行したことがわかります。これにより、システム全体のメモリ不足が引き金となり、Keycloakのプロセスが終了しました。

関連記事