Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました!|記事の終わりのメリット

Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました!|記事の終わりのメリット

△コーディングを独自に追求して
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット
いるホリスこれはホリスの264番目のオリジナル共有
作者ですl
王暁毛出典lホリス(ID:hollischuang)

Arthasは、多くのJava開発者にとって切り離せないものであり、日常の開発とオンライントラブルシューティングにおいて非常に重要な役割を果たしています。小さな開発者として、私はオンライン運用の学生によって提起されたさまざまなバグ、さまざまなオンライン問題診断、日常の運用と保守、オンライン問題の最適化などをチェックする必要があります。

初めて入社したときは、運用・保守の作業が怖かったです。コードが不慣れで、トラブルも多かった…崩壊寸前でした。運用・保守の週は基本的に仕事をしていませんでした。運用・保守に専念していました。タスクでは、トラブルシューティングは非効率的です。

私はこの崩壊を深く経験したので、Arthasのオープンソースまで常にこの状態を変更したいと思っていました。これにより、この崩壊状態での多くの負担が軽減され、トラブルシューティングのためにArthasに相談した同僚になりました。リトルヘルパー~~

Arthasを使うのはとても便利ですが、途中で問題が発生し、相談のヘルパーとして少し不便を感じたので、Arthasアイデアプラグインが誕生しました。
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット

現在、公式のArthasツールは十分に単純ではありません。一部のコマンド、特に強力な拡張性を備えた高度な構文を覚えておく必要があります。たとえば、ognlはスプリングコンテキストを取得して、必要なことを実行できます。監視とトレースは十分に単純ではありません。コマンドツール情報を作成する必要があるため、文字列情報を簡単に処理できるプラグインを使用できます。

オンラインの問題に対処するときは、最も速くて便利なコマンドが必要なので、IdeaArthasプラグインにはまだ意味と価値があります。---これが、このプラグインが最初に作成された主な理由です。

ArthasIDEAプラグインの練習

Arthasには多くの機能ポイントがあります(詳細は下の全体像を参照してください)。ここでは1つずつ説明しません。ユーザードキュメントを参照できます。ただし、最近更新されたため、ユーザードキュメントのコマンド名が変更される可能性があります。
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット

プラグインのインストール

arthasアイデアプラグインをダウンロードします。

https://plugins.jetbrains.com/plugin/13581-arthas-idea

  • Mac:設定->プラグイン
  • Windows:設定->プラグインプラグ
    インフォームディスクをインストール...プラグインをインポート
    Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット

インストール後、IDEAを再起動すれば楽しく使えます!

静的変数を取得するに
は、最初にクラスローダーのハッシュ値を取得してから、コマンドを取得する必要があります。これは、継続性を必要とする対話型プロセスです。静的スプリングコンテキストを通過する後続の静的プロセスには、この対話型プロセスが必要です。継続性はすべて同じインターフェイスにあります。操作します。貼り付けて実行し、結果を取得します。
ここのクラスローダーのハッシュ値はキャッシュされます
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット

Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット

最終的にマージされたスクリプトは次のとおりです。


ognl  -x  3 '@com.wangji92.arthas.plugin.demo.controller.StaticTest@INVOKE_STATIC_NAME' -c 316bc132

リフレクション設定静的フィールドリフレクションを
介して静的フィールドを設定します。https//github.com/WangJi92/arthas-idea-plugin/issues/1を参照してください。
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット

変更する値を入力し、タイプに応じてデフォルト値Str-> "" Long-> 0Lなどをデフォルトで設定します。
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット


ognl -x 3  '#[email protected]@class.getDeclaredField("INVOKE_STATIC_FINAL"),#modifiers=#field.getClass().getDeclaredField("modifiers"),#modifiers.setAccessible(true),#modifiers.setInt(#field,#field.getModifiers() & [email protected]@FINAL),#field.setAccessible(true),#field.set(null,"设置的值")' -c 316bc132

Spring Context Invoke
は、Springコンテキストを介してBeanメソッドとフィールドのコンテンツを呼び出します。
静的Springコンテキスト呼び出しメソッドフィールド

ホームページで静的スプリングコンテキストのパスを設定するには
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット

image.png

ognlを介した静的スプリングコンテキストへのすべての呼び出しにはクラスローダーが必要なため、これは構成済みのスプリングコーンtxtのアドレス情報です。
@ com.wangji92.arthas.plugin.demo.common.ApplicationContextProvider @ contextこのアドレスを構成するには、デモを参照してください。

ognl -x 3 '#springContext=@com.wangji92.arthas.plugin.demo.common.ApplicationContextProvider@context,#springContext.getBean("commonController").getRandomInteger()' -c 316bc132

SpringContextのInvokeメソッドフィールドを見る

watchこれは、春のmvcシーンの時計を介した春のコンテキストへの間接アクセスをサポートするためのものであり、インターフェイス呼び出しを開始する必要があります。https//github.com/WangJi92/arthas-idea-plugin/issues/5を参照してください。
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット

watch -x 3 -n 1  org.springframework.web.servlet.DispatcherServlet doDispatch '@org.springframework.web.context.support.WebApplicationContextUtils@getWebApplicationContext(params[0].getServletContext()).getBean("commonController").getRandomInteger()'

TimeTunnel Spring Context InvokeMethodフィールド

これは、Hengyun Duanlingのarthasを参照して、ttを介して春のコンテキストを取得し、必要なことを実行します。このドキュメントを参照できます:https//github.com/WangJi92/arthas-idea-plugin/issues/4ここで何をしましたか?パラメータ情報を記憶せずに全体を接続し、呼び出されたパラメータに対して単純なデフォルトのカプセル化を実行します。複雑なパラメータシナリオはサポートされていないため、手動で接続する必要があります。
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット

春のコンテキストの記録取得

tt -t org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter invokeHandlerMethod

次に、このターゲットに従ってスプリングコンテキスト呼び出しメソッドを取得します

tt -w 'target.getApplicationContext().getBean("commonController").getRandomInteger()' -x 3 -i 1000

特定のばね環境変数の
取得ばね環境変数の取得は、静的なばねコンテキストに依存します。もちろん、watchとttがばねコンテキストを取得するシナリオもサポートされています。オンライン環境とテスト環境の手順はどれほど複雑ですか。環境内の変数を自分で構成する必要があることをどのように知っていますか。ナコスなどの構成センターのシナリオでは、手の速度が少し遅く、上がらない可能性があると推定されていますが、現時点では、現在の環境変数を取得する必要があります。変数を選択し、右クリックしてコマンドを実行します。静的スプリングコンテキストが使用されるため、クラスローダーの値は引き続き必要です。これは基本的に、arthasの上位アプリケーションです。

Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット

ognl -x 3 '#springContext=@com.wangji92.arthas.plugin.demo.common.ApplicationContextProvider@context,#springContext.getEnvironment().getProperty("custom.name")' -c 316bc132

すべての春の環境変数を取得し、
優先順位比較します。最初の変数が最高の優先順位を持っている必要があります。春のさまざまな優先順位に混乱する必要があるので、どうすればよいですか。arthasアイデアプラグインは、現在のすべての環境変数の取得とそれらの印刷をサポートしているため、特にnacosやdiamondなどのリモート構成センターにアクセスできる場合は、優先順位を理解できます。参考資料:https//blog.csdn.net/xunjiushi9717/article/details/94050139
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット

Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット

ognl -x 3 '#springContext=@com.wangji92.arthas.plugin.demo.common.ApplicationContextProvider@context,#allProperties={},#standardServletEnvironment=#propertySourceIterator=#springContext.getEnvironment(),#propertySourceIterator=#standardServletEnvironment.getPropertySources().iterator(),#propertySourceIterator.{#key=#this.getName(),#allProperties.add("                "),#allProperties.add("------------------------- name:"+#key),#this.getSource() instanceof java.util.Map ?#this.getSource().entrySet().iterator.{#key=#this.key,#allProperties.add(#key+"="+#standardServletEnvironment.getProperty(#key))}:#{}},#allProperties' -c 316bc132

TimeTunnel Tt
メソッドは、データの時空間トンネルを実行し、指定されたメソッドの各呼び出しの入力パラメーターと戻り情報を記録し、これらの異なる時間に呼び出しを監視できます(再トリガー、定期的なトリガー、唯一の欠点はThreadLocal情報の損失です[非表示パラメータ]を使用すると、参照オブジェクトのデータ変更は無効になります)、これは二次トリガーに便利です。特に、自己デバッグで記録、二次トリガー、定期的なトリガーが不便な場合に便利ですが、Duanling Dashen ttが必要な処理を行ったため、バイアスがかかっています。arthasプラグインはここで何をしますか?ユーザーがメモリについて心配するのを防ぐために、セカンダリトリガーに一般的に使用されるコマンドがいくつか追加され、プロセス全体の一貫性が向上しました。
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット
stack
メソッドが実行されるコールスタック(目的:ソースコードからコールスタックを学習し、コールフローを理解する)これは非常に便利な機能であり、問​​題のトラブルシューティングを好む友人にとっては朗報です。arthasideaプラグインは変更されたコマンドの単なる統合です、私は自分のコーディングプロセス、ソースコード、トラブルシューティングスキルの問題にも対処しました-Java Debug and Arthas:https//blog.csdn.net/u012881904/article/details/104591529

stack com.wangji92.arthas.plugin.demo.controller.CommonController getRandomInteger -n 5

クラスの
コンパイルクラスのソースコードであるJadデコンパイルメソッドは、送信されたコードがオンラインであるかどうかを確認する必要がある場合がありますか?この機能はとてもフレンドリーです。リファレンスドキュメント:https//github.com/WangJi92/arthas-idea-plugin/issues/2
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット

jad --source-only com.wangji92.arthas.plugin.demo.controller.CommonController getRandomInteger

監視とトレース
により、デフォルトパラメータの数とデフォルト拡張のレベル制限が増加します。ユーザーはこれらのコアパラメータを知る必要はなく、単に使用するだけです。より高度なセルフヘルプを使用する場合は、それがわかります。

watch com.wangji92.arthas.plugin.demo.controller.CommonController getRandomInteger '{params,returnObj,throwExp}' -n 5 -x 3
trace com.wangji92.arthas.plugin.demo.controller.CommonController getRandomInteger -n 5

trace -E(階層印刷トレース)
Trace -Eは、それ自体で構築するのが非常に面倒で、インターフェイス操作を簡素化し、複数のクラスと複数のメソッドのシーンを監視する必要があります。必要なシーンを選択して、追加を続けます。
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット

trace -E com.wangji92.arthas.plugin.demo.controller.CommonController|com.wangji92.arthas.plugin.demo.service.ArthasTestService traceE|doTraceE -n 5

Heap Dump
は、jump -dump:format = b、file = /temp/dump.hprof pidに少し似たスタックを出力し、ダウンロードしてMAT分析を使用します。

heapdump  /tmp/dump.hprof 打印堆栈信息 

Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット

特別な使用法のリンクを記載する
必要があります。この特別な使用法のリンクは、困ったときにオンラインで確認できます。非常に便利です。
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット
Spring
コンテキスト介してメソッド呼び出すと、Springコンテキスト介して複雑なメソッドを呼び出すことが実際にはサポートされていないことがわかります。この操作は不便であるため、手動で処理する必要があります。
たとえば、ここでのマップ名の処理は参照用に使用できます。詳細については、デモhttps://github.com/WangJi92/arthas-plugin-demoを参照してください。

/**
     * 复杂参数调用 场景
     * static spring context
     * ognl -x 3 '#user=new com.wangji92.arthas.plugin.demo.controller.User(),#user.setName("wangji"),#user.setAge(27L),#springContext=@com.wangji92.arthas.plugin.demo.common.ApplicationContextProvider@context,#springContext.getBean("commonController").complexParameterCall(#{"wangji":#user})' -c e374b99
     *
     * watch get spring context 备注 需要调用一次方法
     * watch -x 3 -n 1  org.springframework.web.servlet.DispatcherServlet doDispatch '#user=new com.wangji92.arthas.plugin.demo.controller.User(),#user.setName("wangji"),#user.setAge(27L),@org.springframework.web.context.support.WebApplicationContextUtils@getWebApplicationContext(params[0].getServletContext()).getBean("commonController").complexParameterCall(#{"wangji":#user})'
     *
     * tt get spring context ,only first get time index ok
     * tt -w '#user=new com.wangji92.arthas.plugin.demo.controller.User(),#user.setName("wangji"),#user.setAge(27L),target.getApplicationContext().getBean("commonController").complexParameterCall(#{"wangji":#user})' -x 3 -i 1000
     * @return
     */
    @RequestMapping("complexParameterCall")
    @ResponseBody
    public String complexParameterCall(@RequestBody  Map<String, User> names) {
        if (names == null) {
            return "EMPTY";
        }
        return names.toString();
    }

まとめ
この記事では、Arthas IDEAプラグインのインストールと使用のスキルを簡単に紹介します。このプラグインは、Arthasのメモリと機械的な反復作業を解放します。ぜひお試しください。

Arthasは、3月26日から4月26日まで開催されるエッセイエッセイイベントを正式に開催しました。

  • Arthasでチェックされた問題
  • Arthasのソースコードの解釈
  • Arthasへの提案
  • Arthasに関連する無制限の他のコンテンツ

エッセイ活動へようこそ、プレゼントがあります〜
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット

クリックして元のテキストを読み、エッセイコールのアドレスにアクセスします。

福祉時間

ギフトタイム

Arthasの技術コミュニティは、このエッセイイベントのギフトの一部(Tmall Genie 1つ、Tao人形2つ、CNCF指先トップ3つ)をHollisの読者に特別に後援しました。

誰もがあなたがArthasについてどう思うかについてコメントする必要があります、あなたはあなたが何か問題を解決するのを手伝いますか、または何か提案がありますか?

Tmall Elfを獲得する1位、Tao人形を獲得する2〜3位、指先を獲得する4〜6位のように。

ダイナミックブラックノート

Javaエンジニアの神になるための道に関する一連の記事
GitHubで更新されています。
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット
Javaの問題309に直面:JDK1.8の
問題013の後にHotSpot仮想マシンのメソッド領域で詳細な同時実行を実現する方法:同期ロックの最適化を拡張する

この記事が気に入ったら
QRコードを長押し
Niu X-Arthas用のAlibabaのオープンソーストラブルシューティングツールは、IDEAプラグインをリリースしました! |記事の終わりのメリット
してホリスをフォローしください。友達の輪に転送してください。これが私の最大のサポートです。
良い記事、私は読んでいます❤️
元のテキストを読んでください

おすすめ

転載: blog.51cto.com/13626762/2544172