Javaアプリケーションのループ検知

Site24x7 APMインサイトJavaエージェントでループ検知を行います。
この機能により、データベースクエリの複製や過剰な時間消費を引き起こしているアプリケーションコードのループを検知できます。

ループの概要と監視の必要性

ループはプログラムにおいて重要なコンポーネントであり、特定の条件にマッチするまでリピートして実行される処理です。この機能は反復的なタスク、データ収集処理、様々なアルゴリズムの実行のために重要なものです。

しかし、正常にループ処理が行われていないと、パフォーマンス問題が引き起こされます。過剰なループ実行や非効率なロジックを含まれていると、処理する時間やリソースが増加し、ユーザー体感の低下やアプリケーションクラッシュにつながります。

最適なパフォーマンスを維持するために、継続的にコード内のループを監視し特定することが必要です。これらコードブロックを事前に検知し、アプリケーションを最適化します。

APMインサイトJavaエージェントのループ検知によるメリット

APMインサイトJavaエージェントのループ検知機能で、アプリケーションコード内のループをキャプチャし、複製された要求を特定します。これにより、同期および非同期コードの非効率な効果を防止します。パフォーマンスのボトルネックを特定することで、アプリケーションパフォーマンスとユーザー体感の向上につなげられます。

デフォルトでループ検知機能は無効化されています。
こちらの方法で有効化してください。

UIでの表示

  1. Site24x7にログインします。
  2. [APM]→[Javaアプリケーション監視名]に移動します。
  3. [トレース]タブをクリックし、特定のトレースをクリックします。
  4. [トレース詳細]タブを選択します。
  5. ループ検知とラベリングされている期間を探します。

スパンの強調表示された部分は、外側のループ(CatalogBean.viewProduct)が2回実行され、内側のループ(Product.sleepTime) が2回実行され、合計4回の反復が行われるネストされたループ実装のエージェントの検出を示しています。

ループ検知の有効化と無効化方法

  1. [APM]→[APMインサイト]→[Javaアプリケーション名]に移動します。
  2. ハンバーガーアイコンより(Hamburger icon)から[編集]をクリックします。
  3. APMエージェント設定プロファイルの鉛筆アイコンをクリック後、ループ検知の有効化項目で設定できます。

ループのキャプチャ方法

全てのループはキャプチャされません。

ループ検知は、ユーザーパッケージ内のメソッドで指定されており、次のしきい値のうち1つ以上にマッチしたループが表示されます。

  • ループ内に外部要求が少なくとも1つ含まれている
  • 10ミリ秒を超えたループ期間がある

取得メトリック

ループ検知が行われると、次のメトリックが[トレース詳細]タブに表示されます。

メトリック 説明
期間 ループ実行にかかった合計時間です。
ループ元 ループ元のクラスとメソッド名です。
反復回数 ループが行われた反復回数です。
複製要求の包括ビュー ループ内の同じ位置での反復にわたり発生した外部要求をマージして、単一スパンで表示します。