1はじめに
Arthasは、開発者に愛され、アリババオープンソースのJava診断ツールであります
あなたは、次のような問題に類似した無力に遭遇すると、Arthasはあなたが解決することができます:
- ジャーパッケージがロードされた元のクラス?なぜ例外に関連するカテゴリの様々な報告しますか?
- 私はなぜ実行するためにコードを変更しましたか?それは私がコミットしなかっただろうか?支店がミスをしましたか?
- それだけで、それをログ追加することにより、再リリース、スタックオンラインデバッグを取得しますか?
- オンラインユーザーのデータ処理に問題が発生したが、同じオンラインデバッグすることはできません、ラインが再現することはできません!
- システムの健全性を表示するには、グローバルな視点がありますか?
- JVMのリアルタイムステータスの監視を実行する方法はありますか?
タブ補完の富を提供することはさらに、問題の診断と局在を促進する機能ながらArthasはサポートJDK 6+、のLinux / Macの/ Winodws、コマンドラインインタラクティブモードをサポート
2つの主な特徴
Arthasは、機能には、以下の三つの側面に分けることができます提供しています。
- (1)情報の監視
- 実行中のプロセスの基本情報:メモリ、CPU使用率、スレッド情報、スレッドスタック、スレッドの統計情報の数、環境変数情報
- 情報オブジェクト:静的プロパティクラスオブジェクト、MBean属性情報、クラス情報がロードされた、クラスローダ、クラスメソッドの情報を
- (2)メソッドの呼び出し
- この方法は、戻り値を表示し、パラメータを呼び出し
- この方法は、時間のかかる方法に呼び出しの数、成功、失敗やその他の統計の数を呼び出して、コール・パスと呼ばれています
- メソッド呼び出しを記録し、やり直し
- (3)クラスファイル
- ロードされたクラスのバイトコードをダンプし、バイトコードのコンパイル、クラスをコンパイルし、クラスのロード再加熱
3インストールと使用
3.1インストール
ダウンロードArthasは-boot.jar、その後のjava -jar方法で起動します。
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
复制代码
そして、入力したArthasはのコマンド・インタフェースにプロセスに対応する番号を使用することができます。
印刷ヘルプ情報:
java -jar arthas-boot.jar -h
复制代码
3.2
ここでは、Arthasはのいくつかの一般的に使用されるコマンドと使用法と原則であり、我々は実際にコマンドの詳細に問題を解決する方法を見てArthasはの公式文書を参照することができます
(1)全体のダッシュボードデータ
Arthasはコマンドラインインタフェースでは、ダッシュボードのコマンドを入力して、すぐにマルチスレッドのTomcatの現在の状態が表示されます、情報JVMは、地域のGCおよびその他の状況
(2)閲覧スレッドモニター
スレッドのコマンドを入力した情報の入力スレッド-n 3のすべてのスレッドの状態が現在の忙しい3つのスレッドを示して表示し、スレッドがスレッドに現在ブロックの状態が表示されます、あなたがスレッドロックのトラブルシューティングを行うことができ、CPUの消費入力スレッド-bをトラブルシューティングするために使用することができます問題
(3)JVM監視
詳細なパフォーマンスデータを表示するには、コマンドJVM、JVMを入力します。
(4)観察法パラメータ、戻り値
時には我々はwatchコマンドに基づいて、我々はそれをすべてを簡単に行うことができ、より複雑な、トラブルシューティングのパラメータ、戻り値、ログ印刷を追加する通常の必要性を確認する必要があります
$ watch demo.MathGame primeFactors "{params,returnObj}" -x 2
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 44 ms.
ts=2018-12-03 19:16:51; [cost=1.280502ms] result=@ArrayList[
@Object[][
@Integer[535629513],
],
@ArrayList[
@Integer[3],
@Integer[19],
@Integer[191],
@Integer[49199],
],
]
复制代码
(5)観察メソッド呼び出し経路、時間のかかる詳細
時には、最終的には時間のかかる手順は、通常の練習が簡単にこの問題を解決することができるコマンドのトレースを使用して、ログを追加することで、比較的長いトラブルシューティングをしたいですサービスカトンは、発生しました:
$ trace demo.MathGame run
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 42 ms.
`---ts=2018-12-04 00:44:17;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
`---[10.611029ms] demo.MathGame:run()
+---[0.05638ms] java.util.Random:nextInt()
+---[10.036885ms] demo.MathGame:primeFactors()
`---[0.170316ms] demo.MathGame:print()
复制代码
4原則
次のように全体的なマクロブロックの呼び出しは次のとおりです。
スペース上の理由から、関係するその2つの基本原則の次の比較が簡単に紹介されています。
(1)監視情報、クラスファイル
提供JMX JDK、JMX MBeanの管理オブジェクトのシリーズ、Arthasは、オブジェクトがメモリを実装し、これらのMBeanに基づいている(Javaの管理の拡張は、Java Management Extensionsは、管理機能の移植のためのアプリケーションフレームワークである)、GC、クラスローディング情報、 JVM情報の監視
(2)メソッドの呼び出し
JDK5後、java.lang.Instrumentを導入し、バイトコードの改質方法を介して、動的変形クラスコードを実装するプログラマ。プロキシクラスでのプロセスパラメータでは、インスタンスの計装研があります。この例では、我々は、インストルメンテーションが提供する様々なインタフェースを呼び出すことができます。たとえば、すべてのクラスがロードされている取得するために)(inst.getAllLoadedClassesを呼び出します。inst.addTransformer(新しいSdlTransformer()、true)の新しいコンバータを呼び出します。inst.retransformClasses(クラスCLS)を呼び出し、JVMへの変換要求を再立ち上げ
Arthasはバイトコード・クラスは、拡張ASMを生成した後、拡張を参照するためのパラメータへのメソッド呼び出し、戻り値を含む、方法と呼ばれる方法がレコードを呼び出し、やり直し、その後JDKによって提供される変換に基づく方法計装インターフェースを増加します
5実際のケース
公式文書は、ユーザーの例数を提供Arthasは、ここではより興味深い例いくつかのものがあります。
(1)調査し、アプリケーションログソース奇妙なケース詳細
その後、再定義がArthasはが提供するコマンドベースのアプリケーションを変更し、いくつかの奇妙なログがあるでしょう、これらのログは、ログ内のStringBuilderのコールスタック情報を実装するコードを変更することで印刷する多くの問題の原因を突き止めるトラブルシューティングするために、コンパイラがStringBuilder.clssを生成時に実行されるサービスアプリケーション実際のバイトコードのStringBuilder
(2)の問題をトラブルシューティングするためにアプリケーション404分の401 SpringBoot ケースの詳細を
この問題に直面したときにページビュー数は、特に404を返す特定のサーブレットを見つけ、時にアクセス要求ツリー全ページをプリントアウトし、Arthasはオンライン時環境が提供するコマンドをトレースし、通常頭痛、404分の401を返さ
$ trace javax.servlet.Servlet *
Press Ctrl+C to abort.
Affect(class-cnt:7 , method-cnt:185) cost in 1018 ms.
复制代码
トレースコマンドによって、オブジェクトを正確に問題401収益源を標的は、javax.servlet.Filterフィルタインターセプト要求して配置されるトレース
$ trace javax.servlet.Filter *
Press Ctrl+C to abort.
Affect(class-cnt:13 , method-cnt:75) cost in 278 ms.
复制代码
(3)コードホット更新のラインケースの詳細を
時には解決するための手順を確認するために迅速に問題オンラインプログラムを修正、または簡単なテストのために、我々は、コードArthasは熱を更新する必要があり、次のようにしています
- ステップ1でJADコマンドコードを逆コンパイル
- ステップ2テキストエディタのコードを変更します
- ClassLoaderクラスのコードを見つけるためのステップ3 scコマンド
- ステップ4 MCコマンドは、コンパイルされたコードのクラスローダを指定します
- ステップ5ホットupdateコマンドコードを再定義します
参照
復号アリオンライン問題診断ツールArthasはとJVM-サンドボックス
1はじめに
Arthasは、開発者に愛され、アリババオープンソースのJava診断ツールであります
あなたは、次のような問題に類似した無力に遭遇すると、Arthasはあなたが解決することができます:
- ジャーパッケージがロードされた元のクラス?なぜ例外に関連するカテゴリの様々な報告しますか?
- 私はなぜ実行するためにコードを変更しましたか?それは私がコミットしなかっただろうか?支店がミスをしましたか?
- それだけで、それをログ追加することにより、再リリース、スタックオンラインデバッグを取得しますか?
- オンラインユーザーのデータ処理に問題が発生したが、同じオンラインデバッグすることはできません、ラインが再現することはできません!
- システムの健全性を表示するには、グローバルな視点がありますか?
- JVMのリアルタイムステータスの監視を実行する方法はありますか?
タブ補完の富を提供することはさらに、問題の診断と局在を促進する機能ながらArthasはサポートJDK 6+、のLinux / Macの/ Winodws、コマンドラインインタラクティブモードをサポート
2つの主な特徴
Arthasは、機能には、以下の三つの側面に分けることができます提供しています。
- (1)情報の監視
- 実行中のプロセスの基本情報:メモリ、CPU使用率、スレッド情報、スレッドスタック、スレッドの統計情報の数、環境変数情報
- 情報オブジェクト:静的プロパティクラスオブジェクト、MBean属性情報、クラス情報がロードされた、クラスローダ、クラスメソッドの情報を
- (2)メソッドの呼び出し
- この方法は、戻り値を表示し、パラメータを呼び出し
- この方法は、時間のかかる方法に呼び出しの数、成功、失敗やその他の統計の数を呼び出して、コール・パスと呼ばれています
- メソッド呼び出しを記録し、やり直し
- (3)クラスファイル
- ロードされたクラスのバイトコードをダンプし、バイトコードのコンパイル、クラスをコンパイルし、クラスのロード再加熱
3インストールと使用
3.1インストール
ダウンロードArthasは-boot.jar、その後のjava -jar方法で起動します。
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
复制代码
そして、入力したArthasはのコマンド・インタフェースにプロセスに対応する番号を使用することができます。
印刷ヘルプ情報:
java -jar arthas-boot.jar -h
复制代码
3.2
ここでは、Arthasはのいくつかの一般的に使用されるコマンドと使用法と原則であり、我々は実際にコマンドの詳細に問題を解決する方法を見てArthasはの公式文書を参照することができます
(1)全体のダッシュボードデータ
Arthasはコマンドラインインタフェースでは、ダッシュボードのコマンドを入力して、すぐにマルチスレッドのTomcatの現在の状態が表示されます、情報JVMは、地域のGCおよびその他の状況
(2)閲覧スレッドモニター
スレッドのコマンドを入力した情報の入力スレッド-n 3のすべてのスレッドの状態が現在の忙しい3つのスレッドを示して表示し、スレッドがスレッドに現在ブロックの状態が表示されます、あなたがスレッドロックのトラブルシューティングを行うことができ、CPUの消費入力スレッド-bをトラブルシューティングするために使用することができます問題
(3)JVM監視
詳細なパフォーマンスデータを表示するには、コマンドJVM、JVMを入力します。
(4)観察法パラメータ、戻り値
時には我々はwatchコマンドに基づいて、我々はそれをすべてを簡単に行うことができ、より複雑な、トラブルシューティングのパラメータ、戻り値、ログ印刷を追加する通常の必要性を確認する必要があります
$ watch demo.MathGame primeFactors "{params,returnObj}" -x 2
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 44 ms.
ts=2018-12-03 19:16:51; [cost=1.280502ms] result=@ArrayList[
@Object[][
@Integer[535629513],
],
@ArrayList[
@Integer[3],
@Integer[19],
@Integer[191],
@Integer[49199],
],
]
复制代码
(5)観察メソッド呼び出し経路、時間のかかる詳細
時には、最終的には時間のかかる手順は、通常の練習が簡単にこの問題を解決することができるコマンドのトレースを使用して、ログを追加することで、比較的長いトラブルシューティングをしたいですサービスカトンは、発生しました:
$ trace demo.MathGame run
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 42 ms.
`---ts=2018-12-04 00:44:17;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
`---[10.611029ms] demo.MathGame:run()
+---[0.05638ms] java.util.Random:nextInt()
+---[10.036885ms] demo.MathGame:primeFactors()
`---[0.170316ms] demo.MathGame:print()
复制代码
4原則
次のように全体的なマクロブロックの呼び出しは次のとおりです。
スペース上の理由から、関係するその2つの基本原則の次の比較が簡単に紹介されています。
(1)監視情報、クラスファイル
提供JMX JDK、JMX MBeanの管理オブジェクトのシリーズ、Arthasは、オブジェクトがメモリを実装し、これらのMBeanに基づいている(Javaの管理の拡張は、Java Management Extensionsは、管理機能の移植のためのアプリケーションフレームワークである)、GC、クラスローディング情報、 JVM情報の監視
(2)メソッドの呼び出し
JDK5後、java.lang.Instrumentを導入し、バイトコードの改質方法を介して、動的変形クラスコードを実装するプログラマ。プロキシクラスでのプロセスパラメータでは、インスタンスの計装研があります。この例では、我々は、インストルメンテーションが提供する様々なインタフェースを呼び出すことができます。たとえば、すべてのクラスがロードされている取得するために)(inst.getAllLoadedClassesを呼び出します。inst.addTransformer(新しいSdlTransformer()、true)の新しいコンバータを呼び出します。inst.retransformClasses(クラスCLS)を呼び出し、JVMへの変換要求を再立ち上げ
Arthasはバイトコード・クラスは、拡張ASMを生成した後、拡張を参照するためのパラメータへのメソッド呼び出し、戻り値を含む、方法と呼ばれる方法がレコードを呼び出し、やり直し、その後JDKによって提供される変換に基づく方法計装インターフェースを増加します
5実際のケース
公式文書は、ユーザーの例数を提供Arthasは、ここではより興味深い例いくつかのものがあります。
(1)調査し、アプリケーションログソース奇妙なケース詳細
その後、再定義がArthasはが提供するコマンドベースのアプリケーションを変更し、いくつかの奇妙なログがあるでしょう、これらのログは、ログ内のStringBuilderのコールスタック情報を実装するコードを変更することで印刷する多くの問題の原因を突き止めるトラブルシューティングするために、コンパイラがStringBuilder.clssを生成時に実行されるサービスアプリケーション実際のバイトコードのStringBuilder
(2)の問題をトラブルシューティングするためにアプリケーション404分の401 SpringBoot ケースの詳細を
この問題に直面したときにページビュー数は、特に404を返す特定のサーブレットを見つけ、時にアクセス要求ツリー全ページをプリントアウトし、Arthasはオンライン時環境が提供するコマンドをトレースし、通常頭痛、404分の401を返さ
$ trace javax.servlet.Servlet *
Press Ctrl+C to abort.
Affect(class-cnt:7 , method-cnt:185) cost in 1018 ms.
复制代码
トレースコマンドによって、オブジェクトを正確に問題401収益源を標的は、javax.servlet.Filterフィルタインターセプト要求して配置されるトレース
$ trace javax.servlet.Filter *
Press Ctrl+C to abort.
Affect(class-cnt:13 , method-cnt:75) cost in 278 ms.
复制代码
(3)コードホット更新のラインケースの詳細を
時には解決するための手順を確認するために迅速に問題オンラインプログラムを修正、または簡単なテストのために、我々は、コードArthasは熱を更新する必要があり、次のようにしています
- ステップ1でJADコマンドコードを逆コンパイル
- ステップ2テキストエディタのコードを変更します
- ClassLoaderクラスのコードを見つけるためのステップ3 scコマンド
- ステップ4 MCコマンドは、コンパイルされたコードのクラスローダを指定します
- ステップ5ホットupdateコマンドコードを再定義します