Arthasは、開発者がJavaアプリケーションの本番環境で問題を診断するのに役立ちます。バイトコード拡張技術を採用しており、開発者は実行中のJava仮想マシン(JVM)プロセスを再起動することなくアプリケーションのトラブルシューティングを行うことができます。
Application Real-Time Monitoring Service(ARMS)は、Arthasのすべての機能と完全に統合されています。Arthasをマウントする場合と比較して、ARMSの統合されたArthas機能には次の利点があります。
Arthas機能は、Java Development Kit(JDK)環境に依存しません。Arthasをダウンロードしてインストールする必要はありません。ビジネス要件に基づいて、機能をいつでも有効または無効にできます。
主な機能にはブラウザからアクセスできます。コマンドや式を指定する必要はありません。
Arthas機能はARMSコンテキストに接続されています。traceコマンドを実行して、ARMSのトレースIDを表示できます。
前提条件
アプリケーションモニタリングは、新しい請求モードを有効にしているユーザー向けに新しいアプリケーション詳細ページを提供します。詳細については、請求(新規)をご参照ください。
新しい請求モードを有効にしていない場合は、アプリケーション一覧ページで新バージョンに切り替えるをクリックして、新しいアプリケーション詳細ページを表示できます。
Arthas診断は、Javaアプリケーションでのみ使用できます。
トラブルシューティングの場合にのみArthas診断を有効にし、その他のシナリオでは無効にすることをお勧めします。
ARMSエージェントのバージョンは2.7.1.3以降です。
アプリケーションはアプリケーションモニタリングで監視されます。詳細については、概要をご参照ください。
アプリケーションはJavaで開発されています。
背景情報
ARMSには、Arthasの次のリアルタイム診断機能が統合されています。
JVMの概要:JVMプロセスのリアルタイムメモリ使用量、システム情報、システム変数、および環境変数を表示できます。
スレッド分析:スレッドの時間消費量と、JVMプロセス内の指定されたスレッドのリアルタイムメソッドスタックを表示できます。
メソッド実行分析:指定された条件を満たす非JDKメソッドの実行レコードをキャプチャし、各内部メソッドのパラメーター、例外、戻り値、および実行時間を記録します。
オブジェクトビューアー:任意のクラスのインスタンスのリアルタイムプロパティ値を表示できます。
リアルタイムダッシュボード:共通コンポーネントに関するリアルタイム情報を表示できます。たとえば、Druid接続プールの設定、使用状況、およびSQLクエリの時間消費量を表示できます。
Arthasシェル:コマンドラインインターフェース(CLI)を使用してArthas診断を実行できます。
Arthasのパフォーマンス分析は、継続プロファイリング機能に完全にアップグレードされました。これは、よりユーザーフレンドリーで強力であり、いつでも日常的に有効化して使用できます。
継続プロファイリング機能は、JavaプログラムにおけるCPU、メモリ、またはI/Oによって引き起こされるボトルネックを効果的に発見し、メソッド名、クラス名、および行番号別に統計データを表示できます。これにより、開発者はプログラムを最適化し、レイテンシを削減し、スループットを向上させ、コストを節約できます。詳細については、継続プロファイリング機能の使用をご参照ください。
Arthasを有効にする
ARMS consoleにログオンします。左側のナビゲーションペインで、 を選択します。
アプリケーション一覧ページで、上部ナビゲーションバーのリージョンを選択し、管理するアプリケーションの名前をクリックします。
説明言語列に表示されるアイコンは、アプリケーションが記述されている言語を示します。
:Javaアプリケーション
:Goアプリケーション
:Pythonアプリケーション
ハイフン(-):Managed Service for OpenTelemetryで監視されるアプリケーション。
上部ナビゲーションバーで、
を選択します。Arthasモニタリングセクションで、Arthasスイッチをオンにし、特定のIPアドレスでのみArthas診断を実行するかどうかを指定し、ビジネス要件に基づいてIPアドレスを追加します。
保存をクリックします。
診断結果を表示する
ARMS consoleにログオンします。左側のナビゲーションペインで、 を選択します。
アプリケーション一覧ページで、上部ナビゲーションバーのリージョンを選択し、管理するアプリケーションの名前をクリックします。
説明言語列に表示されるアイコンは、アプリケーションが記述されている言語を示します。
:Javaアプリケーション
:Goアプリケーション
:Pythonアプリケーション
ハイフン(-):Managed Service for OpenTelemetryで監視されるアプリケーション。
上部ナビゲーションバーで、
を選択します。Arthas診断ページで、上部のドロップダウンリストから診断を実行するアプリケーションインスタンスを選択します。
インスタンスにインストールされているARMSエージェントがV2.7.1.3より前の場合、エージェントを更新するように指示されます。
インスタンスにインストールされているARMSエージェントがV2.7.1.3以降の場合、ページにはArthasによって提供されるインスタンス情報が表示されます。
JVMの概要
[JVMの概要]タブで、JVMメモリに関する統計情報、オペレーティングシステムと変数に関する情報など、アプリケーションに関するJVM情報を表示できます。
デフォルトでは、Arthas診断ページに入ると、JVMの概要タブが表示されます。JVMの概要タブには、次のセクションが含まれています。
JVMメモリ:ヒープメモリと非ヒープメモリの使用量、ガベージコレクション(GC)に関する情報など、JVMメモリに関する情報を表示します。
オペレーティングシステム情報:平均システム負荷、オペレーティングシステムの名前とバージョン、Javaバージョンなど、オペレーティングシステムに関する情報を表示します。
変数情報:システム変数と環境変数に関する情報を表示します。
スレッド時間消費分析
[スレッド時間消費分析]タブで、アプリケーションのすべてのスレッドと各スレッドに関するスタック情報を表示できます。このタブの情報は、時間のかかるスレッドを簡単に識別するのに役立ちます。
Arthas診断ページで、スレッド時間消費分析タブをクリックします。
スレッド時間消費分析タブで、JVMプロセスにおけるスレッドの時間消費量を表示できます。類似のスレッドは、1つの行にカテゴリとして表示されます。
スレッドカテゴリ名の左側にある+アイコンをクリックして、このカテゴリに属するすべてのスレッドの詳細(スレッドID、CPU使用率、ステータスなど)を表示します。
スレッドのライブスタックを表示アクション列にあるをクリックして、スレッドに関するスタック情報を表示します。
メソッド実行分析
[メソッド実行分析]タブで、メソッドの時間消費量、入力パラメーター、戻り値などの情報を表示したり、内部メソッドにドリルダウンしたりできます。この情報を使用して、低速呼び出しやログの欠落の根本原因を特定したり、再現性のない問題をトラブルシューティングしたりできます。
Arthas診断ページで、メソッド実行分析タブをクリックします。
メソッド実行分析タブで、検索ボックスにクラス名のキーワードを入力し、アイコンをクリックします。
表示されたクラスから診断を実行するクラスを見つけます。右側のドロップダウンリストでクラスのメソッドを選択し、OKをクリックします。
ARMSは、メソッドのランダムな実行レコードをキャプチャします。実行情報が表示されます。
選択したメソッドの内部実行レコードは、左側の実行スタックセクションに表示されます。
内部メソッドにドリルダウンするには、内部メソッドを見つけて、アクション列のドリルインをクリックします。
メソッドのソースコードを表示するには、実行スタックの横にあるソースコードを表示をクリックします。
各内部メソッドの実行時間は、ソースコードの注釈に表示されます。
右側のメソッド実行結果セクションには、メソッドのパラメーター値、戻り値、例外、メンバー変数、およびトレースIDが表示されます。
右側の実行条件の設定セクションで、次の手順を実行して、メソッド実行レコードをキャプチャするための条件を設定します。
ドロップダウンリストからリロードメソッドを選択します。
初期フィルターキーの選択ドロップダウンリストで、最初に指定するキープの種類を選択し、アイコンをクリックします。
キープの種類:
params[n]:メソッドのn番目のパラメーター。
returnObj:メソッドの戻り値。
メソッド実行時間:メソッドの時間。
例外がスローされたかどうか:メソッドの実行中に例外がスローされたかどうかを指定します。
説明ネストされたキーが選択されている場合は、基本フィールドが選択されるまで、ネストされたキーのフィールドを指定し続ける必要があります。
条件を選択します。
値を入力します。
追加をクリックします。
メソッド実行レコードを選択するための条件は、現在のフィルタリング条件セクションに表示されます。
実行スタックセクションの右上隅にあるアイコンをクリックします。システムは、指定された条件に基づいてメソッド実行レコードをキャプチャします。
オブジェクトビューアー
[objectViewer]タブで、シングルトンオブジェクトの情報を表示して、設定エラー、ブラックリストまたはホワイトリスト内の不適切な項目、メンバー変数の異常なステータスなど、アプリケーションの例外をトラブルシューティングできます。
Arthas診断ページで、objectViewerタブをクリックします。
objectViewerタブで、検索ボックスにクラス名のキーワードを入力し、検索アイコンをクリックします。
表示されたクラスから診断を実行するクラスを選択し、右側のペインでクラスのインスタンスを選択して、OKをクリックします。
インスタンスのリアルタイムフィールド値が表示されます。
単純なフィールドの値は、左側のオブジェクトのリアルタイムフィールド値セクションの詳細列に表示されます。
複雑なフィールドの値を表示するには、左側のオブジェクトのリアルタイムフィールド値セクションの詳細列にある詳細を表示をクリックします。詳細なフィールド値は、右側のフィールドの詳細セクションに表示されます。
複雑なフィールド値の一部のみを逆シリアル化して、フィールドの詳細セクションに表示できます。詳細を表示するには、[詳細]の横にあるかっこ内のクリックハイパーリンクをクリックします。
リアルタイムダッシュボード
[リアルタイムボード]タブで、データベース接続プールの使用状況やHTTP接続プールの使用状況など、使用中の主要コンポーネントに関するリアルタイム情報を表示できます。この情報は、リソースの問題を特定するのに役立ちます。
Arthas診断ページで、リアルタイムボードタブをクリックします。
リアルタイムボードタブで、ドロップダウンリストからダッシュボードを選択し、ダッシュボードのインスタンスを選択して、ボードに追加をクリックします。
コンポーネントに関するリアルタイム情報が表示されます。次の図は、Druid接続プールに関するリアルタイム情報(基本設定、接続プールステータス、実行時間など)を示しています。
Arthasシェル
CLIを使用してArthas診断を実行できます。
FAQ
Arthasのハートビート信号が失われるのはなぜですか?
Arthasのハートビート信号が失われるのは、次の理由によります。
ネットワーク接続に失敗しました。
ネットワーク接続を確認してください。パブリックポート(9092)と内部ポート(9092)の両方が失敗した場合は、ネットワークセキュリティグループでポート9092のアウトバウンドアクセス許可と、各リージョンのエンドポイントを開きます。エンドポイントについては、Java用ARMSエージェントに必要なネットワーク設定をご参照ください。アプリケーション診断のエンドポイントは、トレースおよびメタデータレポートのエンドポイントと同じであることに注意してください。
SkyWalkingエージェントがアプリケーションにマウントされています。
ARMS ArthasはSkyWalkingと互換性がありません。SkyWalkingエージェントを削除するか、Arthas v3.7.0以降を手動でマウントする必要があります。
cat ~/logs/arthas/arthas.log
コマンドを実行します。次のログの最後のメッセージは、ArthasがSkyWalkingエージェントと互換性がないことを示しています。2023-09-11 09:09:47 [arthas-binding-thread] ERROR c.t.a.core.server.ArthasBootstrap -start channel client failure // ... (code remains untranslated)
メソッド実行分析が失敗したのはなぜですか?
指定されたメソッドが実行されなかったため、メソッド実行分析に失敗しました。更新アイコンをクリックしてタブを更新します。
Arthas診断に表示されるSurvivor Spaceのサイズが実際のサイズの半分しかないのはなぜですか?
Arthas診断にはFrom Spaceのサイズのみが表示され、To Spaceのサイズは表示されません。
Arthas診断は有料ですか?
いいえ、Arthas診断は無料です。
コンソールでArthas診断を有効にした後、コンソールでArthasを手動でマウントするリクエストがARMSコンソールによって拒否されたのはなぜですか?
デフォルトでは、Arthasはポート3658を使用して新しいクライアント接続を受け入れます。同じマシン上の複数のプロセスがArthasを同時にマウントする際のポートの競合を回避するために、ARMS Arthasはランダムなポートを使用します。これにより、マウントエラーが発生する可能性があります。この場合は、ARMSコンソールでArthas診断を無効にする必要があります。
コンソールでArthas診断を有効にした後、ログに「Arthas server already bind.」と表示されたのはなぜですか?
オープンソースのArthasがアプリケーションに既にマウントされている場合、ARMS Arthasを有効にできません。ARMS Arthasを有効にする前に、オープンソースのArthasを削除してください。