本ドキュメントでは、Enterprise Distributed Application Service (EDAS) でよく発生する 2 つの問題、HTTP ページのアクセス失敗とリモートプロシージャコール (RPC) サービスの呼び出し失敗について、その診断と解決方法を説明します。
現象
以下の問題のいずれか、または両方が発生します。
EDAS アプリケーションのページに HTTP 経由でアクセスできません。
アプリケーション間の RPC サービスが応答しません。
HTTP ページのアクセス失敗
考えられる原因
クライアントとサーバーホスト間のネットワーク接続の問題。
不適切な HTTP パス構成 (コンテキストパスまたはポートの不一致)。
Tomcat に記録されたアプリケーションエラー。
Java 仮想マシン (JVM) のパフォーマンスの問題 (スレッドのデッドロック、メモリ枯渇、またはクラスの読み込みの失敗)。
ステップ 1:ネットワーク接続の確認
ご利用のサーバーからページの URL に対して curl または ping を実行し、URL が到達可能であることを確認します。
curl -I http://<your-app-url>:<port>/<context-path>ping <your-server-host>期待される結果:
curlの応答が成功した場合:200 OKや302 Foundなどの HTTP ステータスコードは、サーバーが到達可能であることを示します。HTTP/1.1 200 OK Content-Type: text/html;charset=UTF-8curlの応答が失敗した場合:Connection refusedまたはConnection timed outというメッセージは、ネットワークの問題を示します。curl: (7) Failed to connect to <your-app-url> port 8080: Connection refused
次のステップ:
URL が到達不能な場合は、クライアントからサーバーホストへのネットワーク接続を確認します。セキュリティグループルール、ファイアウォール設定、およびルーティング構成を検証してください。次に進む前に、ネットワークの問題を解決する必要があります。
URL は到達可能であるにもかかわらず、アプリケーションが正しく応答しない場合は、ステップ 2 に進みます。
ステップ 2:Tomcat ログの確認
Tomcat のインストールディレクトリ /logs にあるログファイルでエラーを確認します。
ls <tomcat-install-dir>/logs/以下のログファイルを確認してください。
| ログファイル | 内容 |
|---|---|
catalina.out | Tomcat サーバーの起動メッセージとランタイムメッセージ |
localhost.log | アプリケーションレベルのエラーと例外 |
| アプリケーション固有のログ | アプリケーションからのカスタムログ出力 |
次のステップ:記録されているすべてのエラーを解決してください。一般的な問題には、依存関係の欠落、サーブレットの初期化の失敗、データベース接続の失敗などがあります。エラーを修正した後、Tomcat を再起動してアクセスを確認します。
ステップ 3:HTTP パス構成の確認
ページの URL に含まれるポート番号とコンテキストパスが、ご利用のアプリケーションの HTTP 構成の値と一致していることを確認します。
| 設定 | 確認場所 | 例 |
|---|---|---|
| ポート | Tomcat の server.xml または EDAS アプリケーションの構成 | 8080 |
| コンテキストパス | アプリケーションのデプロイ構成 | /myapp |
URL のポート (例:http://host:8080/myapp) が、アプリケーションがリッスンしているポートと一致していることを確認してください。構成されたポートと URL のポートの不一致は、アクセス失敗の一般的な原因です。
ステップ 4:JVM の検査
アプリケーションが実行中であるにもかかわらず応答しない場合は、JVM の状態を確認します。
Java のプロセス ID を取得します。
ps -ef |grep java出力には実行中の Java プロセスが一覧表示されます。ご利用の EDAS アプリケーションのプロセスを特定し、その PID (2 列目) をメモします。
admin 2083 1 0 09:00 ? 00:05:32 /usr/bin/java -jar /home/admin/app.jar次の JVM 診断コマンドを実行します。
# スレッドダンプを生成して、デッドロックやブロックされたスレッドを確認します sudo jstack -F <process-id> # クラス読み込みの統計を監視します sudo jstat -class <process-id> <interval> <count> # ヒープメモリ使用量を検査します jmap -heap <process-id>以下のプレースホルダーを置き換えてください。
プレースホルダー 説明 例 <process-id>Java プロセス ID ( ps -ef |grep java2083<interval>サンプリング間隔 (秒またはミリ秒) 1000<count>収集するサンプル数。継続的に出力する場合は省略します。 10
RPC サービスの呼び出し失敗
考えられる原因
サービスプロバイダーとサービス利用者が異なるアカウントに属しているか、切断されたネットワーク内にあります。
ファイアウォールまたはセキュリティグループルールがサーバーポートをブロックしています。
サービスにエラーがあり、サービスリストに登録できません。
サーバーとサービスレジストリ間のネットワークに問題があります。
サービスに必要な権限がありません。
サービス呼び出しがタイムアウトします。
ステップ 1:アカウントとネットワーク接続の確認
以下を確認してください。
RPC 呼び出しを開始するアプリケーションとサービスを提供するアプリケーションの両方が、同じ Alibaba Cloud アカウントに属していること。
2 つのアプリケーションがネットワーク経由で相互に到達できること。ホスト間で
pingまたはtelnetを使用してテストします。ping <service-provider-host>期待される結果:ping 応答が成功すれば、ネットワーク接続が確認できます。パケットが失われたり、ホストが到達不能であったりする場合は、VPC 構成、ルーティングテーブル、およびネットワーク ACL を確認してください。
ステップ 2:ブロックされたポートの確認
ファイアウォールやセキュリティグループルールが、サービスがリッスンしているポートをブロックしていないことを確認します。
telnet <service-provider-host> <service-port>期待される結果:
接続成功:
Connected toというメッセージは、ポートがアクセス可能であることを示します。Trying <service-provider-host>... Connected to <service-provider-host>.接続失敗:
Connection refusedまたはConnection timed outというメッセージは、ポートがブロックされていることを示します。Trying <service-provider-host>... telnet: Unable to connect to remote host: Connection refused
次のステップ:接続に失敗した場合は、セキュリティグループとホストレベルのファイアウォール設定 (iptables または firewalld) を確認してください。インバウンドルールを追加して、サービスポートでのトラフィックを許可します。
ステップ 3:Tomcat アプリケーションログの確認
サービスプロバイダーのホストで Tomcat アプリケーションログのエラーを確認します。
cat <tomcat-install-dir>/logs/catalina.out | grep -i "error\|exception"EDAS コンソール内のサービスリストにサービスが表示されるまで、すべてのエラーを解決してください。一般的な問題には、Bean の初期化の失敗、構成ファイルの欠落、依存性注入のエラーなどがあります。
ステップ 4:HSF ログの確認
それでもサービスが失敗する場合は、High-speed Service Framework (HSF) のログでエラーコードを検査します。
cat /home/admin/logs/hsf/hsf.log特定原因とソリューションを見つけるには、HSF エラーコードのリファレンスでエラーコードを検索してください。