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 は、Application Monitoring Pro 版でのみサポートされています。
Arthas 診断はトラブルシューティングの場合にのみ有効にし、その他のシナリオでは無効にすることをお勧めします。
ARMS エージェントのバージョンが 2.7.1.3 以降であること。
アプリケーションのデータが Application Monitoring にインポートされていること。詳細については、「概要」をご参照ください。
アプリケーションが Java で開発されていること。
背景情報
ARMS は、Arthas の次のリアルタイム診断機能と統合されています。
JVM の概要: JVM プロセスのリアルタイムメモリ使用量、システム情報、システム変数、および環境変数を表示できます。
スレッド分析: JVM プロセス内のスレッドの時間消費量と、指定されたスレッドのリアルタイムメソッドスタックを表示できます。
メソッド実行分析:指定された条件を満たす非 JDK メソッドの実行レコードをキャプチャし、各内部メソッドのパラメーター、例外、戻り値、および実行時間を記録します。
オブジェクトビューアー:任意のクラスのインスタンスのリアルタイムプロパティ値を表示できます。
リアルタイムダッシュボード:一般的なコンポーネントに関するリアルタイム情報を表示できます。たとえば、Druid 接続プールの構成、使用状況、 SQL クエリの実行時間を表示できます。
Arthas Shell:コマンドラインインターフェイス ( CLI ) を使用して Arthas 診断を実行できます。
Arthas パフォーマンス分析は、継続的なプロファイリング機能に完全にアップグレードされました。これは、よりユーザーフレンドリーで強力であり、いつでも日常的に有効化して使用できます。
継続的なプロファイリング機能は、Java プログラムにおける CPU 、メモリ、または I/O によって引き起こされるボトルネックを効果的に発見し、メソッド名、クラス名、および行番号別に統計データを表示できます。これにより、開発者はプログラムを最適化し、レイテンシを削減し、スループットを向上させ、コストを節約できます。詳細については、「継続的なプロファイリング機能を使用する」をご参照ください。
Arthas を有効にする
ARMS console にログインします。左側のナビゲーションウィンドウで、 を選択します。
[アプリケーションリスト] ページで、上部のナビゲーションバーでリージョンを選択し、管理するアプリケーションの名前をクリックします。
説明[言語] 列に表示されるアイコンは、アプリケーションが記述されている言語を示します。
: Java アプリケーション
: Go アプリケーション
: Python アプリケーションハイフン (-):Managed Service for OpenTelemetry で監視されるアプリケーション。
左側のナビゲーションウィンドウで、[アプリケーション設定] をクリックします。表示されるページで、[カスタム構成] タブをクリックします。
[arthas モニタリング] セクションの [カスタム設定] タブで、[arthas スイッチ] をオンにします。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 Shell
この機能は、中国 (北京)、中国 (上海)、中国 (杭州)、中国 (深圳)、中国 (張家口) のリージョンでのみ使用できます。
CLI を使用して Arthas 診断 を実行できます。
