• ログイン

本書は、お客様のご参考のために原文の英語版を機械翻訳したものです。

英語版と齟齬がある場合、英語版の定めが優先するものとします。より詳しい情報については、本リンクをご参照ください。

問題を作成する

Java非同期インストルメンテーションの紹介

New Relic for Java には、非同期アクティビティのカスタムインスツルメンテーションのための APIメソッドのセット が含まれています。これは サポートされていないフレームワーク の非同期アクティビティをインストルメンテーションする際に最も有用ですが、サポートされているフレームワークにインストルメンテーションを追加するためにAPIを使用することもできます。このドキュメントでは、非同期アクティビティがどのように発生するか、そしてNew Relicがどのように非同期作業をモニタリングするかを説明します。

非同期の操作

同期型の プログラミングモデルでは、プログラミングタスクは通常、特定の順序で実行されます。あるタスクが完了すると次のタスクが開始され、各タスクは次のタスクの完了を阻止します。

非同期 プログラミングでは、ノンブロッキングモデルを採用しているため、タスクを並行して実行することができます。非同期に実行されたタスクは、その実行と初期化において、お互いに完全に独立しています。非同期のコードは特定の順序で実行されないため、サーバーの処理能力を最大限に活用でき、アプリのスループットが向上します。

非同期とスレッドスイッチ

非同期処理を使用するアプリケーションでは、 スレッド切り替え プログラムやタスクがあるスレッドから別のスレッドに切り替わることです。このような非同期のインターリーブを理解することで、どのメソッドをインストルメント化すべきかを判断することができます。

ここでは、外部からのリクエストを並行して行うコントローラを使ったメソッドの例を紹介します。これらのリクエストは非同期に実行されるため、各リクエストは互いに独立して実行され、 getScoreAsync() は呼び出された後すぐに戻ります。これにより、 getScoreAsync() が外部呼び出しを行って応答を送信している間に、リクエストを行っているスレッドはリクエストを継続することができます。

@ResponseBody
@RequestMapping("getScores", method = RequestMethod.Get
produces = “text/plain”)
public String getCreditScores(@RequestParam(name = "uids") uids) {
return Arrays.stream(uids.split(","))
.parallel()
.map(Integer::valueOf)
.map(uid -> getScoreAsync(uid))
.collect(Collectors.toList());}

これらのリクエストの中には、他のリクエストよりも先に終了するものもあります。中には、リクエストしたスレッドが他のタスクに移った後に終了するものもあります。

New Relic の非同期インスツルメンテーションでは、APM UI は作業に 非同期 というフラグを立てます。例えば、上記のメソッドがNew Relicによって(自動またはカスタムインストルメンテーションによって)インストルメントされた場合、APM UIは Trace details ページ にこのように表示されます。

one.newrelic.com > APM> (select an app)> Transactions> Transaction trace> Trace details: Javaアプリケーションの非同期アクティビティがAPMによって検出されると、 Drilldown カラムに Async フラグが表示されます。

非同期と応答時間

応答時間 は、要求者の視点から見たトランザクションの持続時間として定義されます。非同期アプリケーションの場合、レスポンスタイムはトランザクションの総時間よりも短いことが多いです。これは、メソッドがリターンする前に、先行するすべてのメソッドの完了を待つ必要がないためです。タスクを延期することができるので、アプリケーションは限られたリソースを活用して、より迅速に物事を処理することができます。

チャートのレスポンスタイムラインは、ウェブトランザクションの合計時間よりも、アプリケーションの認知された動作と速度についてより多くの洞察を与えてくれます。

one.newrelic.com > APM> (select an app)> Summary: APM Summary ページでは、Javaアプリの非同期アクティビティでは、レスポンスタイム(青い線)がトータルのトランザクションタイムよりも短くなることがあります。これは、メソッドがリターンする前に、先行するすべてのメソッドの完了を待つ必要がないためです。

非同期APIによるカスタムインストルメント

非同期作業のカスタム・インスツルメンテーションを実装するには、 Javaエージェント非同期APIガイド を参照してください。Java エージェント API の使用方法に関する一般的な情報については、 Java エージェント API ガイド を参照してください。

Copyright © 2022 New Relic株式会社。

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.