バックグラウンド
企業の発展に伴い、アプリケーションサービスの規模は拡大の一途をたどっており、従来の垂直型アプリケーションアーキテクチャでは製品開発に対応できなくなり、1つのプロジェクトで数十人のエンジニアが異なる機能を並行して開発することになり、開発効率は低下し続けています。
その結果、同社はサービス指向プロセスを全面的に推進し始め、チーム内のエンジニアのほとんどをサービス指向プロセスに集中させるようになりました。サービス化により、各エンジニアは自分が担当するサブプロジェクトのみで開発できるようになり、開発効率が向上しますが、サービス指向は別の問題も引き起こします。
- 各サービスの実行状況を知ることは不可能です (たとえば、あるサービスの現在の QPS はいくらか)。平均レイテンシー、99% レイテンシー、99.9% レイテンシーはどれくらいですか?
- 特定のインターフェイスの応答時間が遅い場合、その原因となっているメソッドを特定するにはどうすればよいですか?
- 各サービスの負荷は分散されていますか?
- サービスにジッターが発生した場合、その原因が DB、キャッシュ、またはダウンストリーム サービスのどれであるかをどのように判断すればよいでしょうか?
- DB とキャッシュの応答レイテンシはどれくらいですか?
- サービス呼び出しがますます大きくなるにつれて、サービスがサポートする必要があるマシンの数をどのように評価するか? マシンはいつ追加する必要がありますか?
上記の開発上のトラブルに対応して、本日、高同時実行性と低遅延アプリケーション向けに設計された高性能 Java パフォーマンス監視および統計ツール、MyPerf4J を紹介します。
使用するシーン
- 開発環境で Java アプリケーションのパフォーマンスのボトルネックを迅速に特定します。
- 実稼働環境での Java アプリケーションのパフォーマンス メトリックの長期監視
特性
- 高性能:シングルスレッドは 1 秒あたり 1,000 万回の応答時間のレコードをサポートし、各レコードにかかる時間はわずか 73 ナノ秒です
- 侵入なし: JavaAgent メソッドが使用され、アプリケーション プログラムへの侵入がなく、アプリケーション コードを変更する必要はありません。
- メモリ不足:メモリ多重化を使用すると、ライフサイクル全体で少数の一時オブジェクトのみが生成されるため、アプリケーションの GC には影響しません。
- 高精度:応答時間はナノ秒単位で計算されます
- 高いリアルタイム性:最小 1 秒の第 2 レベルのモニタリングをサポートします。
モニタリング指標
MyPerf4J はアプリケーションごとに数十の監視インジケーターを収集し、すべての監視インジケーターがリアルタイムで収集されて表示されます。
以下は、MyPerf4J で現在サポートされている監視インジケーターのリストです。
方法
RPS、カウント、平均、最小、最大、標準偏差、TP50、TP90、TP95、TP99、TP999、TP9999、TP99999、TP100
メモリー
ヒープ初期化、ヒープ使用、ヒープコミット、ヒープ最大、非ヒープ初期化、非ヒープ使用、非ヒープコミット、非ヒープマックス
JVM GC
収集回数,収集時間
JVMクラス
合計、ロード済み、アンロード済み
クイックスタート
MyPerf4J は、JavaAgent 構成メソッドを使用して、アプリケーション コードに侵入することなくアプリケーションに透過的にアクセスします。
ダウンロード
- MyPerf4J-ASM.zipをダウンロードして解凍します。
- 抽出した README ファイルを読みます
- 抽出した MyPerf4J.properties 構成ファイル内の app_name、metrics.log.xxx 、および filter.packages.include の構成値を変更します。
MyPerf4J-ASM.zip パッケージ: https://github.com/LinShunKang/Objects/blob/master/zips/CN/MyPerf4J-ASM-3.3.0-SNAPSHOT.zip?raw=true
構成
次の 2 つのパラメータを JVM 起動パラメータに追加します。
-javaagent:/path/to/MyPerf4J-ASM.jar-DMyPerf4JPropFile=/path/to/MyPerf4J.properties
走る
アプリケーションを起動し、/path/to/log/method_metrics.log に出力されるログを監視します。
MyPerf4J メソッド メトリクス [2020-01-01 12:49:57, 2020-01-01 12:49: 58]<ai=1>メソッド[6] タイプ レベル 時間パーセント RPS 平均(ミリ秒) 最小(ミリ秒) 最大(ミリ秒) 標準偏差 カウント TP50 TP90 TP95 TP99 TP999 TP9999DemoServiceImpl.getId2(long) 全般 サービス 322.50% ; 6524 0.49 0 &nb sp;1 ; 0。50 6524 0 1&nb sp; 1 1 ; 1
DemoServiceImpl.getId3(long) 全般 サービス 296.10% ; 4350 0.68 0 &nb sp;1 ; 0。47 4350 1 1&nb sp; 1 1 ; 1
DemoServiceImpl.getId4(long) 全般 サービス 164.60% ; 2176 0.76 0 &nb sp;1 ; 0。43 2176 1 1&nb sp; 1 1 ; 1
DemoServiceImpl.getId1(long) 全般 サービス 0.00%&注: 8704 0.00 0 &nb sp; ;0 0。00 8704 0 0&nb sp; 0 0 0 ; 0
DemoDAO.getId1(long) DynamicProxy DAO &n bsp; 0.00% 2176 0.00 ; 0 ; 0 0。00 2176 0 0&nb sp; 0 0 0 ; 0
DemoDAO.getId2() DynamicProxy ;DAO 0.00% 2176 0.00 0 0 0。00 2176 0 0&nb sp; 0 0 0 ; 0
アンインストール
JVM 起動パラメータの次の 2 つのパラメータを削除し、再起動してこのツールをアンインストールします。
-javaagent:/path/to/MyPerf4J-ASM.jar-DMyPerf4JPropFile=/path/to/MyPerf4J.properties
オープンソースのアドレス: github.com/LinShunKang/MyPerf4J