このトピックでは、ネットワーク ツール、JVM ツール、診断ログを使用して、Apigee Edge のネットワークと JVM 関連の問題のトラブル シューティングを行う方法について説明します。
TCP/IP パケット スニファ(tcpdump)ユーティリティ
tcpdump ツールは、ネットワーク経由で送受信される TCP/IP パケットをキャプチャまたはフィルタリングできるコマンドライン パケット スニファツールです。Linux / Unix ベースのオペレーティング システムで使用できます。このユーティリティは、次の yum を使用してインストールできます。
yum install tcpdump
tcpdump ツールは、ネットワークや SSL 関連問題のトラブルシューティングに便利です。例:
- 502 Bad Gateway Error(EOF Exception が原因)
- 503 Service Unavailable Error
- SSL Handshake Failure
これらの問題のトラブル シューティングを行うには、まずエラーが発生したコンポーネントのペアを特定する必要があります。Edge の場合、次のペアのいずれかになります。
- クライアント アプリとルータ
- ルータと Message Processor
- Message Processor とバックエンド サーバー
問題のあるコンポーネントのペアを特定したら、これらのコンポーネントの 1 つまたは両方で tcpdump を使用してネットワーク パケットをキャプチャできます。
tcpdump を使用して特定のホストとの間で送受信されるパケットをキャプチャする
次の tcpdump コマンドを使用して、指定されたホスト(IP アドレス)との間で送受信されるすべてのパケットを取得し、指定されたファイルに情報を保存します。
tcpdump -i any -s 0 host <IP address> -w <File name>
各パラメータは次のとおりです。
パラメータ | 説明 |
-i | (管理画面)パケットをキャプチャする管理画面を指定します。値を「any」にすると、すべての管理画面からのパケットをキャプチャできます。 |
-s | (snarf / snaplen)キャプチャする各パケットの量を指定します。値を 0(ゼロ)にすると、すべてのパケットをキャプチャできます。 |
IP アドレス | パケットをキャプチャするためのホストの IP アドレスです。 |
ファイル名 | tcpdump に書き込むファイルの名前です。 |
例
たとえば、Message Processor と Backend Server との間でパケットをキャプチャするとします。
- Message Processor マシンにログインします。
- パケットをキャプチャするための Backend Server(22.22.22.22 と仮定)の IP アドレスを決定します。
次のコマンドを使用して、特定の IP アドレスを持つホストのネットワーク パケットをキャプチャします。
tcpdump -i any -s 0 host 22.22.22.22 -w rmp-123.pcap
バックエンド サーバーが複数の IP アドレスに解決される場合は、次に示すように、tcpdump コマンドでバックエンド サーバーのホスト名を使用します。
tcpdump -i any -s 0 host <Hostname> -w rmp-123.pcap
異なる IP アドレス(22.22.22.22、33.33.33.33、44.44.44.44)を持つ複数のバックエンド サーバがある場合、以下の tcpdump コマンドを使用します。
tcpdump -i any -s 0 host 22.22.22.22 or host 33.33.33.33 or host 44.44.44.44 -w rmp-123.pcap
tcpdumps の分析
tcpdump コマンドまたは GUI ベースのツール Wireshark を使用して、tcpdump を表示または分析できます。
リファレンス
ヒープダンプ
ヒープダンプは、Java プロセスのメモリのスナップショットです。ヒープダンプが収集された時点のヒープ内の Java オブジェクトやクラスに関する情報が含まれています。通常はサイズがかなり大きく、数百 MB から数 GB に及びます。
ヒープダンプは、Message Processor などの Java プロセスが次のように示すときに便利です。
- High Memory Usage
- OutOfMemoryError
Java プロセスのヒープダンプの生成
Java には、実行中の Java プロセスのメモリ統計やヒープダンプを生成するための jmap というユーティリティがあります。
次の jmap コマンドを使用して、Java プロセスのヒープダンプを生成します。
sudo -u apigee <JAVA_HOME>/bin/jmap -dump:live,format=b,file=<filename> <pid>
各パラメータは次のとおりです。
パラメータ | 説明 |
JAVA_HOME | Java のインストール ディレクトリです。 |
filename | ヒープダンプが書き込まれるファイル名です。 |
pid | ヒープダンプをキャプチャするための Java アプリケーションのプロセス ID です。 |
例
たとえば、Message Processor mp-east のメモリ使用量が大きいとか、OutOfMemory Error がスローされているとします。UNIX オペレーティング システムで ps コマンドを使用して Message Processor のプロセス ID を特定します。24569 であるとします。
次のように jmap ユーティリティを実行して、ヒープダンプを生成します。
sudo -u apigee <JAVA_HOME>/bin/jmap -dump:live,format=b,file=mp-east-heapdump.bin 24569
ヒープダンプの分析
ヒープダンプを Eclipse MAT(Memory Analyzer Tool)を使用して分析し、メモリリークの有無やメモリ使用量を大きくしている Java オブジェクトを特定できます。
リファレンス
スレッドダンプ
スレッドダンプは、実行中の Java プロセスのすべてのスレッドの状態のスナップ ショットです。各スレッドの状態には、スタック トレースと呼ばれるスタックの内容が表示されます。一部のスレッドは実行中の Java アプリケーションの一部であり、他のスレッドは JVM 内部スレッドです。
スレッドダンプは、各アプリケーションのスレッド アクティビティに関する情報を示します。この情報は、次の目的に役立ちます。
- CPU のスパイク、レスポンス時間の長さ、応答が遅い Java アプリケーションなどの問題を診断する。
- アプリケーションと JVM のパフォーマンスを改善する。
スレッドダンプの生成
Java プロセスのスレッドダンプは、次の jstack ユーティリティを使用して生成できます。
<JAVA_HOME>/bin/jstack -l <pid> > <filename>
各パラメータは次のとおりです。
パラメータ | 説明 |
JAVA_HOME | Java のインストール ディレクトリ |
pid | スレッドダンプをキャプチャする Java アプリケーションのプロセス ID |
filename | スレッドダンプが書き込まれるファイル名 |
例
次のコマンドを使用して、Message Processor mp-east のプロセス ID 37320 のスレッドダンプを生成します。
<JAVA_HOME>/bin/jstack -l 37320 > /opt/apigee/edge-message-processor/mp-east-threadDump.txt
上記の例のように、プロセスのスレッドダンプは /opt/apigee/edge-message-processor/mp-east-threadDump.txt ファイルに保存されます。
スレッドダンプの分析
スレッドダンプは、vi(Linux)、メモ帳(Windows)などの任意のテキスト エディタで表示できます。スレッドダンプのさまざまなセクションとその情報の解釈方法については、Thread Dump をご覧ください。