4
2

More than 3 years have passed since last update.

Arthas Java 診断ツール

Posted at

Arthasとは何でしょう?

Arthas(読み方:アーサス)はAlibabaがオープンソースとして公開したJava診断ツールです。
開発環境、試験環境、本番環境で、JVMの状態をモニターしたり、障害が発生した時に、JVMを落とさず簡単に診断ができる。jconsole jmap jstackなどJDKツールより強力で、使いやすくできている。

どういう問題を解決できるのか?

・このクラスはどのJarからロードされているか確認したい!なぜ例外が発生したか?
・私がコミットしたコードが実行されてなかった気がするけど。。。コミットし忘れ?もしかしてブランチを間違った?
・オンラインでデバッグできないので、ログを仕込んで再配備するしかない?
・本番のあるユーザのデータ処理に問題あったが、本番ではデバッグできないし、ローカルでは再現しない!どうしよう?
・今JVMってどういう状況なの?
・リアルタイムでJVMの状況を把握したい!
・FlameGraphを描画してボトルネックを見つけたい!
など様々なシーンで活用できると思います。

ライセンス

Apache-2.0

環境

JDK 6以上
Linux/Mac/Windows

インストールと実行

Linux環境:
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar

実行中のJavaプロセスが存在する場合、起動できる。
特定のJavaプロセスを監視したい場合は
jpsで現在実行中プロセスを確認し、そのPIDをパラメータとして渡せばいい。
例:

jps
341 Bootstrap

java -jar arthas-boot.jar 341

以下のような画面が表示され、シェルのようにarthasの各種コマンドを実行することができます。

p1.jpg

オフィシャルサイトでは以下のコマンドで現在のパスにインストールし、実行ファイルas.shも自動で生成するらしい。普段診断ツールとして使うならこちらがおすすめです。

curl -L https://alibaba.github.io/arthas/install.sh | sh
./as.sh

Arthasコマンド

dashboard

dashboard.png

シェル環境でこんな画面が表示できちゃうと正直すこし感動しますね。
上は現在JVMインスタンス内のスレッド一覧、真ん中の左側はメモリ状況、その右側はGC情報、一番下はOS、JVMのバージョン情報など。Tomcatの場合は性能の概要が見えます。

thread

現在のJVMプロセス内のスレッド一覧とそれぞれの状態を表示できます。

thread.png

さらにスレッド番号指定するとスタックトレースが表示できていまどこのメソッドで止まっているか見えます。

thread1.png

jad

現在実行中のクラスに対してデコンパイルができます。バグ対応のため、コードを修正したが、本当に修正版が動いているかどうか確認することができます。また、ミスって同じJarモジュールの異なるバージョンを両方ともクラスパスに入っちゃった場合、どれが実際ロードされているか確認できます。

jad1.jpg
p2.jpg

redefine

外部の.classフアイルを読み込み、現在実行中のJVM内のクラスを差し替えることができる。
制限:クラスのフィールドの新規、メソッドの新規はできない。変更は可能。
JVMを再起動せず、Tomcatの場合は、再起動、再ロードせず、クラスのロジックを変更することが来ます。おお~

redefine /tmp/Test.class
redefine -c 327a647b /tmp/Test.class /tmp/Test\$Inner.class

sc

現在JVMにロードされたクラスの情報を表示。

sc.png

stack

スタックトトレースの確認

以下test.arthas.TestStack#doGetのスタックトレースを確認する場合

stack.jpg

trace

どのメソッドが遅いか。ボトルネック、性能調査で使えそうですね。

trace.jpg

その他

web console機能があってWebでarthasのコマンドを実行できるので、複数サーバを診断するときに使えそうですね。
他にもいろいろ使えそうなコマンドがたくさんありますので、詳しくは
こちらを参考してください。
https://github.com/alibaba/arthas

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2