すべてのプロダクト
Search
ドキュメントセンター

Enterprise Distributed Application Service:アプリケーションの実行プロセスが突然消えるのはなぜですか?

最終更新日:Mar 05, 2025

この問題は、オペレーティングシステムの物理メモリが不足しているか、アプリケーションを実行している Java Virtual Machine ( JVM )のプロセスが応答を停止したために発生します。このトピックでは、Linux オペレーティングシステムを例として、この問題の解決方法について説明します。

オペレーティングシステムの物理メモリ不足によってトリガーされた Out-of-memory ( OOM ) キラー

デフォルトでは、OOM キラーメカニズムはオペレーティングシステムで有効になっています。オペレーティングシステムの物理メモリとスワップスペースが不足すると、OOM キラーはプロセスを選択的に強制終了します。Linux は、実行中の各プロセスに oom_score と呼ばれるスコアを割り当てます。 /proc/<pid>/oom_score でスコアを確認できます。スコアが高いほど、優先順位が高くなります。この場合、OOM キラーはスコアの高いプロセスから降順にプロセスを強制終了します。

プロセスが OOM キラーによって強制終了された場合、OOM キラーは情報を書き込みます。たとえば、OOM キラーはプロセス ID ( PID )をオペレーティングシステムのログに書き込みます。このようにして、オペレーティングシステム( OS )ログを検索して、プロセスが OOM キラーによって強制終了されたかどうかを確認できます。

次のログは、ECS クラスタのプロセスが OOM キラーによって強制終了されたことを示しています。

[Wed Aug 31 16:36:42 2017] メモリ不足:プロセス 43805 (keystone-all) score 249 を強制終了するか、子プロセスを犠牲にする
            [Wed Aug 31 16:36:42 2017] プロセス 43805 (keystone-all) を強制終了しました total-vm:4446352kB, anon-rss:4053140kB, file-rss:68kB
            [Wed Aug 31 16:56:25 2017] keystone-all が oom-killer を呼び出しました: gfp_mask=0x280da, order=0, oom_score_adj=0
            [Wed Aug 31 16:56:25 2017] keystone-all cpuset=/ mems_allowed=0
            [Wed Aug 31 16:56:25 2017] CPU: 2 PID: 88196 Comm: keystone-all Not tainted 3.10.0-327.13.1.el7.x86_64 #1

次のログは、Swarm クラスタのプロセスが OOM キラーによって強制終了されたことを示しています。

メモリ cgroup のメモリ不足:プロセス 20911 (beam.smp) score 1001 を強制終了するか、子プロセスを犠牲にする
プロセス 20977 (sh) を強制終了しました total-vm:4404kB, anon-rss:0kB, file-rss:508kB

ログを検索するには、次のコマンドを実行します。

grep -i 'killed process' /var/log/messages

次のコマンドを実行することもできます。

egrep "oom-killer|total-vm" /var/log/messages

問題が発生した場合は、次のいずれかの方法を使用して問題を解決します。

  • ECS インスタンスの物理メモリサイズを増やします。または、強制終了されたプロセスに割り当てられているメモリサイズを減らします。

  • スワップパーティションが ECS インスタンスにマウントされているかどうかを確認します。ほとんどの場合、1 つ以上の ECS インスタンスにスワップパーティションがマウントされていないために、OOM キラーがトリガーされます。スワップパーティションを ECS インスタンスにマウントすると、インスタンスのパフォーマンスに悪影響を及ぼします。ただし、スワップパーティションをマウントすると、プロセスの正常性が確保されます。スワップパーティションがマウントされていない場合は、Linux でのスワップパーティションのマウント方法を検索し、スワップパーティションをマウントします。

アプリケーションを実行している JVM プロセスが予期せず終了する

ほとんどの場合、無効な Java Native Interface ( JNI )呼び出し、C でのヒープ外スペースエラー、その他のエラーが原因で、JVM の実行プロセスが応答を停止することがあります。前述の問題が発生した場合、 hs_err_<jvm_pid>.log という名前のファイルが、現在の JVM プロセスの作業ディレクトリに生成されます。 pwdx <jvm_pid> コマンドを実行して、ディレクトリを照会できます。ログファイルでは、エラーの原因、またはエラー発生時に実行されているスレッドを特定できます。さらに分析するために、コアダンプの生成を有効にすることもできます。

また、アプリケーションの詳細ページに移動し、Enterprise Distributed Application Service ( EDAS )コンソールの 基本情報 タブの アプリケーション設定 セクションで [異常終了の分析] を有効にすることもできます。アプリケーションの監視とアラート機能が有効になっている場合、JVM プロセスが予期せず終了するとアラートがトリガーされます。この場合、ECS インスタンスにログオンしてログを照会し、分析を実行して原因を特定できます。

Analysis of the unexpected exit of an application in EDAS