(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2021-12-16
(45)【発行日】2022-01-14
(54)【発明の名称】適応アプリケーションの性能分析
(51)【国際特許分類】
G06F 11/34 20060101AFI20220106BHJP
【FI】
G06F11/34 166
(21)【出願番号】P 2019570360
(86)(22)【出願日】2018-05-08
(86)【国際出願番号】 US2018031589
(87)【国際公開番号】W WO2018236476
(87)【国際公開日】2018-12-27
【審査請求日】2019-12-19
(32)【優先日】2017-06-23
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】518295303
【氏名又は名称】ニュー レリック インコーポレイテッド
(74)【代理人】
【識別番号】110001243
【氏名又は名称】特許業務法人 谷・阿部特許事務所
(72)【発明者】
【氏名】トッド ウェスト
(72)【発明者】
【氏名】グラハム フラー
(72)【発明者】
【氏名】セバスチャン ラミレス
【審査官】多胡 滋
(56)【参考文献】
【文献】米国特許出願公開第2017/0109268(US,A1)
【文献】特開2011-248895(JP,A)
【文献】米国特許出願公開第2008/0306711(US,A1)
【文献】特開2010-033543(JP,A)
【文献】特開2015-095065(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/07
G06F 11/34
(57)【特許請求の範囲】
【請求項1】
アプリケーションを監視するシステムであって、
前記アプリケーションの1つまたは複数のパッケージに関連付けられたプロセスのコードグラフを生成し、前記コードグラフは、前記プロセス間の呼び出し関係を表し、
前記プロセスの実行時に前記プロセスの継続時間を受け取るように前記コードグラフのプロセスを計装し、
前記プロセスを含むトランザクションの実行を示すトランザクション追跡を検出し、
前記プロセスの継続時間と前記トランザクションのトランザクション時間との間の関係を示す前記プロセスの継続時間スコアを決定し、
計装閾値を決定し、
前記継続時間スコアが前記計装閾値を満たしているかどうかを決定し、
前記継続時間スコアが前記計装閾値を満たしていると決定することに応じて、
前記コードグラフの参照に基づいて、前記プロセスによって呼び出される第2のプロセスを決定し、
第2のトランザクションの第2のトランザクション追跡で前記第2のプロセスの実行が検出されたときに前記第2のプロセスの第2の継続時間を受け取るように前記第2のプロセスを計装し、
前記第2のトランザクションの実行を示す前記第2のトランザクション追跡を検出し、前記第2のトランザクション追跡は、前記プロセスと前記第2のプロセスを呼び出す第1のプロセスをともなう前記第2のプロセスとを含み、
前記第2のプロセスの第2の継続時間と前記プロセスの継続時間との関係を示す前記第2のプロセスの第2の継続時間スコアを決定し、
前記第2の継続時間スコアが前記計装閾値を満たすかどうかを決定し、
前記第2の継続時間スコアが前記計装閾値を満たしていると決定することに応じて、
前記コードグラフを参照することに基づいて、前記第2のプロセスによって呼び出される第3のプロセスを決定し、
第3のトランザクションの第3のトランザクション追跡で前記第3のプロセスの実行が検出されるとき前記第3のプロセスの第3の継続時間を受け取るように、前記第3のプロセスを計装し、
前記第3のトランザクションの実行を示す前記第3のトランザクション追跡を検出し、前記第3のトランザクション追跡は、前記プロセス、前記第2のプロセス、および前記第3のプロセスを含み、前記第1のプロセスは前記第2のプロセスを呼び出し、前記第2のプロセスは前記第3のプロセスを呼び出し、
前記第3のプロセスの前記第3の継続時間と前記第2のプロセスの前記第2の継続時間との関係を示す前記第3のプロセスの第3の継続時間スコアを決定し、
プルーニング閾値を決定し、
前記第3の継続時間スコアがプルーニング閾値を満たすかどうかを決定し、
前記第3の継続時間スコアがプルーニング閾値を満たしていると決定されることに応答して、前記第2のプロセスの計装をしないで、第4のトランザクションの第4のトランザクション追跡で前記第2のプロセスの実行が検出されるとき、前記第2のプロセスに前記第2のプロセスの前記第2の継続時間を返させないようにする
よう構成された1つまたは複数のプロセッサを備えた、システム。
【請求項2】
前記1つまたは複数のプロセッサは、
前記第2のトランザクション追跡について情報ディスプレイを生成し、
前記プロセス、前記プロセスの前記継続時間スコア、前記プロセスによって呼び出される前記第2のプロセス、および前記第2のプロセスの前記第2の継続時間スコアのインジケーションを前記情報ディスプレイに提供する
ようさらに構成されている、請求項
1に記載のシステム。
【請求項3】
前記1つまたは複数のプロセッサは、
前記第3のトランザクション追跡について情報ディスプレイを生成し、
前記プロセスの前記継続時間スコア、前記プロセスによって呼び出される前記第3のプロセス、および前記第3のプロセスの前記第3の継続時間スコアのインジケーションを前記情報ディスプレイに提供する
ようにさらに構成されている、請求項
1に記載のシステム。
【請求項4】
前記1つまたは複数のプロセッサは、
前記トランザクション追跡について情報ディスプレイを生成し、
前記プロセスおよび前記プロセスの前記継続時間スコアのインジケーションを前記情報ディスプレイに提供する
ようにさらに構成されている、請求項1に記載のシステム。
【請求項5】
前記第2のプロセスを計装するように構成された前記1つまたは複数のプロセッサは、前記アプリケーションを監視するエージェントに命令を送信し、前記エージェントに前記第2のプロセスにコードを追加させて、前記第2のプロセスが実行されたときに前記第2のプロセスに前記第2の継続時間を返させるように構成された前記1つまたは複数のプロセッサを含む、請求項1に記載のシステム。
【請求項6】
前記1つまたは複数のプロセッサは、ユーザ入力からの計装スコア閾値を受信する
ようにさらに構成されている、請求項1に記載のシステム。
【請求項7】
前記プロセスは前記アプリケーションの第1のパッケージに属し、前記第2のプロセスは前記第1のパッケージと異なる前記アプリケーションの第2のパッケージに属する、請求項1に記載のシステム。
【請求項8】
前記1つまたは複数のプロセッサは、
ユーザ入力からの前記アプリケーションの前記1つまたは複数のパッケージの選択を受信し、前記ユーザ入力に基づいて前記コードグラフを生成し、前記1つまたは複数のパッケージは前記アプリケーションの全パッケージのサブセットである
ようにさらに構成されている、請求項1に記載のシステム。
【請求項9】
前記1つまたは複数のプロセッサは、
前記継続時間スコアが前記計装閾値を満たさないと決定することに応じて、前記プロセスによって呼び出される前記第2のプロセスの計装を控える
ようにさらに構成されている、請求項1に記載のシステム。
【請求項10】
アプリケーションを監視する方法であって、
実行している前記アプリケーションの1つまたは複数のパッケージに関連付けられたプロセスのコードグラフを生成することであり、前記コードグラフは、前記プロセス間の呼び出し関係を表す、ことと、
前記プロセスの実行時に前記プロセスの継続時間を受け取るように前記コードグラフのプロセスを計装することと、
前記アプリケーションを監視して前記プロセスを含むトランザクションの実行を示すトランザクション追跡を検出することと、
前記プロセスの継続時間と前記トランザクションのトランザクション時間との間の関係を示す前記プロセスの継続時間スコアを決定することと、
計装閾値を決定することと、
前記継続時間スコアが前記計装閾値を満たしているかどうかを決定することと、
前記継続時間スコアが前記計装閾値を満たしていると決定することに応じて、
前記コードグラフの参照に基づいて、前記プロセスによって呼び出される第2のプロセスを決定することと、
第2のトランザクションの第2のトランザクション追跡で前記第2のプロセスの実行が検出されたときに前記第2のプロセスの第2の継続時間を受け取るように前記第2のプロセスを計装することと
、
前記第2のトランザクションの実行を示す前記第2のトランザクション追跡を検出することであり、前記第2のトランザクション追跡は、前記プロセスと前記第2のプロセスを呼び出す第1のプロセスをともなう前記第2のプロセスとを含む、ことと、
前記第2のプロセスの第2の継続時間と前記プロセスの継続時間との関係を示す前記第2のプロセスの第2の継続時間スコアを決定することと、
前記第2の継続時間スコアが前記計装閾値を満たすかどうかを決定することと、
前記第2の継続時間スコアが前記計装閾値を満たしていると決定することに応じて、
前記コードグラフを参照することに基づいて、前記第2のプロセスによって呼び出される第3のプロセスを決定することと、
第3のトランザクションの第3のトランザクション追跡で前記第3のプロセスの実行が検出されるとき前記第3のプロセスの第3の継続時間を受け取るように、前記第3のプロセスを計装することと、
前記第3のトランザクションの実行を示す前記第3のトランザクション追跡を検出することであり、前記第3のトランザクション追跡は、前記プロセス、前記第2のプロセス、および前記第3のプロセスを含み、前記第1のプロセスは前記第2のプロセスを呼び出し、前記第2のプロセスは前記第3のプロセスを呼び出す、ことと、
前記第3のプロセスの前記第3の継続時間と前記第2のプロセスの前記第2の継続時間との関係を示す前記第3のプロセスの第3の継続時間スコアを決定することと、
プルーニング閾値を決定することと、
前記第3の継続時間スコアがプルーニング閾値を満たすかどうかを決定することと、
前記第3の継続時間スコアがプルーニング閾値を満たしていると決定されることに応答して、
前記第2のプロセスの計装をしないで、第4のトランザクションの第4のトランザクション追跡で前記第2のプロセスの実行が検出されるとき、前記第2のプロセスに前記第2のプロセスの前記第2の継続時間を返させないようにすることと
を含む、方法。
【請求項11】
前記第2のトランザクション追跡について情報ディスプレイを生成することと、
前記プロセス、前記プロセスの前記継続時間スコア、前記プロセスによって呼び出される前記第2のプロセス、および前記第2のプロセスの前記第2の継続時間スコアのインジケーションを前記情報ディスプレイに提供することと
をさらに、請求項
10に記載の方法。
【請求項12】
前記第3のトランザクション追跡について情報ディスプレイを生成することと、
前記プロセスの前記継続時間スコア、前記プロセスによって呼び出される前記第3のプロセス、および前記第3のプロセスの前記第3の継続時間スコアのインジケーションを前記情報ディスプレイに提供することと
をさらに含む、請求項
10に記載の方法。
【請求項13】
前記第2のプロセスを計装することは、前記アプリケーションを監視するエージェントに命令を送信し、前記エージェントに前記第2のプロセスにコードを追加させて、前記第2のプロセスが実行されたときに前記第2のプロセスに前記第2の継続時間を返させることを含む、請求項
10に記載の方法。
【請求項14】
ユーザ入力からの前記アプリケーションの前記1つまたは複数のパッケージの選択および前記ユーザ入力に基づいて前記コードグラフを生成することをさらに含み、前記1つまたは複数のパッケージは前記アプリケーションの全パッケージのサブセットである、請求項
10に記載の方法。
【請求項15】
前記継続時間スコアが前記計装閾値を満たさないと決定することに応じて、前記プロセスによって呼び出される前記第2のプロセスの計装を控えることをさらに含む、請求項
10に記載の方法。
【請求項16】
プロセッサによって実行された時に当該プロセッサに、
アプリケーションの1つまたは複数のパッケージに関連付けられたプロセスのコードグラフを生成し、前記コードグラフは、前記プロセス間の呼び出し関係を表し、
前記プロセスの実行時に前記プロセスの継続時間を受け取るように前記コードグラフのプロセスを計装し、
前記アプリケーションを
監視して前記プロセスを含むトランザクションの実行を示すトランザクション追跡を検出し、
前記プロセスの継続時間と前記トランザクションのトランザクション時間との間の関係を示す前記プロセスの継続時間スコアを決定し、
計装閾値を決定し、
前記継続時間スコアが前記計装閾値を満たしているかどうかを決定し、
前記継続時間スコアが前記計装閾値を満たしていると決定することに応じて、
前記コードグラフの参照に基づいて、前記プロセスによって呼び出される第2のプロセスを決定し、
第2のトランザクションの第2のトランザクション追跡で前記第2のプロセスの実行が検出されたときに前記第2のプロセスの第2の継続時間を受け取るように前記第2のプロセスを計装
し、
前記第2のトランザクションの実行を示す前記第2のトランザクション追跡を検出し、前記第2のトランザクション追跡は、前記プロセスと前記第2のプロセスを呼び出す第1のプロセスをともなう前記第2のプロセスとを含み、
前記第2のプロセスの第2の継続時間と前記プロセスの継続時間との関係を示す前記第2のプロセスの第2の継続時間スコアを決定し、
前記第2の継続時間スコアが前記計装閾値を満たすかどうかを決定し、
前記第2の継続時間スコアが前記計装閾値を満たしていると決定することに応じて、
前記コードグラフを参照することに基づいて、前記第2のプロセスによって呼び出される第3のプロセスを決定し、
第3のトランザクションの第3のトランザクション追跡で前記第3のプロセスの実行が検出されるとき前記第3のプロセスの第3の継続時間を受け取るように、前記第3のプロセスを計装し、
前記第3のトランザクションの実行を示す前記第3のトランザクション追跡を検出し、前記第3のトランザクション追跡は、前記プロセス、前記第2のプロセス、および前記第3のプロセスを含み、前記第1のプロセスは前記第2のプロセスを呼び出し、前記第2のプロセスは前記第3のプロセスを呼び出し、
前記第3のプロセスの前記第3の継続時間と前記第2のプロセスの前記第2の継続時間との関係を示す前記第3のプロセスの第3の継続時間スコアを決定し、
プルーニング閾値を決定し、
前記第3の継続時間スコアがプルーニング閾値を満たすかどうかを決定し、
前記第3の継続時間スコアがプルーニング閾値を満たしていると決定されることに応答して、
前記第2のプロセスの計装をしないで、第4のトランザクションの第4のトランザクション追跡で前記第2のプロセスの実行が検出されるとき、前記第2のプロセスに前記第2のプロセスの前記第2の継続時間を返させないようにする
ように前記プロセッサを構成する命令を格納した非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般に、コンピューティングシステム上で実行するアプリケーションの性能監視に関する。
【0002】
ウェブベースおよびモバイルアプリケーションは、コンテンツおよびサービスをユーザーコンピューティングデバイスに配信するための一般的なツールである。これらのアプリケーションは、コンピューティングデバイスにコンテンツを提供し、コンピューティングデバイスからの要求に応答するアプリケーションサーバによって実行される。アプリケーションの機能の中断を避けるために、アプリケーションサーバは、エージェントなどのプログラムを追加で実行して、サーバおよびアプリケーションを監視し得る。アプリケーションサーバを監視することは、サーバの管理者が、アプリケーションサーバが適切に稼働していることを確認し、アプリケーションにおけるパフォーマンスの問題を検出することを可能にする。
【0003】
例えば、監視は、アプリケーションのアプリケーションコードを実行するフレームワークまたはアプリケーションサーバを計装して、トランザクション追跡を生成することができる。このようなトランザクション追跡は、アプリケーションサーバまたはフレームワークの計装されたコードの潜在的なパフォーマンスの問題を明らかにすることができるが、アプリケーションコードの個々のプロセス(たとえば、関数またはメソッド)のパフォーマンスは明らかにしない。カスタム計装を使用してアプリケーションコードを計装することは可能であるが(たとえば、アプリケーションをコンパイルしてデプロイの前に、およびコードの特定のプロセスを手動で計装するなど)、これには、どのプロセスがパフォーマンスの問題を引き起こしているかに関する知識が必要である。
【発明の概要】
【0004】
システムは、プロセス性能に基づいてアプリケーションのプロセスの発見および計装を実行する。いくつかの実施形態では、システムは、アプリケーションの1つまたは複数のパッケージに関連付けられたプロセスのコードグラフを生成し、コードグラフは、プロセス間の呼び出し関係を表し、コードグラフのプロセスを計装して、プロセスの実行時にプロセスの継続時間を受け取る、1つまたは複数のプロセッサ(たとえば、サーバーの)を含む。1つまたは複数のプロセッサは、プロセスを含むトランザクションの実行を示すトランザクション追跡を検出し、プロセスの継続時間とトランザクションのトランザクション時間との間の関係を示すプロセスの継続時間スコア、計装閾値、および継続時間スコアが計装閾値を満たしているかどうかを決定する。継続時間スコアが計装閾値を満たしていると決定することに応じて、1つまたは複数のサーバは、コードグラフの参照に基づいて、プロセスによって呼び出される第2のプロセスを決定し、第2のトランザクションの第2のトランザクション追跡で第2のプロセスの実行が検出されたとき第2のプロセスの第2の継続時間を受け取るように、第2のプロセスを計装する。
【0005】
いくつかの実施形態において、システムの1つまたは複数のプロセッサは、第2のトランザクションの実行を示す第2のトランザクション追跡を検出し、第2のトランザクション追跡は、プロセスと第2のプロセスを呼び出す第1のプロセスをともなう第2のプロセスとを含む。1つまたは複数のサーバは、第2のプロセスの第2の継続時間とプロセスの継続時間との関係を示す第2のプロセスの第2の継続時間スコアを決定し、第2の継続時間スコアが計装閾値を満たすかどうかを決定する。第2の継続時間スコアが計装閾値を満たしていると決定することに応答して、1つまたは複数のサーバは、コードグラフを参照することに基づいて、第2のプロセスによって呼び出される第3のプロセスを決定し、第3のトランザクションの第3のトランザクション追跡で第3のプロセスの実行が検出されるとき第3のプロセスの第3の継続時間を受け取るように、第3のプロセスを計装する。
【0006】
いくつかの実施形態では、システムの1つまたは複数のプロセッサは、第3のトランザクションの実行を示す第3のトランザクション追跡を検出し、第3のトランザクション追跡は、プロセス、第2のプロセス、および第3のプロセスを含み、第1のプロセスは第2のプロセスを呼び出し、第2のプロセスは第3のプロセスを呼び出す。1つまたは複数のサーバは、第3のプロセスの第3の継続時間と第2のプロセスの第2の継続時間との関係を示す第3のプロセスの第3の継続時間スコア、プルーニング閾値、および第3の継続時間スコアがプルーニング閾値を満たすかどうかを決定する。第3の継続時間スコアがプルーニング閾値を満たしていると決定されることに応答して、1つまたは複数のサーバは、第2のプロセスの実行が検出されたときに、第2のプロセスの計装をしないで、第4のトランザクションの第4のトランザクション追跡で第2のプロセスの実行が検出されるとき、第2のプロセスが第2のプロセスの第2の継続時間を返さないようにする。
【0007】
いくつかの実施形態は、アプリケーションを監視する方法を含み得る。この方法は、実行中のアプリケーションの1つまたは複数のパッケージに関連付けられたプロセスのコードグラフを生成し、コードグラフが、プロセス間の呼び出し関係を表し、コードグラフのプロセスを計装し、プロセスが実行されるときにプロセスの継続時間を受け取ることを含む。この方法は、アプリケーションを監視して、プロセスを含むトランザクションの実行を示すトランザクション追跡を検出することをさらに含む。この方法は、プロセスの継続時間とトランザクションのトランザクション時間との関係を示すプロセスの継続時間スコア、計装閾値、および継続時間スコアが計装閾値を満たすかどうかを決定することをさらに含む。継続時間スコアが計装閾値を満たしていると決定したことに応答して、この方法は、コードグラフを参照することに基づいて、プロセスによって呼び出された第2のプロセスを決定し、第2のプロセスを計装し、第2のトランザクションの第2のトランザクション追跡で第2のプロセスの実行が検出されるときに、第2のプロセスの第2の継続時間を受け取る。
【0008】
いくつかの実施形態は、プロセッサによって実行されると、本明細書で説明するアプリケーションを監視するための方法を実行するようにプロセッサを構成する命令を格納する非一時的コンピュータ可読媒体を含む。
【図面の簡単な説明】
【0009】
【
図1】
図1は、いくつかの実施形態による、性能監視システムを含むシステム環境のブロック図である。
【
図2】
図2は、いくつかの実施形態による、アプリケーションサーバ上で実行しているアプリケーションのプロセスを発見および計測する方法のフローチャートである。
【
図3】
図3は、いくつかの実施形態によるコードグラフの概略図である。
【
図4】
図4は、いくつかの実施形態によるコードグラフの概略図である。
【
図5】
図5は、いくつかの実施形態による、トランザクション追跡の情報表示の例である。
【
図6】
図6は、いくつかの実施形態による、トランザクション追跡の情報表示の例である。
【
図7】
図7は、いくつかの実施形態による、トランザクション追跡の情報表示の例である。
【
図8】
図8は、いくつかの実施形態による、アプリケーションサーバ上で実行しているアプリケーションの監視されるプロセスをプルーニングする方法のフローチャートである。
【
図9】
図9は、いくつかの実施形態による、トランザクション追跡の情報表示の例である。
【
図10】
図10は、いくつかの実施形態による、トランザクション追跡の情報表示1000の一例である。
【0010】
図面は、例示のみを目的として本開示の実施形態を示している。当業者は、以下の説明から、本明細書で説明される開示の原理または利益から逸脱することなく、本明細書で説明される構造および方法の代替実施形態を採用できることを容易に認識する。
【発明を実施するための形態】
【0011】
システム概要
図1は、いくつかの実施形態によるシステム環境100のブロック図である。
システム100は、ネットワーク124(例えば、インターネット)を介して通信する性能監視システム102、アプリケーションシステム106、およびクライアントデバイス104を含む。性能監視システム102は、アプリケーションシステム106の1つまたは複数のサーバ110によって実行されるアプリケーション108の性能を監視および分析する。
【0012】
アプリケーションシステム106は、1つまたは複数のアプリケーションサーバ110と1つまたは複数のデータストア112とを含む。データストア112は、1つまたは複数のアプリケーションサーバ110によって実行されるアプリケーション108のアプリケーションデータを格納する。アプリケーションサーバ110は、アプリケーションサーバ110上で実行しているプロセス、アプリケーション108の応答時間、アプリケーション108のトランザクション、アプリケーション108のトランザクションのプロセス、クライアントデバイス104でのアプリケーション108のパフォーマンスに対するバックエンドプロセスの影響、アプリケーション108を実行している仮想マシンの統計、またはその他の情報など、アプリケーション115のパフォーマンスを監視する1つまたは複数のエージェント114をさらに実行する。一実施形態では、エージェント114は、性能情報をアプリケーション108のコードパスにリンクする。コードパスは、とりわけ、アプリケーション108で実行されているパッケージとプロセスを識別することができる。エージェント114は、アプリケーション108の性能に関連するデータを収集および格納し、定期的に監視サーバ140にデータを報告する。
【0013】
アプリケーション108は、様々なタイプのモバイルアプリケーションまたはウェブアプリケーションのいずれかであり得、クライアントサーバアプリケーションの演算処理のサブセットを表し得る。例えば、アプリケーションサーバ110によって演算処理されるアプリケーション108は、データベースコンテンツを検索および格納すること、クライアントデバイス104でレンダリングするためのユーザインターフェースの生成すること、クライアントデバイス104で要求される機能の実行すること、およびクライアントデバイス104にコンテンツを通信する(例えば、ネットワーク124を介して)こと、など、クライアントサーバアプリケーションのサーバサイドプロセスを含み得る。
図1にはアプリケーションサーバ110が示されているが、アプリケーションサーバ110は、アプリケーション108の機能を実行する1つまたは複数のコンピューティングデバイスを備えてもよい。
【0014】
一部の実施形態では、アプリケーションサーバ110は、アプリケーション108のプロセスを実行するJava仮想マシンを実行するコンピューティングデバイスを含む。仮想マシンは、アプリケーション108を実行するための環境を提供し、アプリケーション108によって作成されたオブジェクトと、アプリケーション108によって使用されるデータストア112の一部(メモリなど)を管理する。特に、仮想マシンは、アプリケーション108およびエージェント114の実行中に作成された変数またはデータ構造を含むオブジェクトをメモリプール間で移動することによりメモリを割り当て、システム106の使用可能なメモリを効率的に管理する。また、仮想マシンは、ガベージコレクションプロセスを実行して、アプリケーション108で使用または参照されなくなったオブジェクトを特定および削除し、他のオブジェクトを格納するために未使用オブジェクトにより占有されたメモリを解放する。
【0015】
性能監視システム102は、1つまたは複数の性能監視サーバ120(すなわち「監視サーバ120」)および1つまたは複数のデータリポジトリ122を含む。監視サーバ120は、エージェント114との通信を介してアプリケーションサーバ110の性能を監視する1つまたは複数のプロセッサを含む外部コンピューティングデバイスである。 監視サーバ120は、アプリケーション監視サービスプロバイダによってホストされてもよく、異なるアプリケーションシステム106にわたるアプリケーションサーバ110を含む、任意の数のアプリケーションサーバ110の性能を監視してもよい。
【0016】
アプリケーションサーバ110を監視するために、監視サーバ120は、エージェント114をアプリケーションサーバ110に提供することができる(例えば、ソフトウェア開発キットとして、またはアプリケーション115のソフトウェアに統合されたモジュールとして)。アプリケーションサーバ110がエージェント114を実行している間、監視サーバ120は、エージェント114と通信して、アプリケーションサーバ110の性能を監視する。監視サーバ120は、エージェント114からアプリケーション108のトランザクション追跡に関するレポートを受信し、アプリケーションサーバ110の管理者による分析のための情報表示を生成し、管理者がアプリケーション108のパフォーマンス問題に対処できるようにする。例えば、監視サーバ120は、トランザクションのトランザクション時間またはアプリケーション108のプロセスの継続時間を示すテーブル、チャート、またはプロットを生成する。情報表示は、トランザクション追跡、トランザクションのプロセス呼び出しチェーンの定義、低速またはその他の重要なトランザクションまたはプロセスのインジケーションを含み得、アプリケーション108を実行しているサーバおよび/または仮想マシンからの統計を提供する。
【0017】
図2は、いくつかの実施形態による、アプリケーションサーバ110上で実行しているアプリケーション108を発見し、計装するプロセスの方法200のフローチャートである。方法200は、トランザクション追跡におけるプロセス間の呼び出し関係に基づいて、トランザクションのアプリケーションプロセスのプログラムによる発見を提供する。トランザクション追跡は、呼び出し関係を持つプロセスの実行スタックを定義します。方法200は、親プロセスと比較してプロセスの継続時間を分析し、遅いプロセスを発見するための実行スタックを続ける。一実施形態では、
図2に示されるプロセスのステップは、システム100のコンポーネントによって実行される。ステップは、異なる順序で実行されてもよく、方法200は異なるステップを含んでもよく、追加のステップを含んでもよく、またはより少ないステップを含んでもよい。
【0018】
監視サーバ120は、アプリケーションサーバ110上で実行しているアプリケーション108の1つまたは複数のパッケージに関連付けられたプロセスのコードグラフを生成する202。コードグラフは、トランザクション追跡のプロセス間の呼び出し関係を表すデータ構造である。
【0019】
アプリケーション108は、多くのパッケージを含むことができ、各パッケージは複数のプロセス(または「機能」または「メソッド」)を含む。パッケージは、機能的に関連するプロセスのグループを含むことができます。いくつかの実施形態では、監視サーバ120による監視のために、監視されているパッケージは、例えばユーザ入力により、またはプログラム的に選択されることができる。一部の実施形態では、監視サーバ120は、アプリケーションサーバ110で実行されているコードの監視、および監視のために選択されていないアプリケーション108のプロセスおよびパッケージのフィルタリングに基づいてコードグラフを構築する。
【0020】
監視サーバ120は、プロセスが実行されるときにプロセスの継続時間を受信するために、コードグラフのプロセスを計装する204。この計装は、コードグラフのプロセスの初期計装であり、プロセスによって呼び出される計装サブプロセスのルートプロセスとして使用できる。一例では、1つまたは複数の定義されたプロセスが初期計装ポイントとして使用される。計装ポイントは、アプリケーションのメインプロセスまたはメソッド、あるいは関心のある他のプロセスとし得る。
【0021】
別の例では、監視サーバ120は、トランザクションについてアプリケーション108を監視し、トランザクション中の検出された1つまたは複数の選択されたパッケージに属する各プロセスを計装する。アプリケーションサーバ110は、アプリケーション108を実行して、互いを呼び出す複数のプロセス、それらの呼び出し関係、およびそれらの継続時間を示すトランザクション追跡によって定義されるトランザクションを生成する。エージェント114は、トランザクション追跡を検出し、トランザクション追跡を監視サーバ120に送信する。監視サーバ120は、選択された1つまたは複数のパッケージに属さないトランザクション追跡内のプロセスをフィルタリングし、選択された1つまたは複数のパッケージに属するトランザクション追跡内のプロセスに対して初期計装を実行する。
【0022】
いくつかの実施形態では、監視サーバ140は、命令をエージェント114に送信することによりプロセスを計装する。エージェント114は、プロセスに計装ポイントを追加し、当該プロセスが実行されたときに当該プロセス(または何らかの他の監視プロセス)がエージェント114に当該プロセスの継続時間を返すようにする。
【0023】
監視サーバ120は、計装されたプロセスを含むトランザクションの実行を示すトランザクション追跡を検出する206。例えば、監視サーバ120は、アプリケーションサーバ110がアプリケーション108を実行する過程でトランザクションを実行するときに、エージェント114からトランザクション追跡を受信する。トランザクション追跡は、トランザクション内の各プロセスのインジケーション、およびプロセス間の呼び出し関係を含むことができる。
【0024】
一部の実施形態では、監視サーバ120は、各プロセスをコードグラフのプロセスと比較して、監視されるパッケージに属する計装プロセスを特定し、さらに計装プロセスのそれぞれを処理して、計装プロセスの起動プロセスを選択的に計装する。たとえば、プロセスのクラス名とプロセス名が、コードグラフ中で識別されたクラス名とプロセス名と比較されることができる。
【0025】
監視サーバ120は、計装閾値を決定する208。計装閾値は、プロセスを計装する必要があるかどうかを決定するために使用される。計装値の閾値は、計装されるプロセスによって呼び出される1つまたは複数のサブプロセスの計装を生じさせる継続時間スコアの値を定義する。
【0026】
監視サーバ120は、プロセスの継続時間とトランザクションのトランザクション時間との間の関係を示すプロセスの継続時間スコアを決定する210。トランザクション時間は、トランザクション追跡の最初のプロセスの呼び出しとトランザクション追跡の最後のプロセスによる応答との間に定義される時間など、トランザクションの全実行時間を定義する。継続時間は、プロセスの呼び出しとプロセスによる応答との間に定義される時間など、プロセスの実行時間を定義する。継続時間スコアは、プロセスの実行に使用されるトランザクションの実行に使用される全トランザクション時間の一部を表す、トランザクション時間に対する継続時間の比率として計算されることができる。監視サーバ120は、トランザクションのトランザクション時間を決定すること、プロセスの継続時間を決定すること、およびトランザクション時間と継続時間に基づいた継続時間スコアの計算に基づいて、プロセスの継続時間スコアを決定する。
【0027】
いくつかの実施形態では、監視サーバ120は、トランザクション時間および/または継続時間などのパフォーマンス情報をエージェント114から受信する。いくつかの実施形態では、監視サーバ120は、トランザクションで実行される複数のプロセスの継続時間を追加することに基づいてトランザクション時間を計算する。
【0028】
監視サーバ120は、プロセスの継続時間スコアのインジケーションを、トランザクション追跡のための情報表示に提供する212。例えば、監視サーバ120は、情報表示を含むユーザインターフェースを生成する。ユーザインターフェースは、選択されたパッケージに属するトランザクションの各計装されるプロセス、および計装されるプロセスの継続時間スコアを含み得る。情報表示は、プロセス間の呼び出し関係のインジケーションをさらに含み得る。
【0029】
監視サーバ120は、継続時間スコアが計装閾値を満たすかどうかを決定する214。一部の実施形態では、計装閾値は、0.20(すなわち20パーセント)に設定される。ここで、継続時間スコア(たとえば、計装されるプロセスの継続時間とトランザクション時間の比によって定義される)が0.20を超える場合、計装閾値が満たされ、トランザクション内で計装されるプロセスによって呼び出される1つまたは複数のプロセスもまた計装される。別の例では、計装閾値は0.4(すなわち40パーセント)に設定される。計測閾値は、ユーザ入力によりまたはプログラム的になど調整可能とすることができる。より低い計装閾値は、呼び出されるプロセスの計装の増加およびより多くのプロセス性能の発見となり、他方で、より高い計装閾値は、データ収集量を制限するために利用されることができる。
【0030】
継続時間スコアが計装閾値を満たすと決定することに応答して、監視サーバ120は、コードグラフの参照に基づいて、第2のプロセスを決定する216。計装閾値が満たされると、第2のプロセスが計装されるプロセスの継続時間のかなりの部分を占めるため、第2のプロセスも重要性のあるプロセスとなる。計装されるプロセスは、計装閾値を満たす継続時間を各々が有する複数のプロセスを呼び出すことができる。サブクラスの計装は、エージェント114によってキャプチャされた次のトランザクション追跡でトランザクションに関するより深い可視性を可能とする。
【0031】
監視サーバ120は、第2のプロセスが第2のトランザクションで実行されるとき第2のプロセスの第2の継続時間を受信するように、第2のプロセスを計装する(218)。第2のプロセスは、後続のトランザクションの後続のトランザクション追跡で検出され得る。
【0032】
いくつかの実施形態では、トランザクション(例えば、すなわち親プロセス)が206で検出されたプロセスと同じ呼び出しレベルで第3のプロセスを有する場合、方法200は210に戻り、監視サーバ120は、第3のプロセスの継続時間とトランザクションのトランザクション時間との関係を示す第3のプロセスの継続時間スコアを決定する。同様に、第3のプロセスの継続時間スコアが計測閾値を満たしている場合、第3のプロセスのサブプロセスが計測されることができる。
【0033】
214に戻って、継続時間スコアが計装閾値を満たしていないと判断することに応答して、監視サーバ120は、計装されたプロセスのサブプロセスの計装を控える220。方法200は210に戻り、監視サーバ120は、トランザクション追跡で検出された選択されたパッケージに属するトランザクションの別のプロセスの継続時間スコアを決定する。トランザクションが追加の計測プロセスを含まない場合、方法200は終了する場合がある。トランザクションが別の計装プロセスを含む場合、計装閾値が満たされた場合にステップ212-220が実行されて他の計装プロセスのサブプロセスを計装し、他の計装プロセスの継続時間スコアをトランザクション追跡の情報ディスプレイに提供する。
【0034】
方法200は、計装閾値を満たす第2のプロセスのすべてのサブプロセスが計装されるまで、トランザクション追跡の呼び出し関係のチェーンを横断して、第2のプロセスに対して繰り返すことができる。
【0035】
図3は、いくつかの実施形態によるコードグラフ300の概略図である。コードグラフ300は、パッケージの5つのプロセス間の呼び出し関係を示している。各プロセスは、パッケージ名前空間(“com/fake/third/party/”)、クラス名(“ClassTest$l”、“ClassOne”、“ClassTwo”、“ClassThree”、および“ClassFour”)、並びにプロセス名(“reallyRun”、“classOneWork”、“classTwoWork”、“classThreeWork”、および“classFourWork”)によって参照される。プロセスreallyRunは、プロセスclassOneWorkを呼び出す。プロセスclassOneWorkは、プロセスclassTwoWorkおよびclassThreeWorkを呼び出す。プロセスclassThreeWorkは、プロセスclassFourWorkを呼び出す。
【0036】
図4は、いくつかの実施形態によるコードグラフ400の概略図である。コードグラフ400は、
図3のコードグラフ300によって示されているのと同じ“come/fake/third/party/”パッケージのプロセス間の同じ呼び出し関係を示す。さまざまな種類のデータ構造を使用して、コードグラフを定義または表現することができる。
【0037】
図5は、いくつかの実施形態による、トランザクション追跡の情報表示500の例である。情報表示500は、トランザクション追跡のプロセスに関する情報を提示するためのユーザインターフェースに提供され得る。示されているように、プロセスreallyRunは、継続時間スコアが1(すなわち継続%=100%)であり、つまり、reallyRunプロセスはトランザクションの最高レベルのプロセスであることを意味している。情報ディスプレイ500はさらに、継続時間を2760ミリ秒として示している。
【0038】
図6は、いくつかの実施形態による、トランザクション追跡の情報ディスプレイ600の例である。情報ディスプレイ600は、reallyRunプロセスによって呼び出される追加のclassOneWorkサブプロセスを含む。reallyRunプロセスの継続時間スコアは、1(すなわちトランザクション全体に対して100%の継続)である。計装閾値が0.4の場合、reallyRunプロセスの継続時間スコアは計装閾値を満たす。そのため、サブプロセスclassOneWorkも計装される。情報ディスプレイ600のトランザクション追跡によって示されるようにreallyRunプロセスが再び実行されるとき、classOneWorkの継続時間スコアなどのパフォーマンス情報も情報ディスプレイ600に提供される。さらに、classOneWorkは継続時間スコアが1であり(たとえば、呼び出すプロセスreallyRunの100%の継続)、0.4の計装閾値を超えるため、classOneWorkプロセスのサブプロセスも計装されることができる。
【0039】
図7は、いくつかの実施形態による、トランザクション追跡の情報ディスプレイ700の一例である。後続のトランザクション追跡では、classOneWorkの計装されたサブプロセスの継続時間スコアまたはその他のパフォーマンス情報も情報ディスプレイ700に表示されている。特に、情報ディスプレイ700は、classOneWorkプロセスによって呼び出される、classTwoWorkおよびclassThreeWorkを含む追加のプロセスを含む。classOneWorkの期間スコアは1で0.2を超えているため、サブプロセスclassTwoWorkおよびclassThreeWorkも計装される。さらに、classTwoWorkの継続時間スコアは.計装閾値(たとえば、0.4)を超える636(すなわちclassOneWorkの継続時間の63.6%の継続時間)であり、サブプロセスclassThreeWorkも計装される。情報表示700は、classTwoWorkによって呼び出されるプロセスとしてclassThreeWorkをさらに含む。各レベルのプロセスの継続時間スコアは、当該プロセスの継続時間と当該プロセスを呼び出す親プロセスの継続時間の比率として各レベルで定義され、情報ディスプレイにも表示される。
【0040】
プロセスclassTwoWork、classThreeWork(classTwoWorkによって呼び出される)、およびclassThreeWork(classOneWorkによって呼び出される)は、それぞれ.636、.364、および.364の継続時間スコアを有している。これらの継続時間スコアはそれぞれ0.4の計装閾値を満たすが、情報表示700の最下位レベルのプロセスである。たとえば、プロセスが、サブプロセスを有していないかもしれないし、またはそれらのサブプロセスが分析されていて、各サブプロセスの継続時間スコアが計装閾値を満たしていないため計装されていないかもしれない。したがって、サブプロセスの発見は、情報表示700に示されるトランザクション追跡ついてこれらのプロセスのそれぞれで終了ししている。
【0041】
図8は、いくつかの実施形態による、アプリケーションサーバ110上で実行されるアプリケーション108の監視されたプロセスをプルーニングするための方法800のフローチャートである。方法800は、主にサブプロセスを呼び出すように機能するトランザクション内の中間プロセスのプログラム的な計装をしないことを提供し、したがってパフォーマンス監視の観点からはそれほど重要ではない。他の利点の中でも、視覚化が困難で価値がほとんど提供しないプロセスの長いチェーンは、監視および情報ディスプレイへの表示から除外され、表示を重要なプロセス(たとえば、最も遅いプロセス)にフォーカスすることである。一実施形態では、
図8に示される方法のステップは、システム100のコンポーネントによって実行される。ステップは、異なる順序で実行されてもよく、方法800は、異なるステップ、追加のステップ、またはより少ないステップを含んでもよい。いくつかの実施形態では、方法800は方法200に関連して実行される。他の実施形態では、方法800は、別個のプルーニングタスクで実行される。
【0042】
監視サーバ120は、第1のプロセス、第1のプロセスによって呼び出される第2のプロセス、および第2のプロセスによって呼び出される第3のプロセスを含むトランザクションの実行を示すトランザクション追跡を検出する802。第1、第2、および第3のプロセスは、コードグラフ内にあり、方法200で上述したように監視のために選択されたアプリケーション108のパッケージに属する計装されたプロセスである。最初のプロセスは、トランザクション追跡の最高レベルのプロセスであり得、またはより高いレベルのプロセスによって呼び出される中間プロセスであり得る。
【0043】
監視サーバ120は、第2のプロセスの継続時間を決定する804。監視サーバ120はまた、第3のプロセスの継続時間を決定する806。第2のプロセスは第3のプロセスを呼び出すため、第3のプロセスの継続時間は第2のプロセスの継続時間に含められる。エージェント114がトランザクション追跡を監視サーバ114に報告するとき、エージェント114から第2および第3プロセスの継続時間が返される。
【0044】
監視サーバ120は、第2および第3のプロセスの継続時間に基づいて、第3のプロセスの継続時間スコアを決定する808。例えば、継続時間スコアは、第2のプロセスの継続時間と第3のプロセスの継続時間の比に基づいて計算されることができる。
【0045】
監視サーバ120は、プルーニング閾値を決定する810。プルーニング閾値は、親プロセスが計装をしないべきかどうかを決定するために使用される。
【0046】
モニタリングサーバ120は、継続時間スコアがプルーニング閾値を満たすかどうかを決定する812。いくつかの実施形態では、プルーニング閾値は、0.95(すなわち95パーセント)に設定される。継続時間スコアが.95を超える場合、プルーニング閾値は満たされる。別の例では、継続時間スコアが.95を超えない場合、プルーニング閾値は満たされない。プルーニング閾値は、ユーザ入力またはプログラム的によるなど調整可能である。プルーニング閾値を低くすると、親プロセスのプルーニングが増加し、データ収集量が制限され、中間の計装が値をほとんどまたはまったく追加しない場合に中間の計装が削除される。
【0047】
いくつかの実施形態において、プロセスの継続時間スコアは、計装閾値およびプルーニング閾値の両方と比較される。計装閾値が満たされると、プロセスによって呼び出された子プロセスが計装される。プルーニング閾値が満たされると、プロセスを呼び出す親プロセスは計装されない。
【0048】
第3のプロセスの継続時間スコアがプルーニング閾値を満たすと判定したことに応答して、監視サーバ120は、第2のプロセスを計装せず814、第1および第2のプロセスの計装を続ける。たとえば、第3のプロセスの継続時間スコアが.99で、.95のプルーニング閾値を満たしている場合、第2のプロセスの継続時間は主に第3のプロセスの実行に使用されるため、パフォーマンス監視の観点で第2のプロセスは重要ではない。
【0049】
いくつかの実施形態では、監視サーバ140は、エージェント114に命令を送信することによりプロセスの計装をしない。エージェント114は、プロセスの既存の計装ポイントを削除する。
【0050】
監視サーバ120は、第1のプロセスによって呼び出されているように第3のプロセスのインジケーションを情報ディスプレイに提供する816。さらに、情報表示は、第1と第3のプロセスの継続時間スコアまたは時間を含めることができる。計装されていない第2のプロセスは、情報表示から省略される。
【0051】
812に戻って、第3のプロセスの継続時間スコアがプルーニング閾値を満たさないと決定したことに応答して、監視サーバ120は続けて第2のプロセスを計装する818。したがって、第1、第2、および第3のプロセスは引き続き計装される。
【0052】
監視サーバ120は、第2のプロセスによって呼び出されているように第3のプロセスのインジケーションを情報ディスプレイに提供する820。情報表示は、第2のプロセスを呼び出す第1のプロセスおよび第3のプロセスを呼び出す第2プロセスを含むプロセス間の呼び出し関係のインジケーションを含む。情報表示には、第1、第2、および第3のプロセスの継続時間スコアまたは時間を含めることができる。
【0053】
方法800は、複数の親プロセスのチェーンを計装しないように繰り返されることができる。例えば、ステップ804-820は、第3のプロセスおよび第1のプロセスなどに対して実行することができる。
【0054】
図9は、いくつかの実施形態による、トランザクション追跡の情報表示900の一例である。情報ディスプレイ900は、プロセスslowAndDeepを呼び出すプロセスhandleGetProduct(クラスSimpleRESTに属する)を示す。プロセスslowAndDeepはプロセスaを呼び出し、プロセスaはプロセスbを呼び出し、プロセスbはプロセスcを呼び出し、プロセスcはプロセスdを呼び出す。
【0055】
プロセスcに対するプロセスdの継続時間スコアは.997(すなわち、99.70%の継続時間%)であり、これは.95のプルーニング閾値を超えているため、これを満たす。そのため、プロセスdの親プロセスcは計装されないことができる。プロセスcがプルーニングされると、プロセスdはプロセスbのサブプロセスとして扱われ、プロセスbに対するプロセスdの継続時間スコアが計算され、プルーニング閾値と比較される。これにより、プロセスbは計装されない。プロセスaとslowAndDeepは、同じ手法を使用して計測されない。
【0056】
図10は、いくつかの実施形態による、トランザクション追跡の情報表示1000の一例である。プロセスslowAndDeep、a、b、およびcのプルーニングとインストルメントの結果として、プロセスdは親プロセスhandleGetProductによって呼び出されているように情報ディスプレイに表示され、計装されないプロセスは情報ディスプレイ1000に表示されていない。
【0057】
追加の構成情報
本開示の実施形態の前述の説明は、例示の目的で提示されている。網羅的であること、または開示を開示された正確な態様に限定することは意図されていない。関連技術分野における当業者は、上記の開示に照らして多くの修正および変形が可能であることを理解することができる。
【0058】
この説明のいくつかの部分は、情報に対する操作のアルゴリズムおよび記号表現に関して本開示の実施形態を説明している。これらのアルゴリズムの説明と表現は、データ処理技術の当業者によって一般的に使用され、彼らの仕事の内容を他の当業者に効果的に伝える。これらの操作は、機能的、計算的、または論理的に説明されているが、コンピュータプログラムまたは同等の電気回路、マイクロコードなどによって実装されると理解される。さらに、一般性を失うことなく、これらの操作の配置をモジュールと呼ぶことが便利な場合もある。説明された動作およびそれらに関連するモジュールは、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組み合わせで具現化されてもよい。
【0059】
本明細書で説明されるステップ、動作、またはプロセスのいずれかは、単独で、または他のデバイスと組み合わせて、1つまたは複数のハードウェアまたはソフトウェアモジュールで実行または実装され得る。一実施形態では、ソフトウェアモジュールは、説明したステップ、操作、またはプロセスのいずれかまたはすべてを実行するためのコンピュータプロセッサによって実行可能なコンピュータプログラムコードを含むコンピュータ可読媒体を含むコンピュータプログラム製品で実装される。
【0060】
本開示の実施形態は、本明細書の動作を実行するための装置にも関係し得る。この装置は、必要な目的のために特別に構築されてもよく、および/または、コンピュータに格納されたコンピュータプログラムによって選択的に起動または再構成される汎用コンピューティングデバイスを備えてもよい。そのようなコンピュータプログラムは、非一時的な有形のコンピュータ可読記憶媒体、またはコンピュータシステムバスに結合され得る電子命令を格納するのに適した任意のタイプの媒体に格納され得る。さらに、本明細書で言及される任意のコンピューティングシステムは、単一のプロセッサを含むか、コンピューティング能力を高めるために複数のプロセッサ設計を採用するアーキテクチャとすることができる。
【0061】
本開示の実施形態はまた、本明細書で説明されるコンピューティングプロセスによって生成される製品に関する場合がある。そのような製品は、コンピューティングプロセスから生じる情報を含むことができ、その情報は、非一時的な有形のコンピュータ読み取り可能な記憶媒体に格納され、本明細書に記載のコンピュータプログラム製品または他のデータの組み合わせの任意の実施形態を含み得る。
【0062】
最後に、明細書で使用される言語は、主に読みやすさと教育目的のために選択されたものであり、本発明の主題を描写または制限するために選択されていない場合がある。したがって、本開示の範囲は、この詳細な説明によってではなく、本明細書に基づいた出願で発行される請求項によって制限されることが意図されている。したがって、実施形態の開示は、添付の特許請求の範囲に記載される本開示の範囲を例示することを意図するものであり、限定することを意図するものではない。