(57)【要約】      （修正有）【課題】アプリケーションに暫定的に組み込まれた計測機能を、ソフトウェアの故障または他の種類の故障が存在する場合でも、安全に削除する。【解決手段】アプリケーションサーバ１２２、１２４が、コンピューティングデバイスとアプリケーションサーバとの間にあるそれぞれの接続７２０を介して、コンピューティングデバイスのマネージャ１０８から、一時的な動的計測をアプリケーションに追加するためのリクエストを受信する。アプリケーションサーバは、リクエストに応答して、アプリケーションの実行中に一時的な動的計測をアプリケーションに付加するとともに、それぞれの接続が予定外に切断されるかどうかを判定するコールバック７１６を、それぞれの接続を介してコンピューティングデバイスに実装する。コールバックが、それぞれの接続が予定外に切断されると判定すると、一時的な動的計測を含まない状態にアプリケーションを復元する。【選択図】図７
2011238234.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションにフェイルセーフ機能を提供するための方法であってコンピュータに実装される方法であり、
一時的な動的計測をアプリケーションに追加するためにアプリケーションサーバ（１２０，１２２，１２４，１２６，１４０，１４２，１４４，１４６）にてリクエストを受信すること；このリクエストは、コンピューティングデバイスとアプリケーションサーバとの間にあるそれぞれの接続（７２０）を介してコンピューティングデバイス（マネージャ１０８，１１４）から受信されるものである；
リクエストに応答して、アプリケーションの実行中に一時的な動的計測をアプリケーションに付加するとともに、それぞれの接続が予定外に切断されるかどうかを判定するコールバック（７１６）を、それぞれの接続を介してコンピューティングデバイスに実装すること；
それぞれの接続が予定外に切断されると判定したコールバックに応答して、一時的な動的計測を含まない状態にアプリケーションを復元すること；
を有する方法。
【請求項２】
コンピュータに実装される請求項１の方法であり、
リクエストは、一時的な動的計測をアプリケーションの少なくとも一つのクラスに付加する少なくとも一つの指令を含み、
一時的な動的計測は、アプリケーションの少なくとも一つのクラスを再定義することによってアプリケーションに付加される。
【請求項３】
コンピュータに実装される請求項２の法であり、
コールバックは、人の介入なく自動的にアプリケーションが一時的な動的計測を含まない状態に復元されるように、それぞれの接続が予定外に切断されることを自動的に判定する。
【請求項４】
コンピュータに実装される請求項３の方法であり、
一時的な動的計測が付加される前に、関連する計測が付加されていたアプリケーションのクラスを特定する指令（１２０５）の記録を保持すること；
前記復元することは、アプリケーションの未計測のバイトコードをロードすること、及び、未計測のバイトコード内の前記指令によって特定されたクラスに前記関連する計測を付加することを含む。
【請求項５】
コンピュータに実装される請求項４の方法であり、
それぞれの接続は、アプリケーションサーバにおいてソケットを介して行われ；
コールバックは、それぞれの接続が予定外に切断されることを示すイベントをソケットが生成することを判定することによってそれぞれの接続が予定外に切断されることを判定する。
【請求項６】
コンピュータに実装される請求項４または５の方法であり、
アプリケーションの未計測のバイトコードは、.ＪＡＲファイルからアクセスされる。
【請求項７】
コンピュータに実装される請求項１から６のいずれか一項の方法であり、
アプリケーションが復元される状態は、静的計測を含むが動的計測は含まない。
【請求項８】
コンピュータに実装される請求項１から７のいずれか一項の方法であり、
一時的な動的計測がアプリケーションに追加された後、それによって、先に付加された一時的な動的計測になること、アプリケーションに追加の一時的な動的計測を付加するために追加リクエストを受信すること；この追加リクエストは、コンピューティングデバイスとアプリケーションサーバとの間の他の接続を介してコンピューティングデバイスからアプリケーションサーバで受信される；
追加リクエストに応答して、アプリケーションの実行中にアプリケーションに追加の一時的な動的計測を付加すること、及び、他の接続が予定外に切断されるかどうかを判定する他のコールバックを、コンピューティングデバイスに対して実装すること；および
他の接続が予定外に切断されたことおよびそれぞれの接続が予定外に切断されないことを判定することに応答して、追加の一時的な動的計測は含まないが先に付加された一時的な動的計測を含む状態にアプリケーションを復元すること、をさらに含む。
【請求項９】
コンピュータに実装される請求項１から８のいずれか一項の方法であり、
コンピューティングデバイスにおいてタイマー（７１０）が満了する際に、一時的な動的計測が付加される前にあった状態にアプリケーションを復元するリクエストをコンピューティングデバイスから受信すること；および
アプリケーションを復元するリクエストに応答して、一時的な動的計測が付加される前にあった状態にアプリケーションを復元すること；一時的な動的計測が付加される前にあった状態は、一時的な動的計測以外の計測を含む；
をさらに備える。
【請求項１０】
コンピュータに実装される請求項１から９のいずれか一項の方法であり、
コンピューティングデバイスにおいてタイマー（７１０）が満了すると、コンピューティングデバイスに対するコールバックを終了するリクエストをコンピューティングデバイスから受信すること；
コンピューティングデバイスに対するコールバックを終了するリクエストに応答して、コンピューティングデバイスに対するコールバックを終了すること；
一時的な動的計測が付加される前にあった状態にアプリケーションを復元すること；この一時的な動的計測が付加される前にあった状態は、一時的な動的計測以外の計測を含む；
をさらに有する。
【請求項１１】
アプリケーションにフェイルセーフ機能を提供するための方法を実行するように少なくとも一つのプロセッサをプログラムするためのコンピュータ読み取り可能ソフトウェアを有しているコンピュータで読み取り可能な有体の記憶装置であり、この方法は：
第１のコンピューティングデバイス（マネージャ１０８，１１４）において、第２のコンピューティングデバイス（ＭＯＭ１０４）からリクエストを受信すること；このリクエストは、アプリケーションサーバ（１２０，１２２，１２４，１２６，１４０，１４２，１４４，１４６）を特定するとともに、アプリケーションサーバにおいて関連する一時的な動的計測をアプリケーションに付加するための少なくとも一つの指令を含む；および
リクエストに応答して、タイマー（７１０）を実装するとともに、第１の接続（７２０）を介して第１のコンピューティングデバイスからアプリケーションサーバに、関連する一時的な動的計測をアプリケーションに付加するための少なくとも一つの指令と、第１の接続が予定外に切断されるかどうかを判定するコールバック（７１６）を第１コンピューティングデバイスに実装するリクエストを提供すること；
タイマーの満了に際して、第１の接続が予定外に切断されない場合に、関連した一時的な動的計測が付加される前にあった状態にアプリケーションを復元するためのリクエストを第１の接続を介してアプリケーションサーバに提供すること、
を備える。
【請求項１２】
請求項１１の記憶装置であってコンピュータで読み取り可能な有体の記憶装置はさらに、
タイマーの満了に際して、第１の接続が予定外に切断されない場合、第１の接続を介しての第１のコンピューティングデバイスに対するコールバックを終了するリクエストを、第１の接続を介してアプリケーションサーバに提供すること、
をさらに備える。
【請求項１３】
請求項１１または１２の記憶装置であってコンピュータで読み取り可能な有体の記憶装置は、さらに：
第２のコンピューティングデバイスからのリクエストに応答して、第１と第２のコンピューティングデバイスとの間にある第２の接続（８０５）を介して第２のコンピューティングデバイスにコールバック（８１２，８１４）を実装すること；および
タイマーの満了に際して、第２のコンピューティングに対するコールバックを終了すること、
を備える。
【請求項１４】
請求項１１から１３のいずれか一項の記憶装置であってコンピュータで読み取り可能な有体の記憶装置であり、
第２のコンピューティングデバイスからのリクエストに応答して、第１と第２のコンピューティングデバイスとの間にある第２の接続（８０５）を介して第２のコンピューティングデバイスにコールバック（８１２，８１４）を実装すること；
第１のコンピューティングデバイスにおいて、第１の接続が予定外に切断されたかどうかを判定するのに第１の接続を聞き、第１の接続が予定外に切断されるとの判定に対応して、第２のコンピューティングデバイスに対するコールバックを終了する。
【請求項１５】
請求項１１から１４のいずれか一項の記憶装置であって、コンピュータで読み取り可能な有体の記憶装置であり、
アプリケーションが復元される状態は、静的計測は含むが動的計測は含まない。
【請求項１６】
第１のコンピューティングデバイスであり、
ソフトウェアの命令を格納する記憶装置；
ソフトウェアの命令が記憶装置からロードされる作業メモリ；
ネットワークインタフェース；および
ソフトウェアの命令を実行するためのプロセッサであり、このソフトウェアの命令は実行されると：
第１のコンピューティングデバイス（マネージャ１０８，１１４）において、第２のコンピューティングデバイス（ＭＯＭ１０４）からリクエストを受信すること；このリクエストは、アプリケーションサーバ（１２０，１２２，１２４，１２６，１４０，１４２，１４４，１４６）を特定し、アプリケーションサーバにおいて関連する一時的な動的計測をアプリケーションに付加するための少なくとも一つの指令を含む；および
リクエストに応答して、タイマー（７１０）を実装するとともに、第１の接続（７２０）を介して第１のコンピューティングデバイスからアプリケーションサーバに、関連する一時的な動的計測をアプリケーションに付加するための少なくとも一つの指令と、第１の接続が予定外に切断されるかどうかを判定するコールバック（７１６）を第１のコンピューティングデバイスに実装するためのリクエストと、を提供すること；および
タイマーの満了に際して、第１の接続が予定外に切断されない場合に、関連する一時的な動的計測が付加される前にあった状態にアプリケーションを復元するためのリクエストを第１の接続を介してアプリケーションサーバに提供すること；
を備える。
【請求項１７】
請求項１６の第１のコンピューティングデバイスであり、前記ソフトウェアの命令が実行される場合：
タイマーの満了に際して、第１の接続が予定外に切断されない場合、第１の接続を介して第１のコンピューティングデバイスに対するコールバックを終了するためのリクエストを第１の接続を介してアプリケーションサーバに提供する。
【請求項１８】
請求項１６または１７の第１のコンピューティングデバイスであり、前記ソフトウェアの命令が実行される場合：
第２のコンピューティングデバイスからのリクエストに応答して、第１と第２のコンピューティングデバイスとの間にある第２の接続（８０５）を介して第２のコンピューティングデバイスにコールバック（８１２，８１４）を実装し；
タイマーの満了に際して、第２のコンピューティングに対するコールバックを終了する。
【請求項１９】
請求項１６から１８のいずれか一項の第１のコンピューティングデバイスであり、このソフトウェアの命令が実行される場合：
第２のコンピューティングデバイスからのリクエストに応答して、第１と第２のコンピューティングデバイスとの間にある第２の接続（８０５）を介して第２のコンピューティングデバイスにコールバック（８１２，８１４）を実装し；
第１のコンピューティングデバイスにおいて、第１の接続が予定外に切断されるかどうかを判定するために第１の接続を聞き、第１の接続が予定外に切断されたとの判定に応答して、第２のコンピューティングデバイスに対するコールバックを終了する。
【請求項２０】
請求項１６から１９のいずれか一項の第１のコンピューティングデバイスであり、
アプリケーションが復元される状態は、静的計測を含むが動的計測は含まない。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピューティング環境でソフトウェアを監視する技術に関する。
【背景技術】
【０００２】
インターネットの存在が増長するにつれて、エクストラネット、イントラネットなどの他のコンピュータネットワークと同様に、電子商取引、教育、他の分野において多くの新しいアプリケーションをもたらした。組織は、ビジネスやその他目的を行うのにそのようなアプリケーションへの依存を深めており、期待通りの成果を確実に得るために相当の資源を投入している。このような状況のもと、様々なアプリケーションの管理技術が開発されている。
【０００３】
一つのアプローチとして、アプリケーションで呼び出される個々のソフトウェアコンポーネントに関するアプリケーションの実行データを集めることにより、アプリケーションのインフラストラクチャー（基礎構造）を監視することが挙げられる。このアプローチでは、監視されるシステムに元来、存在するエージェントを用いることができる。例えば、ソフトウェアによるインスツルメンテーション（計測）を用いることによって、呼び出される個々のコンポーネントを特定するためや、個々のコンポーネントの実行時間のような実行データを得るために、スレッドまたはプロセスがトレースされ得る。コンピュータプログラムが実行するステップの詳細なレコード、またはトレースを得ることをトレーシングという。トレースの一種類にスタックトレースがある。トレースはデバッグにおける補助の役目を果たし得る。
【０００４】
また、場合によっては、例えば、特定のパフォーマンス問題を診断するために、追加の計測がアプリケーションに付加され得る。しかし、フェイルセーフメカニズムが、追加の計測をインストールおよび削除するためには必要となる。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は、アプリケーションの実行中に一時的な計測をインストールおよび削除するためのフェイルセーフメカニズムを提供する。
【課題を解決するための手段】
【０００６】
一実施形態では、コンピュータに実装される方法であってアプリケーションにフェイルセーフ機能を提供する方法が提供される。この方法は、一時的な動的計測をアプリケーションに付加するリクエストをアプリケーションサーバで受信することを含む。そのリクエストは、コンピューティングデバイスとアプリケーションサーバとの間にあるそれぞれの接続を介してコンピューティングデバイスから受信される。この方法は、さらに、リクエストに応答して、アプリケーションの実行中に一時的な動的計測をアプリケーションに付加すること、および、それぞれの接続を介してコンピューティングデバイスに対してコールバックを実装することを含む。そのコールバックは、それぞれの接続が予定外に切断されたかどうかを判定する。この方法は、さらに、それぞれの接続が予定外に切断されたことを判定したコールバックに応答して、一時的な動的計測を含まない状態にアプリケーションを復元すること、をさらに含む。
【０００７】
他の実施形態では、コンピュータに実装される方法であってアプリケーションにフェイルセーフ機能を提供する方法は、コレクタのような第１のコンピューティングデバイスにおいて、第２のコンピューティングデバイスからリクエストを受信することを含む。そのリクエストは、アプリケーションサーバを特定し、アプリケーションサーバにおいて関係する一時的な動的計測をアプリケーションに付加するための指令を含む。この方法は、さらに、リクエストに応答して、タイマーを実装すること、および、第１の接続を介して第１のコンピューティングデバイスからアプリケーションサーバに、関連付けられた一時的な動的計測をアプリケーションに付加する指令と、第１のコンピューティングデバイスに対してコールバックを実装するためのリクエストを提供することをさらに含む。そのコールバックは、第１の接続が予定外に切断されるかどうかを判定する。この方法は、さらに、タイマーの満了に際して、第１の接続が予定外に切断されない場合に、関連付けられた一時的な動的計測が付加される前にあった状態にアプリケーションを復元するリクエストを第１の接続を介してアプリケーションサーバに提供することを含む。
【０００８】
別の実施形態では、アプリケーションサーバにおいて、アプリケーションにフェイルセーフ機能を提供するための方法を実行するために少なくとも一つのプロセッサでプログラムするために具現化されてコンピュータで読み取り可能なソフトウェアを有しているコンピュータで読み取り可能な有体の記憶装置が提供される。この方法は、コンピューティングデバイスとの接続を確立すること、及び、アプリケーションに一時的な動的計測を付加し、コールバックオブジェクトを呼び出すリクエストを、接続を介してコンピューティングデバイスから受信すること、を含む。この方法は、さらに、リクエストに応答して、アプリケーションの実行中にアプリケーションに一時的な動的計測を付加することおよびコールバックオブジェクトを呼び出すことを含む。そのコールバックオブジェクトは、接続を監視することによってコンピューティングデバイスにコールバックを実装する。この方法は、さらに、接続が終了したとコールバックオブジェクトが判定した場合、一時的な動的計測を含まないような状態にアプリケーションを復元することを含む。
【０００９】
メソッドに対応して、実行する本明細書で提供される方法が実現される命令をエンコードした記憶媒体を含むシステムおよびコンピュータ若しくはプロセッサで読み取り可能な記憶装置が提供される。
【図面の簡単な説明】
【００１０】
【図１】管理されたアプリケーションを含むシステムを示す。
【図２】図１のネットワークのコンピュータシステムを示す。
【図３】アプリケーションに一時的な計測を適用するためのフェイルセーフ方法の一例の概要を示す。
【図４Ａ】マネージャとエージェントに関与している図３のステップ３１０の実施例を示す。
【図４Ｂ】マネージャ群の一つのマネージャ（ＭＯＭ）、マネージャおよびエージェントに関与している図３のステップ３１０の実施例を示す。
【図５Ａ】故障が検出されない場合である、マネージャおよびアプリケーションサーバに関与している図３のステップ３２０の流れの例を示す。
【図５Ｂ】故障が検出されない場合である、ＭＯＭ、マネージャおよびアプリケーションサーバに関与している図３のステップ３２０の流れの例を示す。
【図５Ｃ】故障がマネージャとアプリケーションサーバとの間の接続で検出される場合である、ユーザインタフェース、マネージャおよびアプリケーションサーバに関与している図３のステップ３２５の流れの例を示す。
【図５Ｄ】故障がマネージャとユーザインタフェースとの間の接続で検出される場合である、ユーザインタフェース、マネージャおよびアプリケーションサーバに関与している図３のステップ３２５の流れの例を示す。
【図５Ｅ】故障がマネージャとアプリケーションサーバとの間の接続で検出される場合である、ＭＯＭ、ユーザインタフェース、マネージャおよびアプリケーションサーバに関与している図３のステップ３２５の流れの例を示す。
【図５Ｆ】故障がマネージャとＭＯＭとの間の接続で検出される場合である、ＭＯＭ、ユーザインタフェース、マネージャおよびアプリケーションサーバに関与している図３のステップ３２５の流れの例を示す。
【図５Ｇ】故障がユーザインタフェースとＭＯＭとの間の接続で検出される場合である、ＭＯＭ、ユーザインタフェース、マネージャおよびアプリケーションサーバに関与している図３のステップ３２５の流れの例を示す。
【図６】図３のステップ３３０の実施例を示す。
【図７】ユーザインタフェース、マネージャおよびエージェントに関与している図３および４Ａの処理の実施例を示す。
【図８Ａ】１つのエージェントに関与している一時的な計測の１項目に適した、ＭＯＭ、マネージャおよびエージェントに関与している図３の処理におけるコールバックの使用の実施例を示す。
【図８Ｂ】一時的な計測の２項目に適した、ＭＯＭ、マネージャおよび１つのエージェントに関与している図３の処理におけるコールバックの使用の実施例を示す。
【図８Ｃ】１つのエージェントに関与している一時的な計測の２項目に適した、ＭＯＭ、マネージャおよび２つのエージェントに関与している図３の処理におけるコールバックの使用の実施例を示す。
【図８Ｄ】２つのエージェントに関与している一時的な計測の２項目に適した、ＭＯＭ、２つのマネージャおよび２つのエージェントに関与している図３の処理におけるコールバックの使用の実施例を示す。
【図９】実行パス内のコンポーネントの呼び出し関係を示す。
【図１０】図９の呼び出し関係に基づく呼び出しスタックの位置に対する時間のグラフを示す。
【図１１】Java（登録商標）実行環境を示す。
【図１２Ａ】静的計測のための処理フローの例としてJavaベースのものを示す。
【図１２Ｂ】静的計測のための処理フローの例として.NETベースのものを示す。
【図１３】ソフトウェアを計測するための処理フローの例を示す。
【図１４】パフォーマンスデータに呼応したコンポーネント間の階層的関係を示すユーザインタフェース表示を示す。
【発明を実施するための形態】
【００１１】
本発明は、アプリケーションの実行中に一時的な計測をインストールおよび削除するためのフェイルセーフメカニズムを提供する。
【００１２】
最初に、アプリケーションのようなソフトウェアは、メソッドのような計測されたコンポーネントのベースラインの規定（セット）によって設定される。通常、オーバーヘッドコストを最小限に抑えるために選択的に慎重にアプリケーションに計測が適用される。開発者は、最適な計測パッケージを開発するのにこれまでの経験に依存する。時間とともに、経験が得られ、様々な問題またはアプリケーションの改善のための領域が特定され得る。例えば、パフォーマンス問題を診断するために、様々な状況で付加的な計測をアプリケーションに展開することが可能である。しかし、例えば、アプリケーションを実行するアプリケーションサーバのように、コンピューティングデバイスから離れている遠隔のユーザインタフェースから、手動で計測をロールバックすることを不可能にする、アプリケーションに対する通信リンクの中断、コンピューティングデバイスの故障、ソフトウェアの故障または他の種類の故障が存在する場合でさえも、一時的に適用されることが企図された付加的な計測が人の介入なしに自動的に削除されることを確実にするフェイルセーフメカニズムが必要となる。そのようなフェイルセーフメカニズムなしでは、一時的な計測は、アプリケーションのパフォーマンスを予定外にひどく損なう可能性がある。例えば、一時的な計測は、全てのクラスを計測するようなコマンドを意図せず含む可能性があり、そのようなコマンドは計算上の過剰な負担をもたらす。
【００１３】
実施例では、フェイルセーフメカニズムは、コンピューティングデバイス上のアプリケーションのエージェント、一つまたはそれ以上のマネージャのコンピューティングデバイスおよび／またはユーザインタフェース／ワークステーションの間でコールバックを使用して提供される。コールバックは、コンピューティングデバイスの間に確立されている接続を監視する。例えば通信リンクの故障または他の問題により、接続が予定外に失われるのであれば、コールバックは終了される。同様に、接続の計画的な終了も、コールバックが終了されることに繋がる。また、一つのコールバックの終了は、一つまたはそれ以上の他のコールバックに繋がることがあり、最終的にエージェントに問題を通知されることになる。エージェントに対するコールバックが終了するとき、追加の計測が付加される前にあった状態にアプリケーションを戻すロールバックプロシージャが実装される。
【００１４】
図１は、異なったコンピュータシステムがマネージャにデータを提供するネットワークを示す。似た番号の付いた要素が図の中で互いに対応している。コンピュータシステムは、何通りかにアレンジされ得る。あるアプローチでは、１セットのアプリケーションサーバが、アプリケーションと、共通のマネージャのコンピューティングデバイスに報告を返すエージェントソフトウェアとを実行する。別のアプローチでは、各々がそれぞれのマネージャのコンピューティングデバイスに報告を返し、このそれぞれのマネージャのコンピューティングデバイスがマネージャのマネージャ（ＭＯＭ）と呼ばれるより高いレベルのマネージャのコンピューティングデバイスに報告を返す複数セットのアプリケーションサーバがある。マネージャの階層における追加のレベルも同様に提供され得る。各マネージャまたはＭＯＭコンピューティングデバイスは、例えば、情報を提供したり命令を受けたりするため、関連付けられたユーザインタフェース／ワークステーションと通信することができる。
【００１５】
例示のシステム１００は、アプリケーションサーバ１２２、１２４および１２６を含んでいるアプリケーションサーバのセット１２０およびそれぞれのエージェントを含む。アプリケーションサーバ１２２のエージェント１２３が示されている。各アプリケーションサーバは、一つまたはそれ以上のエージェントを持つことが可能である。一つのアプローチでは、別のエージェントがアプリケーションのインスタンスごとに提供される。アプリケーションサーバは、望ましい機能を実現するためのコードを実行するのに適したプロセッサを有するあるタイプのコンピュータシステムの例である。アプリケーションサーバは、異なったアプリケーションを実行でき、または同じアプリケーションの別々のインスタンスを実行することができる。アプリケーションサーバは、互いに離れて位置することができ、または同じ場所に位置することもできる。アプリケーションサーバのセット１２０は、この例では、ローカルのマネージャコンピュータ１０８と通信している。マネージャコンピュータ１０８は、代わりにアプリケーションサーバのセット１２０から離れることが可能で、そのような場合にはこれらの間の通信はネットワーククラウド１３０を介して行われ得る。
【００１６】
実施例は、さらに、アプリケーションサーバ１４２、１４４および１４６を含んでいるアプリケーションサーバのセット１４０およびそれぞれのエージェントを含む。アプリケーションサーバ１４２のエージェント１４３が示される。アプリケーションサーバのセット１４０は、この例では、ローカルのマネージャコンピュータ１１４と通信している。
【００１７】
例えば、Webベースの電子商取引アプリケーションなどの企業のアプリケーションを実行している会社は、負荷分散のために一つの場所で複数のアプリケーションサーバを使用するであろうが、その一方でフェイルセーフ対策として、いろいろな場所でアプリケーションサーバを用いている。ユーザ、例えば、個々のWebブラウザ１５２、１５４および１５６を含んでいるWebブラウザのセット１５０からのリクエストは、インターネットのようなネットワーククラウド１３０を介して受信され、セット１２０または１４０における任意のアプリケーションサーバに送られ得る。
【００１８】
Webブラウザ１５０のセットは、通常、図示していないインターネットサービスプロバイダーを介してネットワーククラウド１３０にアクセスする。アプリケーションサーバ上で実行するエージェントソフトウェアは、ある可能なアプローチで、それぞれのアプリケーションサーバ上で実行中に、アプリケーション、ミドルウェアまたはその他のソフトウェアからの情報を集める。例えば、そのような情報は、計測を用いることによって得ることができ、その一例は、バイトコードの計測である。しかしながら、集められたデータは他の方法で得ることができる。エージェントは、監視するコンピュータシステムに元来存在してデータの取得ポイントを提供する。エージェントは、マネージャ１０８および１１４と通信してデータをまとめ最適化する。
【００１９】
監視を実行するソフトウェアを計測するのに、様々なアプローチが知られている。例えば、最初に述べたように、トレーシングはソフトウェアの実行を追跡するために用いることができる。トレーシングの例が、”Transaction Tracer”と題する米国特許出願公開番号２００４／００７８６９１（２００４年４月２２日公開）に記載されている。その内容は参照により本明細書に組み込まれる。ここで述べられているアプローチにおいては、監視すべきアプリケーションのオブジェクトコードまたはバイトコードが計測され、例えばプローブにより変更される。アプリケーションのジョブまたは他のロジックを変更することなくアプリケーションについての特定の情報をプローブが測定する。一旦、プローブがアプリケーションのバイトコードにインストールされると、管理されたアプリケーションと呼ばれる。エージェントソフトウェアは、プローブからのパフォーマンスデータのような情報を受信し、その情報を、例えばマネージャ１０８または１１４において、別の処理で通信することがある。また、情報が異常状況を示すか否かを判定するなど、情報をローカルで処理する。例えば、プローブからの情報は、トランザクションまたは他の実行フローの開始や停止の回数、またはトランザクション／実行フロー内の個々のコンポーネントの開始や停止の回数などのパフォーマンスデータを示す場合がある。この情報は、それが範囲内にあるかどうかを判定するために予め決められた基準と比較される。もし情報が範囲内にない場合には、エージェントは適切なトラブルシューティングが実行できるようにこの事実をマネージャに報告することができる。エージェントは、それぞれが関連付けられているローカルアプリケーションサーバ上でソフトウェアが実行中であることを通常認識している。
【００２０】
マネージャ１０８および１１４は、エージェントから受信したデータに基づいて情報を表示するため、それぞれ、ユーザインタフェース１０６または１１６と通信する分離したコンピューティングデバイス上に提供され得る。ユーザインタフェースは、別のコンピューティングデバイスを表す場合がある。図１０および１１のユーザインタフェース表示の例を参照されたい。マネージャ１０８および１１４は、またエージェントから受信したデータを格納するため、データベース１１０および１１２に、それぞれアクセスすることができる。提示された例では、アプリケーションサーバは、ネットワーククラウド１３０にアクセスすることなく、それぞれのマネージャと通信することができる。例えば、通信は、ローカルエリアネットワークを介して行われる。他の設計では、マネージャは、ネットワーククラウド１３０を介して複数のアプリケーションサーバのエージェントからデータを受信することができる。例えば、大きな組織は、セントラルネットワークオペレーションセンタを運用する。そこでは、一つまたはそれ以上のマネージャが、地理的に異なる場所に分散している複数のエージェントからデータを取得する。説明すると、Webベースの電子商取引企業では、顧客の注文を受ける地理的に異なる場所にあるサーバからエージェントのデータを取得することがある。支払いを処理するサーバ、倉庫で在庫を調べたり、受注を受けたりするサーバなどである。図９も参照されたい。マネージャおよびユーザインタフェースディスプレィは、企業の本社の場所で提供され得る。必ずしも、Webベースまたは小売、若しくはその他の販売に関する必要はなく、他のアプリケーションにおいて同様にシステムを管理するためにエージェントとマネージャを利用することができる。例えば、銀行では、小切手の処理やクレジットの口座用にアプリケーションを使用することがある。また、上述した複数コンピュータのシステムアレンジに加えて、一つまたはそれ以上のエージェントによって単一のコンピュータシステムが同様に監視されることがある。
【００２１】
ＭＯＭ１０４が、例えばコマンドを提供したりデータを受信したりするために、マネージャ１０８および１１４と通信する。ＭＯＭ１０４は、また、データを提供したりユーザコマンドを受信したりするために、例えば、別のコンピューティングデバイス上のユーザインタフェース１０２と通信し得る。ＭＯＭは、下位レベルのマネージャのためにセントラルマネージャとして機能し、ユーザインタフェース１０２とマネージャとの間の通信を調整する。
【００２２】
図２は、図１のネットワークのコンピュータシステムを示す。コンピュータシステム２００は、図１に関連して説明したように、Webブラウザ、アプリケーションサーバ、マネージャ、ＭＯＭおよび／またはユーザインタフェースの一つとして使われ得るシステムを簡略化して表したものである。コンピュータシステム２００は、ハードディスクまたはポータブルメディアのような記憶装置２１０、他のコンピュータシステムと通信するためのネットワークインタフェース２２０、ソフトウェアの命令を実行するためのプロセッサ２３０、例えば、記憶装置２１０からロードされた後にソフトウェアの命令を格納するためのＲＡＭのような作業メモリ２４０およびユーザインタフェースディスプレィ２５０を含むものである。記憶装置２１０は、ここで説明した機能を提供するためのメソッドを実行するプロセッサ２３０をプログラムするために具体化されているプロセッサの読み取り可能なコードを有する、プロセッサにより読み取り可能な記憶装置と考えることができる。ユーザインタフェースディスプレィ２５０は、一つまたはそれ以上のエージェントから受信したデータに基づいて、人間のオペレータに情報を提供することが可能である。ユーザインタフェースディスプレィ２５０は、グラフィカルまたは表形式のような既知の任意の表示方式を使用することができる。画面上の表示に加え、プリンタからのハードコピーなどの出力も提供することができる。
【００２３】
また、ここで説明した機能は、ハードウェア、ソフトウェアまたはハードウェアとソフトウェアの両方の組み合わせを使用して実装されてもよい。ソフトウェアについては、一つまたはそれ以上のプロセッサをプログラムするために具体化されているプロセッサの読み取り可能なコードを有する、一つまたはそれ以上の有体のプロセッサにより読み取り可能な記憶装置を使用することができる。プロセッサにより読み取り可能な有体の記憶装置は、揮発性および非揮発性メディア、リムーバブルおよび非リムーバブルメディアなどのコンピュータ読み取り可能なメディアを含むことが可能である。例えば、コンピュータにより読み取り可能な有体の媒体には、コンピュータにより読み取り可能な命令、データ構造やプログラムモジュールまたは他のデータといった情報を記憶するために、任意の方法や技術でインプリメントされた揮発性、不揮発性、リムーバブル、非リムーバブルの媒体が含まれ得る。コンピュータにより読み取り可能な有体の媒体の例としては、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、または他のメモリ技術、ＣＤ−ＲＯＭ、デジタルバーサタイルディスク（ＤＶＤ）、または他の光学ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、他の磁気記憶装置、または所望の情報を格納したり、コンピュータによってアクセスしたりすることに用いられる他の媒体などがある。他の実施形態においては、一部またはすべてのソフトウェアは、カスタムＩＣ、ゲートアレイ、ＦＰＧＡ、ＰＬＤや特殊用途向けプロセッサなど、専用のハードウェアに置き換えることができる。一実施形態では、一つまたはそれ以上の実施形態を実装するソフトウェア（記憶装置に格納されている）は、一つまたはそれ以上のプロセッサをプログラムするために用いられる。一つまたはそれ以上のプロセッサは、一つまたはそれ以上の有体のコンピュータにより読み取り可能な媒体／記憶装置、周辺機器および／または通信インタフェースと通信することができる。
【００２４】
図３は、アプリケーションに一時的な計測を適用するためのフェイルセーフの方法の例の概要を示す。ステップ３００は、アプリケーションに静的計測を適用することを含む。詳細については、図１２Ａ、１２Ｂおよび１３を参照されたい。ステップ３０５は、静的計測からアプリケーションのパフォーマンスデータを取得することを含む。アプリケーションが実行されると、計測がそれぞれのマネージャに報告し、アプリケーションのパフォーマンスが監視される。詳細については、例えば図１４の領域１４０６を参照されたい。ステップ３１０は、アプリケーションに、動的に一時的な計測を適用することを含む。上述したように、追加の計測は、例えばパフォーマンス問題を診断するためにアプリケーションに一時的に適用される。そのような計測は、例えばアプリケーションの実行中に、アプリケーションの休止時間（ダウンタイム）をなくすように、動的に適用される。詳細については、例えば図４Ａおよび４Ｂを参照されたい。一時的な計測は、例えば、数分または数時間など、決められた期間に適用することができ、それはタイマー処理によって実施される。期間の終了は、もし一時的な計測が依然としてアプリケーション内に存在し手動で削除されていないのならば、一時的な計測が自動的に削除される満了時間であり、そうでなければ既に削除されている。これは、フェイルセーフメカニズムとして、一時的な計測が特定の時間／日よりも前には、延長しないことを保証する。
【００２５】
さらに、場合によっては、一時的な計測の異なった項目またはユニットは、同時にまたは異なった時間に、アプリケーションに付加されることができ、別々の満了時間を持ち得ることに留意されたい。例えば、アプリケーションのクラスの一つのセットは、ある時点で付加された一時的な計測を持つことができ、１番目の満了時間を持つ一方で、アプリケーションのクラスの別のセットは、別の時点で付加された一時的な計測を持つことができ、異なった２番目の満了時間を持つ。
【００２６】
ステップ３１５は、静的かつ一時的な計測からアプリケーションのパフォーマンスデータを取得することを含む。一旦、一時的な計測が適用されると、以前に使用可能な静的計測からのパフォーマンスデータに加えて、一時的な計測からのパフォーマンスデータが使用可能となる。
【００２７】
この時点で、２つの流れのうちの１つが生じ得る。ステップ３２０では、期間中に故障は検出されない。これは、例えばアプリケーションとの通信リンクに、遠隔のユーザインタフェースからのアプリケーションの計測を手動でロールバックすることを不可能な状態にするような中断、コンピューティングデバイスの故障、ソフトウェアの故障または他の種類の故障がないことを示し得る。故障は、アプリケーションサーバ、マネージャのコンピュータ、ＭＯＭのコンピュータおよびユーザインタフェース／ワークステーションのコンピュータを含む一つまたはそれ以上のコンピューティングデバイスによって検出され得る。詳細については、例えば、図５Ａおよび５Ｂを参照されたい。
【００２８】
２つ目の流れでは、ステップ３２５で故障が検出される。詳細については、例えば、図５Ｃから５Ｇを参照されたい。
【００２９】
どちらの場合でも、ステップ３３０は、一時的な計測が付加される前にあった状態にアプリケーションを戻すことを含む。このステップは、一時的な計測をロールバックすること、または削除することを含み得る。この状態は、計測がアプリケーションに適用される状態を表すが、アプリケーションによって維持される如何なる他の設定またはデータを必ずしも表すわけではない。これは、一時的な計測を含まない状態にすることができる。ステップ３３０は、故障が検出されないときよりも故障が検出されるときの方が早く実行される。
【００３０】
一時的な計測の異なった項目が付加されるとき、故障は全ての項目よりも少ない項目に関係し得るし、その場合はロールバックもまた全ての項目よりも少ない項目に関与することに留意されたい。例えば、もし一時的な計測の項目ＡおよびＢ（例えば、Ａが一つまたはそれ以上のクラスの第１セットを表し、Ｂが一つまたはそれ以上の第２セットを表す）が付加され、故障が項目Ｂのみに関係するのであれば、項目Ａは依然としてアプリケーション内に含まれるが、項目Ｂは含まれないように計測がロールバックされ得る。また、一時的に計測を付加することに加えて、満了時間に関連付けられないように、動的かつ恒久的に計測を付加することも可能である。この場合、ロールバックは恒久的な計測を正しい位置に残すことができる。
【００３１】
図４Ａは、マネージャとエージェントに関与している図３のステップ３１０の実施例を示す。図７の流れの例も参照されたい。一時的な計測、即ち、限られた期間の間にのみアクティブにされるようになっている計測、を適用するために、ステップ４００は、ユーザインタフェースに対してコールバックを設定するというリクエストとともに、一時的な計測のための一つまたはそれ以上の指令をユーザインタフェースからマネージャに提供すること含む。例えば、一つまたはそれ以上の指令は、ユーザインタフェース１０６からマネージャ１０８にアプリケーションサーバ１２０の一つまたはそれ以上のアプリケーションを計測するために提供されることが可能で、またはこの指令は、ユーザインタフェース１１６からマネージャ１１４にアプリケーションサーバ１４０の一つまたはそれ以上のアプリケーションを計測するために提供されることが可能である（図１）。指令は、例えば、ユーザインタフェースを介してユーザコマンドによって提供され得る。指令は、ルールであり、計測するアプリケーションのクラスを特定することができ、例えば、計測を実行するエージェントを特定することも可能である。指令は、エージェントの名前を特定するパラメータを含む計測を適用するリクエスト内に存在し得る。エージェントの名前は、エージェントのＩＰアドレスおよびエージェントが監視するアプリケーションサーバに、関連付けられているキャッシュされた情報のキーとなり得る。
【００３２】
一般的に、２つのコンピューティングデバイスが通信するために、持続する接続がそれらの間に確立され得る。この接続は、ＴＣＰのようなコネクション指向のトランスミッションプロトコルを使用してもよい。特に、コンピューティングデバイス間の接続は、コンピューティングデバイスのソケットの間に提供され得る。ソケットは、コンピュータネットワークを横断する双方向のプロセス間通信のフローの終点となり得る。また、ソケットは、ローカルおよびリモートのＩＰアドレスとポート番号との組み合わせに基づいて、適切なアプリケーションのプロセスまたはスレッドに受信データのパケットを送ることができる。ソケットは、（ａ）コンピューティングデバイスを特定するＩＰアドレスおよび（ｂ）アプリケーションプログラムのプロセスまたはスレッド（例えばコールバック）に対応づけられているポート、を含んでいるソケットアドレスを持つことができる。特に、ソケットは、（ａ）例えば、トランスポートプロトコル（例えば、ＴＣＰ、ＵＣＰ）、生のＩＰまたはその他のプロトコル、（ｂ）ローカルＩＰアドレスおよびポート番号を含むローカルソケットアドレス、および（ｃ）ＴＣＰサーバが同時に複数のクライアントに供するときに確立されたＴＣＰソケットの場合のリモートソケットアドレス、の組み合わせによって特徴づけられる。コンピューティングデバイスが接続を介して通信する場合、この接続は、ＴＣＰ／ＩＰ、ＨＴＴＰ、ＨＴＴＰまたはＴＣＰトンネリング、または他のアプローチを使用することができる。
【００３３】
または、一時的な計測の異なった項目に対する指令が異なる時間もしくはそれ以外は異なるリクエストで提供される場合、別々の接続およびソケットが各項目に対するコンピューティングデバイスによって別々に提供され、監視され得る。
【００３４】
ステップ４００に応答して、ステップ４０５では、マネージャがユーザインタフェースに対してコールバックを設定する。コールバックは、マネージャのコンピューティングデバイスとユーザインタフェースのコンピューティングデバイスとの間の接続を監視するためにマネージャにおいて実行される実行可能なコードであってよい。例えば、コンピューティングデバイスにおけるコールバックのコードは、接続が、アクティブか、または既に終了されたかもしくは切断されたか否かを判定するため、別のコンピューティングデバイスとの接続を提供するために使用されるソケットを、継続的に監視し得る。コールバックは、接続の一端側にコールバックハンドラ、そして接続の他端側にコールバックリスナーといったコードを含むことができる。
【００３５】
ステップ４１０では、マネージャは、マネージャに対してコールバックを設定するというリクエストに応じて一つまたはそれ以上の指令を特定されたエージェントおよびアプリケーションサーバに伝える。マネージャは、またユーザインタフェースからのリクエストにおいて特定された期間や満了日に基づいてタイマーを設定する。マネージャとエージェントとの間の通信は、前述したように、ソケットを介した接続を確立することに関与し得る。
【００３６】
ステップ４０５でマネージャがユーザインタフェースに対してコールバックを設定するのと同様の方法で、ステップ４１５での応答において、エージェントはマネージャに対してコールバックを設定する。ステップ４２０において、一つまたはそれ以上の指令に基づいて、例えば図１３に関連して詳細に述べたように、エージェントは、アプリケーションの実行中にアプリケーションへの一時的な計測を付加する。
【００３７】
図４Ｂは、マネージャのマネージャ（ＭＯＭ）、マネージャおよびエージェントに関与している図３のステップ３１０の実施例を示す。図４Ａの例は、３つのコンピューティングデバイス、即ちユーザインタフェース、マネージャおよびアプリケーションサーバを含む。図４Ａと比較すると、この例は、ユーザインタフェースとマネージャとの間にＭＯＭのコンピューティングデバイスを付加的に含む。図８Ａ−Ｄの流れの例を参照されたい。ステップ４３０は、一時的な計測のための一つまたはそれ以上の指令（例えば、計測するためのアプリケーションのクラスを特定することによって、およびエージェントを特定することによって）を、ユーザインタフェースからＭＯＭに、ユーザインタフェースに対してコールバックを設定するというリクエストに応じて提供する。ステップ４３５で、ＭＯＭは、ユーザインタフェースに対してコールバックを設定する。ステップ４４０では、ＭＯＭは、ＭＯＭに対してコールバックを設定するというリクエストに応じて一つまたはそれ以上の指令を特定されたエージェントのマネージャに伝える。ステップ４４５において、マネージャはＭＯＭに対してコールバックを設定する。ステップ４５０で、マネージャは、マネージャに対してコールバックを設定するというリクエストに応じて一つまたはそれ以上の指令をエージェントに伝える。マネージャは、タイマーも設定する。ステップ４５５において、エージェントはマネージャに対してコールバックを設定する。ステップ４６０において、エージェントは、アプリケーションが実行中に、一つまたはそれ以上の指令に基づいてアプリケーションに一時的な計測を付加する。
【００３８】
例えば、アプリケーションサーバ１２０の一つまたはそれ以上のアプリケーションを計測するため、ユーザインタフェース１０６からＭＯＭ１０４に、そしてＭＯＭ１０４からマネージャ１０８に、および／または、アプリケーションサーバ１４０の一つまたはそれ以上のアプリケーションを計測するためマネージャ１１４に、指令が提供され得る（図１）。
【００３９】
図５Ａは、故障が検出されない場合に、マネージャおよびアプリケーションサーバに関与している図３のステップ３２０の流れの例を示す。ステップ５００では、マネージャにおいてタイマーが満了になる。この時点でマネージャは、接続の切断を検出していない。この時間は、一時的な計測をアクティブにすべき期間を定義していることを想起されたい。マネージャが第１の接続を介してユーザインタフェースに対してコールバックを持ち、アプリケーションサーバが第２の接続を介してマネージャに対してコールバックを持つ場合、両方の接続が、一時的な計測が意図的にアクティブにされるべき期間中ずっとアクティブであり続けるときに、この状態が発生する。
【００４０】
また、マネージャまたはユーザインタフェースの障害のような他の障害は発生しない。ユーザインタフェースのコンピューティングデバイスの障害は、第１の接続を終了させる結果になるであろうし、マネージャは、それによって第１の接続が切断されていることを検出することに留意されたい。同様に、アプリケーションサーバの障害は、第２の接続を終了させる結果になるであろうし、マネージャは、それによって第２の接続の障害を検出する。
【００４１】
期間の満了時には、マネージャは、ステップ５０２においてユーザインタフェースとの接続を、ステップ５０４においてアプリケーションサーバとの接続を終了する。接続は、異なった方法でマネージャによって終了されることがある。あるアプローチでは、ステップ５０２においてＴＣＰ接続が用いられる場合、マネージャにおける処理が、ユーザインタフェースとのセッションはもはや必要ではないことを示すシグナルをそのＴＣＰ層に送る。マネージャは、マネージャが接続の終了を望むことを示すメッセージをユーザインタフェースに送り、ユーザインタフェースがそのメッセージに対する肯定応答をする。メッセージに呼応して、ユーザインタフェースの準備ができている場合には、ユーザインタフェースにおける処理は、セッションがもはや必要はないことを示すシグナルをそのＴＣＰ層に送るとともに、対応するメッセージがマネージャに送られて、マネージャが肯定応答をする。ユーザインタフェースはこの肯定応答を受けて接続を終了し、マネージャは肯定応答を出した後、特定の時間に接続を終了する。この接続の終了は、ソケットを終了することを含み得る。
【００４２】
同様に、ステップ５０４において、マネージャにおける処理が、アプリケーションサーバとのセッションはもはや必要ではないことを示すシグナルをそのＴＣＰ層に送ることができる。マネージャは、マネージャが接続の終了を望むということをアプリケーションサーバに伝えるためにメッセージを送り、アプリケーションサーバはそのメッセージに肯定応答をする。応答においては、アプリケーションサーバの準備ができている場合には、アプリケーションサーバにおける処理は、セッションがもはや必要はないことを示すシグナルをそのＴＣＰ層に送るとともに、対応するメッセージがマネージャに送られて、マネージャが肯定応答をする。アプリケーションサーバはこの肯定応答を受けて接続を終了し、マネージャは肯定応答を出した後、特定の時間に接続を終了する。
【００４３】
ステップ５０６においては、エージェントは終了した接続を検出する。例えば、エージェントにおけるコールバックのコードは、アプリケーションサーバにおけるソケットが終了したときを検知することによって、いつ接続が終了したかを検出することができる。
【００４４】
ステップ５０８においては、マネージャとの終了した接続を検出することに応答して、エージェントが、図３、６および１３のステップ３３０に関連して説明したように、一時的な計測のロールバックを始める。
【００４５】
接続の終了は、故障状態による接続の予定外の切断に反して、接続の正常な終了を表していることに留意されたい。
【００４６】
図５Ｂは、故障が検出されない場合に、ＭＯＭ、マネージャおよびアプリケーションサーバに関与している図３のステップ３２０の流れの例を示す。ステップ５１０で、マネージャによる接続の切断がないことまたは他の故障がないことが検出されたことを示し、マネージャおいてタイマーが満了になる。ステップ５１２で、マネージャがＭＯＭとの接続を終了する。接続の終了は、例えば、前述したように進めることができる。応答では、ステップ５１４において、ＭＯＭはユーザインタフェースとの接続を終了する。図８Ａ−８Ｄも参照されたい。同様に、ステップ５１６において、マネージャがアプリケーションサーバとの接続を終了する。ステップ５１８においては、エージェントは終了した接続を検出する。例えば、エージェントにおけるコールバックのコードは、アプリケーションサーバにおけるソケットが終了する時を検知することによって、接続がいつ終了されるのかを検出することができる。ステップ５２０においては、マネージャとの終了した接続を検出することに応答して、エージェントが、一時的な計測のロールバックを始める。
【００４７】
図５Ｃは、ユーザインタフェース、マネージャおよびアプリケーションサーバを含む図３のステップ３２５の流れの例を示す。これは、マネージャとアプリケーションサーバとの間の接続において故障が検出される場合である。ステップ５３０では、マネージャとユーザインタフェースとの間の接続は切断されていない。しかし、ステップ５３２で、エージェントがマネージャとの接続の切断を検出する。このことは、マネージャにおけるタイマーの満了前に起きるのであり、それは、接続の切断が予定外のことであってある種の故障に起因するものである。例えば、エージェントにおけるコールバックのコードは、アプリケーションサーバにおけるソケットが終了する時を検知することによって、接続がいつ終了されるのかを検出する。接続が予定外に切断される場合には、例外イベントまたはその他のエラーは、接続に関与した一方または双方のコンピューティングデバイスによって検出され得る。例えば、エージェントは、それぞれの接続が切断されたことを示すイベントをソケットが生成することを判定することによって、それぞれの接続が切断されることを判定するのにコールバックを使用することが可能である。
【００４８】
ステップ５３４において、マネージャとの接続の切断を検出することに応答して、エージェントは、図３のステップ３３０に関連して説明したように、一時的な計測のロールバックを始める。
【００４９】
図５Ｄは、ユーザインタフェース、マネージャおよびアプリケーションサーバを含む図３のステップ３２５の流れの例を示す。これは、マネージャとユーザインタフェースとの間の接続で故障が検出される場合である。この流れでは、ステップ５４０において、マネージャとエージェントとの間の接続は切断されていない。しかし、ステップ５４２では、マネージャはユーザインタフェースとの接続の切断を検出することを含む。これは、一時的な計測のためのマネージャにおけるタイマーの満了前である。ステップ５４２に応答して、マネージャは、ステップ５４４でアプリケーションサーバとの接続を終了する。エージェントは、５４６において接続の終了を検出する。ステップ５４８において、マネージャとの接続の終了を検出することに応答して、エージェントは、図３のステップ３３０に関連して説明したように、一時的な計測のロールバックを始める。
【００５０】
一つの可能な実装において、接続の終了または切断がエージェントによって検出されるか否かにかかわらず、ロールバックは本質的に同じである。
【００５１】
図５Ｅは、ＭＯＭ、ユーザインタフェース、マネージャおよびアプリケーションサーバを含む図３のステップ３２５の流れの例を示す。これは、マネージャとアプリケーションサーバとの間の接続で故障が検出される場合である。この流れでは、ステップ５５０において、ＭＯＭとユーザインタフェースとの間、およびＭＯＭとマネージャとの間の接続は、切断されていない。しかし、ステップ５５２は、エージェントが、ユーザインタフェースとの接続の切断を検出することを含む。これは、一時的な計測のためのマネージャにおけるタイマーの満了前である。ステップ５５４において、マネージャとの接続の切断を検出することに応答して、エージェントは、図３のステップ３３０に関連して説明したように、一時的な計測のロールバックを始める。
【００５２】
図５Ｆは、ＭＯＭ、ユーザインタフェース、マネージャおよびアプリケーションサーバを含む図３のステップ３２５の流れの例を示す。これは、マネージャとＭＯＭとの間の接続で故障が検出される場合である。この流れでは、ステップ５６０において、ＭＯＭとユーザインタフェースとの間、およびマネージャとアプリケーションサーバとの間の接続は、切断されていない。しかし、ステップ５６２は、マネージャが、ＭＯＭとの接続の切断を検出することを含む。これは、一時的な計測のためのマネージャにおけるタイマーの満了前である。ステップ５６４において、接続の切断を検出することに応答して、マネージャがアプリケーションサーバとの接続を終了する。応答では、ステップ５６６において、アプリケーションサーバにおけるエージェントは、マネージャとの接続の終了を検出する。ステップ５６８において、マネージャとの接続の終了を検出することに応答して、エージェントは、図３のステップ３３０に関連して説明したように、一時的な計測のロールバックを始める。
【００５３】
図５Ｇは、ＭＯＭ、ユーザインタフェース、マネージャおよびアプリケーションサーバを含む図３のステップ３２５の流れの例を示す。これは、ユーザインタフェースとＭＯＭとの間の接続で故障が検出される場合である。この流れでは、ステップ５７０において、ＭＯＭとマネージャとの間、およびマネージャとアプリケーションサーバとの間の接続は、切断されていない。しかし、ステップ５７２は、ＭＯＭが、ユーザインタフェースとの接続の切断を検出することを含む。これは、一時的な計測のためのマネージャにおけるタイマーの満了前である。ステップ５７４において、接続の切断を検出することに応答して、ＭＯＭがマネージャとの接続を終了する。応答では、ステップ５７６において、マネージャはアプリケーションサーバとの接続を終了する。ステップ５７８において、エージェントは、マネージャとの接続の終了を検出する。ステップ５８０において、マネージャとの接続の終了を検出することに応答して、エージェントが、図３のステップ３３０に関連して説明したように、一時的な計測のロールバックを始める。
【００５４】
図６は、図３のステップ３３０の実施例を示す。一時的な計測が付加される前にあった状態にアプリケーションを戻すための技術の例が提供される。この技術は、一時的な計測がどのようにロールバックされ得るか、例えば、アプリケーションから削除され得るかを示す。一時的な計測のロールバックは一時的な計測を適用する指令を削除することに関与し、一つまたはそれ以上の一時的に計測されたクラスのバイトコードをリロードすることによって、および、一時的な計測が付加される前にすでに適用された指令を再適用することによって、エージェントが計測の以前の状態を復元することができる。ロールバックは、図１３に関連して説明したように、アプリケーションの一つまたはそれ以上のクラスを再定義することに関与し得る。アプリケーションに適用された計測の履歴または記録は、埋め込まれたデータベース内のエージェント側において、一連の指令として記憶しておくことが可能である。
【００５５】
ステップ６００では、エージェントは未計測のバイトコードにアクセスする。例えば、このことは、.ＪＡＲまたはJava（登録商標）Archiveファイルにアクセスすることを含み得る。これは、複数のJavaファイルを含むアーカイブである。これは、Javaクラスとメタデータを格納し、アプリケーションサーバなどのコンピューティングデバイスのJava Runtime Environment（ＪＲＥ（登録商標））におけるプログラムとして実行され得る。これは、計測が付加される前は、元来、生のバイトコードである。ステップ６０５において、エージェントは、一時的な計測が付加される前に既に適用された計測指令の記録や履歴にアクセスする。ステップ６１０において、エージェントは、計測指令の記録に基づいて、未計測バイトコードを計測する。これらの計測指令は、一時的計測以外の計測によってアプリケーションを計測するためのルールを含むことができる。例えば、計測指令は、計測すべきアプリケーションのクラスを特定することができる。詳細は、図１２Ａ、１２Ｂおよび１３に関連して説明される。
【００５６】
図７は、ユーザインタフェース、マネージャおよびエージェントを含む図３および４Ａの処理の実施例を示す。図１の、ユーザインタフェースのコンピューティングデバイス１０６、マネージャのコンピューティングデバイス１０８およびアプリケーションサーバのセット１２０が示されている。また、アプリケーションサーバ１２２および１２４、ならびにそれぞれ関連付けられているエージェント１２３および１２５が示されている。マネージャ１０８は、ユーザインタフェース１０６とインタフェース接続するためのソフトウェア７０４を含む。ソフトウェア７０４は、任意のエージェント１２３、１２５、...のためにエージェントの動的計測プロキシサービスを提供する。ソフトウェア７０６は、プロキシサービスのマネージャの実装を表現しており、リスナー７０８およびタイマー７１０を含む。ソフトウェア７０６は、ソフトウェア７０４とインタフェース接続する。一時的な計測の複数の項目がアクティブになっている場合、リスナーとタイマーとの対が項目ごとに提供され得る。エージェントの動的計測サービスという形態をしたソフトウェアが、エージェントごとに提供される。具体的には、ソフトウェア７１２は、エージェント１２３とインタフェース接続するために提供され、ソフトウェア７１４は、エージェント１２５とインタフェース接続するために提供される。ソフトウェア７０６もソフトウェア７１２および７１４とインタフェース接続する。
【００５７】
この例では、双方向の実線７１８は、ユーザインタフェース１０６とマネージャ１０８との間に開かれている接続を表し、双方向の実線７２０は、アプリケーションサーバ１２２とマネージャ１０８との間に開かれている接続、例えばマネージャ１０８の処理７１２を表す。
【００５８】
点線７０２は、ユーザインタフェース１０６とマネージャのリスナー７０８との間のコールバックを表す。丸で囲んである点線の端は、コールバックコードであるコールバックハンドラ処理を表し、一方、この線の矢印の先端は、これもコールバックコードであるリスナー処理を指す。このように、コールバック７０２のために、コールバックハンドラはユーザインタフェース１０６に存在する。同様に、点線７１６は、エージェント１２３とマネージャのリスナー７０８との間のコールバックを表す。ここでは、コールバックハンドラがエージェント１２３に存在する。一時的な計測がアプリケーションサーバ１２２内のアプリケーションに適用される場合、タイマー７１０は、一時的な計測がアクティブであり続ける期間を追跡する。さらに、コールバック７１６は接続７２０を監視し、コールバック７０２は接続７１８を監視する。本質的には、両端のコールバックが同じ接続を監視することができる。例えば、アプリケーションサーバ１２２またはマネージ１０８は、接続７２０が切断されるかどうかを判定するためにコールバック７１６を使用することができ、ユーザインタフェース１０６またはマネージャ１０８は、接続７１８が切断されるかどうかを判定するためにコールバック７０２を使用することができる。
【００５９】
図８Ａは、１つのエージェントに関与している一時的な計測の１項目に対する、ＭＯＭ、マネージャおよびエージェントを含む図３の処理におけるコールバックの使用の実施例を示す。図１のユーザインタフェース１０２、ＭＯＭ１０４およびマネージャ１１４が示されている。ＭＯＭは、ユーザインタフェース１０２とインタフェース接続しているエージェントの動的計測プロキシサービスのためのソフトウェア８０４、リスナー８０８を含むＭＯＭのプロキシサービス８０６の実装、および、例えばマネージャ１０８および１１４のような一つまたはそれ以上のマネージャとインタフェース接続しているエージェントのマネージャの動的計測プロキシサービス８１０を含む。双方向の実線の矢印８０３は、ＭＯＭ１０４とユーザインタフェース１０２との間の接続を示す。
【００６０】
マネージャ１１４は、マネージャ１０８と類似しているコンポーネントを含んでおり、エージェントの動的計測プロキシサービスのためのソフトウェア８２４およびプロキシサービスのマネージャの実装のためのソフトウェア８２６を含んでいる。この例では、マネージャ１１４に関与しているコールバックが示されていないので、リスナーもタイマーも提供されない。図１の、エージェントの動的計測サービスのソフトウェア８３２および８３４は、アプリケーションサーバ１４２および１４４のエージェント１４３および１４５にそれぞれ提供される。
【００６１】
点線８０２は、ユーザインタフェース１０２とＭＯＭ１０４のリスナー８０８との間のコールバックを表す。そこでは、コールバックハンドラはインタフェース１０２に存在する。同様に、点線８１２は、マネージャ１０８とＭＯＭのリスナー８０８との間のコールバックを表す。そこでは、コールバックハンドラはリスナー８０８に存在する。点線８１４は、マネージャ１０８とＭＯＭのリスナー８０８との間のコールバックを表す。そこでは、コールバックハンドラはリスナー７０８に存在する。双方向の実線の矢印８０５は、ＭＯＭ１０４とマネージャ１０８との間の接続を示す。前述したように、点線７１６は、リスナー７０８とエージェント１２３との間のコールバックを表す。そこでは、コールバックハンドラはエージェント１２３に存在する。
【００６２】
一般的に、すべてのコールバックは、双方向にすることができ、矢印がコールバックの設定方向を示す。即ち、コールバックを生成する主体であるコンピューティングデバイスまたはその他のエンティティ（実体）は、矢印の後ろにあり、コールバックを受信しそれを通して結果を返す通信をするためにそれを使用するエンティティ（実体）は矢印の先にある。
【００６３】
コールバックの最初のシーケンスは：１）ユーザインタフェース／ワークステーション１０２からＭＯＭ１０４（コールバック８０２）まで、および２）ＭＯＭ１０４からマネージャ１０８（コールバック８１２）まで、である。これら２つのコールバックは、結果およびフェイルセーフについてマネージャからワークステーションに至るまで通信するためにある。コールバックの２番目のシーケンスは：１）エージェント１２３からマネージャ１０８まで（コールバック７１６）および２）マネージャ１０８からＭＯＭ１０４まで（コールバック８１４）までである。これらは、マネージャ１０８とユーザインタフェース１０２への動的計測の結果をもたらすフェイルセーフおよび結果のコールバックである。リスナー７０８および８０８（および後述する、図８Ｄでは８２８）は、コールバックが同期できるように「グルー」を提供する。コールバック８０２、および後述する図８Ｂのコールバック８０７は、「パラレル」コールバックで、計測の各項目の一つと考えられ得る。
【００６４】
一時的な計測がアプリケーションサーバ１２２内のアプリケーションに適用される場合、タイマー７１０は、一時的な計測がアクティブであり続ける期間を追跡する。また、ユーザインタフェース１０２またはＭＯＭ１０４は、接続８０３が切断されるかどうかを判定するために、コールバック８０２を使用することができる。同様に、ＭＯＭ１０４およびマネージャ１０８は、接続８０５が切断されるかどうかを判定するためにコールバック８１２および８１４を使用することができる。マネージャ１０８またはエージェント１２３は、接続７２０が切断されるかどうかを決定するためにコールバック７１６を使用することができる。
【００６５】
一時的な計測と関係のないコンピューティングデバイス間では他の接続が確立し得ることに留意されたい。
【００６６】
図８Ｂは、一時的な計測の２項目に対する、ＭＯＭ、マネージャおよび１つのエージェントを含む図３の処理におけるコールバックの使用の実施例を示す。この実施例は、エージェント１２３によって使用される計測の付加的な項目のために付加的なコールバックおよび接続を提供することによって図８Ａの実施例に追加する。特に、ユーザインタフェース１０２とＭＯＭ１０４との間に追加の接続８１１が提供され、ＭＯＭ１０４とマネージャ１０８との間に追加の接続８０９が提供され、そしてマネージャ１０８とエージェント１２３との間に追加の接続８２３が提供される。さらに、ユーザインタフェース１０２およびＭＯＭ１０４は、追加のコールバック８０７を使用し、計測の追加の項目に関係して接続８１１を監視する。ＭＯＭ１０４（追加のリスナー処理８４２を介して）およびマネージャ１０８は、追加のコールバック８４４および８４６を使用し、計測の追加の項目に関係して接続８０９を監視する。マネージャ１０８およびエージェント１２３は、コールバック８３６を使用し、計測の追加の項目に関係して接続８２３を監視する。マネージャ１０８において、追加のリスナー処理８２５および関連付けられているタイマー処理８２７は、計測の追加の項目と関連付けられている。
【００６７】
この例では、付加的な接続、リスナーおよびコールバックを使用して、計測のさらなる項目を拡張することができる。
【００６８】
図８Ｃは、１つのエージェントに関与している一時的な計測の２項目に対する、ＭＯＭ、マネージャおよび２つのエージェントを含む図３の処理におけるコールバックの使用の実施例を示す。この実施例は、別のエージェント、即ちエージェント１２５に付加的な計測の項目を提供することによって図８Ｂの実施例を変更する。この場合、エージェント処理１２５が実行されるアプリケーションサーバ１２４とマネージャ１０８との間に２番目の接続８３８が確立される。また、コールバック８４０は、接続８３８を監視するために、マネージャ１０８およびエージェント１２５によって使用される。
【００６９】
図８Ｄは、２つのエージェントに関与している一時的な計測の２項目に対する、ＭＯＭ、２つのマネージャおよび２つのエージェントを含む図３の処理におけるコールバックの使用の実施例を示す。この実施例は、別のマネージャ即ちマネージャ１１４に関連づけられている別のエージェント即ちエージェント１４３に付加的な計測の項目を提供することによって図８Ａの実施例を変更する。この場合、ＭＯＭ１０４とマネージャ１１４との間に接続８９４が確立され、エージェント１４３が実行されるアプリケーションサーバ１４２とマネージャ１１４の処理８３２との間に接続８４８が確立される。タイマー８３０は、リスナー８２８に関連付けられる。ＭＯＭ１０４およびマネージャ１１４は、接続８９４を監視するためにコールバック８９６および８９８を使用し、マネージャ１１４およびエージェント１４３は、接続８４８を監視するためにコールバック８５２を使用する。
【００７０】
図８Ａ−８Ｄの実施例の組み合わせもまた使用され得る。この例は、追加の接続、リスナーおよびコールバックを使用して、計測のさらなる項目まで広げられ得る。
【００７１】
図９は、実行パス内のコンポーネントの呼び出し関係を示す。図１で示されるようなアプリケーションサーバ上で実行され得るアプリケーション内のコンポーネントが示されている。ここで提供されるコンポーネントのシーケンスは、実行パスの一つの可能なタイプの例である。呼び出される各コンポーネントは、実行パスの一部と考えることができる。アプリケーションが計測されるときには、通常、このアプリケーションの開発者の理解や注目する対象となるであろうコンポーネントの選択に基づいて、唯一選択されたコンポーネントが計測されることに留意する。このように、少なくとも最初は、注目すべきものとされていないため、多くのコンポーネントはアプリケーション内で呼び出され得るが、計測されることはない。
【００７２】
コンポーネント指向のプログラムモジュールは、コンポーネントに関係する構成要素からアプリケーションや他のプログラムをプログラマに組ませるのに役に立つ。各コンポーネントは、ソフトウェアの全体的機能に適合するよう特定の機能を実行することができる。さらに、コンポーネントは、他のコンポーネントを呼び出すことができる、再帰呼び出しによって自分自身を呼び出すこともできる。こうして、コンポーネントのシーケンスがプログラム内で呼び出される。コンポーネントは、コンピュータシステムのリソースが消費される例、またはプログラムの実行時に作業が行われる例である。コンポーネント指向のプログラミングモデルの一例は、Ｊ２ＥＥであるが、Java Server Page、Enterprise Java Bean、サーブレットおよびJava Database Connectivityコンポーネントといったコンポーネントを用いることができる。しかしながら、その他のコンポーネント指向のプログラミングモデルもまた使用されており、例えば、マイクロソフト社の.NETコンポーネントが使用される。さらに、プログラミングモデルはオブジェクト指向である必要はない。一つのアプローチでは、コンポーネントはメソッドであると考えられている。
【００７３】
ここで示されている特定の例は、ユーザがアイテムを注文するWebベースの電子商取引のアプリケーションを示している。コンポーネントは、アプリケーション内のビジネスロジックまたは電子商取引の手順に対応する。特に、コンポーネントＣ１  ９１２では、ユーザがアイテムを選び、購入し、クレジットカードの種類やクレジットカード番号といった支払い方法の情報、アイテムを発送する住所といった発送情報、陸送または翌朝配達の航空発送といった発送方法の情報を入力する、ショッピングカートを提供している。Ｃ１  ９１２は、コンポーネントＣ１Ａ  ９１４を呼び出し、選択されたアイテムがストックにあるかどうかを判定するために在庫を調べる。一旦、選択されたアイテムがストックにあると判定されると、Ｃ１  ９１２は、コンポーネントＣ２  ９２２を呼び出し、そこでトランザクションが保留にされている間、アイテムが他のユーザに販売されないように、アイテムを予約する。一旦終了すると、Ｃ２  ９２２がコンポーネントＣ３  ９２４を呼び出し、そこでユーザのクレジットカード情報を調べ、購入の承認と認証が行われる。これは、通常、クレジットカード情報センターにより管理されている外部サーバと通信することを伴う。例えば、Ｃ３  ９２４は、クレジットカードサービスにコンタクトするコンポーネントＣ３Ａ  ９２６を呼び出し得る。
【００７４】
一旦、Ｃ３  ９２４が正常に終了することで、購入を承認し、それが、コンポーネントＣ４  ９３０を呼び出し、購入されたアイテムの数量を減少させることによって在庫を調整する。Ｃ４  ９３０はコンポーネントＣ３  ９４２を呼び出し、これにより、出荷ラベルがプリントされたり、オペレータがアイテムを手作業で置いたり梱包したりすることが求められる場所である、例えば、倉庫にコンタクトし、出荷されるアイテムの手配が行われる。例えば、Ｃ５  ９４２は、コンポーネントＣ５Ａ  ９４４を呼び出すことができ倉庫Ａにコンタクトし、および／またはコンポーネントＣ５Ｂ  ９４６を呼び出して倉庫Ｂにコンタクトする。
【００７５】
一旦、コンポーネントＣ２−Ｃ５が実行されると、実行パスはＣ１  ９１２に戻り、例えば、確認の電子メールまたはWebページで発注確認番号および追跡番号等を提供することによりユーザに購入を確認するために、発注完了コンポーネントＣ６  ９１６を呼び出す。もし、Ｃ１Ａ  ９１４で倉庫が在庫切れであったり、Ｃ３  ９２４でクレジットカード払いが失敗したりした場合には、実行パスは同様にＣ１  ９１２に戻り得る。ある種の実装として、Ｃ１およびＣ６はJava Server Pagesであり、Ｃ２−Ｃ５はEnterprise JavaBeansである。
【００７６】
１番目のコンポーネントは、非同期モードでマルチスレッドまたはマルチプロセスモードの実行を開始する別のコンポーネントを呼び出した後、実行を継続することができ、またはこの呼び出されたコンポーネントが同期モードでシングルスレッドまたはシングルプロセスモードの実行を終了するまで、このコンポーネントを一時的に休止することができる、ことに留意されたい。例えば、Ｃ２−Ｃ５のコンポーネントが実行している間、Ｃ１  ９１２は休止する。さらに、任意のコンポーネントは、トランザクション内に１回以上呼び出すことが可能である。例えば、ユーザが異なる倉庫に保管されている複数のアイテムを購入すると仮定する。この場合、Ｃ５  ９４２は繰り返し実行することができ、異なる倉庫および／または各アイテム用の異なる倉庫部門にコンタクトする。
【００７７】
図１０は、図９の呼び出し関係に基づく呼び出しスタックの位置に対する時間のグラフを示す。時間の増分は、必ずしも等間隔ではない。この表現では、トランザクションのトレースは、一つまたはそれ以上のホストによって提供された実行パス情報の種類の一例である。これは、ユーザインタフェース上での報告として提供されるグラフィカル表示であり、例えばメソッドのようなコンポーネントの実行時間の形式でパフォーマンスデータを表現したものである。実行パス情報では、アプリケーションのどのメソッドが呼び出されるか、および、呼び出された時間についても特定することができる。水平方向は時間を表し、垂直方向は呼び出しスタックの深さや位置を表す。呼び出しスタックは、一つまたはそれ以上のプログラムまたはスレッドの実行中に、呼び出されるか又は起動されるメソッドを特定する。実行パスは、通常、１秒から数秒のわずかの間、続く。
【００７８】
例えば、実行パスはシーケンス：Ｃ１（１０１２）、Ｃ１Ａ（１０１４）、Ｃ１（１０１２）、Ｃ２（１０２２）、Ｃ３（１０２４）、Ｃ３Ａ（１０２６）、Ｃ３（１０２４）、Ｃ４（１０３０）、Ｃ５（１０４２）、Ｃ４（１０３０）、Ｃ３（１０２４）、Ｃ２（１０２２）、Ｃ１（１０１２）、Ｃ６（１０１６）およびＣ１（１０１２）を含む。ホストは、クライアントからのリクエストを受信して、Ｃ１がｔ１において実行を開始したことに気づく。このシーケンス内における各移行は、計測に基づいてエージェントによって気づかれる。Ｃ１がｔ２においてＣ１Ａを呼び出す。Ｃ１Ａがｔ４において実行を完了する。Ｃ１がｔ５においてＣ２を呼び出す。Ｃ２がｔ６においてＣ３を呼び出す。Ｃ３がｔ７においてＣ３Ａを呼び出す。Ｃ３Ａがｔ９において実行を完了する。Ｃ３がｔ１０においてＣ４を呼び出す。Ｃ４がｔ１１においてＣ５を呼び出す。Ｃ５がｔ１６において実行を完了する。Ｃ４がｔ１７において実行を完了する。ｔ１８において、Ｃ３が実行を完了する。Ｃ２がｔ１９において実行を完了する。Ｃ１がｔ２０においてＣ６を呼び出す。Ｃ６がｔ２４において実行を完了する。ｔ２５において、Ｃ１が実行を完了するとき、ホストがクライアントにレスポンスを出す。ホストは、定期的にセントラルマネージャに時間とトランザクションデータを報告する。
【００７９】
図１１は、Java実行環境を示している。Java実行環境１１００は、ハードウェア１１３０の上に構築されているオペレーティングシステム１１２０上に構築されている。Java実行環境は、Java ＡＰＩクラス１１０２とＪＶＭ１１０４を含むいくつかの仮想部品を含む。ＪＶＭは、レジスタ１１０６、オペランドスタック１１０８、ヒープ１１１０およびメソッド領域１１１２を含む。ＪＶＭは、命令のシーケンスとして一連のバイトコードを処理する。ＪＶＭの命令は、操作される上で値が具体化するゼロまたはそれ以上のオペランドを伴う、実行すべき操作を特定するオペコードからなる。オペランドスタック１１０８、ヒープ１１１０およびメソッド領域１１１２は、指定可能なメモリ内にある。アドレスのサイズは３２ビットで、各メモリロケーションは１バイトを含み、各レジスタが３２ビットアドレスを格納する。メソッド領域は、バイトコードを含んでバイトバウンダリに配置され、オペランドスタックとヒープは、ワード（３２ビット）バウンダリに配置される。
【００８０】
レジスタは、メモリ内で実行すべき命令を追跡するプログラムカウンタ（ＰＣ）を含む。プログラムカウンタは、実行すべき次のバイトコードを特定する。フレームレジスタは、オペランドスタック内のカレントメソッドの実行環境に対するポインタを含む。オペランドトップ（optop）レジスタは、オペランドスタックの先頭へのポインタを含み、算術式を評価するのに用いられる。変数（vars）レジスタは、局所変数へのポインタを含む。
【００８１】
オペランドスタックは、メソッドと操作へパラメータを供給し、それらから結果を得る。すべてのバイトコード命令は、スタックからオペランドを取得してそれらの上で操作して、スタックに結果を戻す。オペランドスタックは、実行中のメソッドのスタックフレームを含む。スタックフレームは、例えば、局所変数、計算の中間結果など、メソッドの特定呼び出しのために、状態を保持する。具体的には、各ＪＶＭスレッドは、同時にスレッドとして生成された、専用のＪＶＭスタックを持っている。ＪＶＭスタックは、フレームを格納し、局所変数と部分的な結果を保持し、メソッド呼び出しと戻り値の役割を果たす。このようにフレームは、動的リンクを実行するため、メソッドのための値を戻したり、例外処理をディスパッチするために使用されると同様に、データおよび部分的な結果を格納するため使用される。新しいフレームは、メソッドが呼び出されるたびに生成される。フレームは、メソッドの呼び出しが終了すると、その完了が正常か中途（受け取れない例外処理をスローした）かにかかわらず、破棄される。フレームは、フレームを生成するスレッドのＪＶＭスタックから割り当てられる。各フレームは、局所変数の独自の配列、独自のオペランドスタック、および、カレントメソッドのクラスの実行時定数プールへのリファレンスを持っている。
【００８２】
ヒープまたはメモリ割り当てプールは、ガーベジコレクトされる。ヒープは、すべてのクラスのインスタンスに対するメモリと配列がそこから割り当てられる実行データ領域である。ヒープは、起動した仮想マシン上に生成され、オブジェクトのためのヒープ記憶域は、ガーベジコレクタとして知られている自動記憶装置管理システムにより再生される。具体的には、Java実行環境で実行中の各プログラムが、それに割り当てられたガーベジコレクトされたヒープを持っている。また、ヒープ内の各クラスには、それに関連付けられた定数プールがある。定数は、変更することはないから、通常、コンパイル時に生成される。定数プール内のアイテムは、特定のクラス内の任意のメソッドで使用されるすべての名前をエンコードする。クラスは、いくつの定数が存在するかのカウントを含み、クラスの記述内における定数の特定リストの始まりを特定するオフセットを含む。
【００８３】
メソッド領域は、コンパイルされたコード内でメソッドと関連付けられたバイトコード命令、および、動的リンクのために実行環境が必要とするシンボルテーブルを格納する。メソッドと関連付けられる必要がある可能性があるデバッグや付加情報も、またこの領域内に格納される。プログラムカウンタは、常にメソッド領域の数バイトのアドレスを示し、例えば、メソッド領域の数バイトのアドレスが入る。プログラムカウンタは、スレッドの実行を追跡するために使用される。バイトコード命令が実行された後、プログラムカウンタは、次に実行する命令のアドレスを保持する。
【００８４】
メソッド領域は、すべてのＪＶＭスレッド間で共有され、例えば、実行時定数プール、フィールドおよびメソッドデータ、およびメソッドやコンストラクタのためのコードのようなクラスごとの構造などを格納しており、クラスおよびインスタンスの初期化やインタフェースタイプの初期化で使用される特別のメソッドを含んでいる。メソッド領域は、起動した仮想マシン上に生成される。実行時定数プールは、クラスファイル内の定数プールテーブルのクラス毎の、又はインターフェイス毎の実行時表現である。これには、コンパイル時に知られている数値リテラルから実行時に解決されるべきメソッドやフィールドリファレンスに至るまでの範囲で、定数のいくつかの種類が含まれる。各実行時定数プールは、ＪＶＭのメソッド領域から割り当てられる。クラスまたはインタフェースの実行時定数プールは、ＪＶＭによってクラスまたはインタフェースが生成されるときに構築される。
【００８５】
図１２Ａは、静的計測のための処理フローの例としてJavaベースのものを示す。この処理は、例えば、図１に示されたようにエージェント１２００よって、ある可能なアプローチにおいて実装される可能性がある。計測に対する一つのアプローチは、メソッドのような、どのコンポーネントが計測されるべきかを決める静的なルールを提供するものである。ルールは、コンポーネントがアプリケーションにロードされる時にアクセスされる。そのようなアプローチでは、クラスローダ１２２０は、トランスフォーマ１２１５にアプリケーションのバイトコードの生のデータバイトを提供するのに使用され、例えば、生のデータバイトをクラスに変換する。例えば、Javaでは、これは、クラスのロードに関与するClassLoaderオブジェクトのdefineClassメソッドを使用することを含み得る。ClassLoaderクラスは、抽象クラスである。クラスの名前を付与すると、クラスローダは、クラスの定義を構成するデータを検索したり生成したりしようとする。代表的な手順は、名前をファイル名に変換し、ファイルシステムからその名前の「クラスファイル」を読み込むことである。defineClassメソッドは、バイトの配列をClassクラスのインスタンスに変換する。Classクラスのインスタンスは、Javaアプリケーションを実行中にクラスおよびインタフェースを表す。トランスフォーマ１２１５は、したがって、このようにクラスを変換することによって、計測を付加するためにバイトコードを変換することができるソフトウェアである。一つのアプローチでは、トランスフォーマ１２１５の最小処理単位をクラスファイルおよびそのバイト配列とすることができる。
【００８６】
判断ブロック１２１０において、アプリケーションのバイトコードがルール（指令）１２０５に一致する場合、トランスフォーマ１２１５はトレーサバイトコードの形式でプローブを付加する。判断ブロック１２１０においてアプリケーションのバイトコードがルール１２０５に一致しない場合、トランスフォーマ１２１５はバイトコードに計測を付加しない。トランスフォーマ１２１５と判断ブロック１２１０は、プローブビルダ１２２５の一部と考えることができる。
【００８７】
この実装では、ルール１２０５は、計測すべき管理されたアプリケーションの一部を特定する代表的な静的ルールの規定である。ルールは、通常、最初に仮想マシン内でクラスが定義される場合に実装される。クラスは、たった一度定義すれば、複数回ロードすることができる。例えば、同じクラスをロードする複数のクラスローダが存在し得る。また、クラスなどのコンポーネントは、特定の方法で名前付けられるかどうか、特定のインタフェースを実装するかどうか、特定のサブクラスまたはスーパークラスを拡張するかどうか、等々に基づいて、計測され得る。そのようなコンポーネントは、有用なそうでなければ興味深いパフォーマンスデータを提供する可能性があると考えられるので、計測すべきものとして選択される。
【００８８】
例えば、ルールは、少なくともいくつかのサーブレットは興味深いデータを提供し得ると考えられているので、すべてのサーブレットを計測すべきであることを示すことがある。この場合、ルール１２０５が、JavaクラスのHttpServletのサブクラスであるすべてのコンポーネントを計測すべきであることを示す場合がある。HttpServletは、すべてのサーブレットが依存する抽象クラスである。しかしながら、すべてのコンポーネントが計測されるわけではなく、包括的過ぎる計測は過度にオーバーヘッドコストがかかる結果となり、アプリケーションの操作性が損なわれる可能性があるという不安がある。その一方で、包括的でなさ過ぎる計測は、重要なパフォーマンスデータの欠落という結果に繋がるおそれがある。
【００８９】
図１２Ｂは、静的計測のための処理フローの例として.NETベースのものを示す。別の可能性のあるアプローチでは、管理されたアプリケーションのコンポーネントは、マイクロソフト社の「.NET」フレームワークにより提供されている。Javaとは異なり.NETフレームワークはクラスローダを使用しない。代わりに、.NETは、フレームワーク用に特別に書かれたプログラムの実行を管理する仮想マシンを含む。.NETフレームワークの実行環境は、共通言語ランタイム（ＣＬＲ）として知られている。ＣＬＲは、プログラムを実行する特定のＣＰＵの能力をプログラマが考慮する必要がないように、アプリケーションの仮想マシンの外観を呈している。ＣＬＲは、セキュリティ、メモリ管理および例外処理などの他のサービスの提供もしている。予めコード化されたソリューションのクラスライブラリとＣＬＲは、共に.NETフレームワークを構成している。
【００９０】
また、ＣＬＲは、アプリケーションの開発および実行のための言語に中立的なプラットフォームを提供する共通言語基盤（ＣＬＩ）の実装であり、例外処理、ガーベッジコレクション、セキュリティおよび相互運用のための各機能を果たしている。ＣＬＩは、コアクラスライブラリィ、コモンタイプシステムおよび共通中間言語（ＣＩＬ）を含む。Javaバイトコードと同様に、ＣＩＬは中間バイトコードの他の例である。Javaと.NETは、実装の一例にすぎず、他の実装もまた可能である。
【００９１】
ここでは、ある可能なアプローチとして、処理がエージェント１２５０によって実装されることがある。一つの可能性のある状況では、.NETフレームワークは名前によってクラスを参照し、ＣＬＲ１２７０がクラスを発見し、トランスフォーマ１２６５（もしあれば）にそれを示し、その結果ＣＩＬを使用するという処理が行われる。特に、判定ブロック１２６０でクラスがルール１２５５に一致する場合、計測が付加される。判断ブロック１２６０でクラスがルール１２５５に一致しない場合は、計測は付加されない。トランスフォーマ１２６５と判断ブロック１２６０は、プローブビルダ１２７５の一部であると考えることができる。
【００９２】
図１３は、ソフトウェアを計測するための処理フローの例を示す。図５Ａに対応して、コンポーネントの静的リスト１３１０は、計測されたバイトコードを提供するためのトランスフォーマ／プローブビルダ１３００の使用のためにバイトコードをロードするクラスローダ１３０２に提供することができる。例えば、defineClassメソッドがバイト配列をClassクラスのインスタンスに変換する。さらに、一時的に計測されるメソッドまたはクラスのようなコンポーネントの動的リスト１３０６は、計測され得る。一つのアプローチでは、図１４に示されているように、ユーザインタフェース１３０８は、一時的に計測すべきコンポーネントをユーザが指定することを許容する。ユーザも静的リスト１３１０を変更することができる。ユーザインタフェースは、管理されたアプリケーション内に存在する既存の計測から流入するパフォーマンスデータを監視するパフォーマンスモニタ１３１２に応答することができ、例えば、あるコンポーネントがトランザクションにおいて実行に時間がかかるというような問題を起こしている事実を特定することができる。パフォーマンスデータは、範囲外にあるかどうかを判定するための下側および上側の閾値と比較されることが可能である。
【００９３】
コンポーネントの動的リスト１３０６は、計測されるべきクラスの動的に更新可能なリストを含むことができる。このリストは、診断が行われる限られた期間内に特定のメソッドが計測されるように随時変更することができる。ユーザインタフェース１３０８は、時間の期間を指定することや、既定の時間期間を使用することができる。したがって、コンポーネントは、例えば、ある時点にて一時的な計測を有しない状態から、別の時点にて一時的な計測を有する状態へ移行するように、再定義することが可能である。一時的な計測の種類またはレベルが異なるものを提供することも可能である。コンポーネントを再定義することは、このように異なった種類の一時的な計測への移行を含むことがある。
【００９４】
計測は、多くの種類のパフォーマンスメトリクス／データを生成することができ、それらには、コンポーネントの平均実行または応答時間、毎秒または間隔ごとの呼び出し率、呼び出し回数、開始したが終了していない間隔ごとの呼び出しの回数を示す同時実行のメトリック、呼び出しを開始した間隔ごとのメソッド呼び出しの回数が特定の閾値を超えた呼び出し回数を示すストール状態のメトリックが含まれる。また、データは、ガーベジコレクションのヒープサイズ、ファイルやソケットのアクティビティを示すバンド幅メトリック、スレッドの数、システムログ、例外処理、メモリリークおよびコンポーネントの相互作用を特定する。データは、どのコンポーネントが計測されたコンポーネントによって呼び出されたか、またはどれが計測されたコンポーネントを呼び出すか、を特定することもできる。例えば、コントローラのアーキテクチャにおいては、コンポーネントを管理するコントローラコンポーネント内の制御フローは、次に実行されて、どのくらいの頻度で実行され、どのように実行されるかを知っている。コントローラコンポーネントは、計測を介して、未計測のどのコンポーネントが頻繁に呼び出されその結果重要であると推測でき、計測を付加するために再定義すべきであることを報告することができる。
【００９５】
コンポーネントの動的リスト１３０６、ユーザインタフェース１３０８、コンポーネントの静的リスト１３１０およびパフォーマンスモニタ１３１２は、同じ場所あるいは異なる場所で提供され得ることに留意されたい。例えば、ユーザインタフェース１３０８は、ユーザインタフェースのコンピューティングデバイスにおいて提供されることが可能であり、コンポーネントの動的リスト１３０６およびコンポーネントの静的リスト１３１０は、アプリケーションサーバのエージェントにおいて提供されることが可能であり、そしてパフォーマンスモニタ１３１２は、一つまたはそれ以上のアプリケーションサーバにおいて一つまたはそれ以上のエージェントからパフォーマンスデータを受信するマネージャのコンピューティングに関連付けられることが可能である。
【００９６】
パフォーマンスモニタ１３１２は、どのコンポーネントが問題のトランザクションに関与しているかの見解を提供し、これらのコンポーネントに問題があるのか、問題を起こし得るのか判断し、ユーザインタフェース１３０８上でこの情報を特定することができる。
【００９７】
ユーザインタフェース１３０８は、例えば、どのコンポーネントが一時的に計測されるのかをユーザに手動で選択させることができる。
【００９８】
コンポーネントの静的リスト１３１０は、アプリケーションの実行開始時に計測されるクラスまたは他のコンポーネントを含めることができる。これは、重要なデータを生成するはずであるコンポーネントのベースラインのリストにすることができる。
【００９９】
コンポーネントは、コンポーネントがアプリケーションの実行時に既に組み込まれているかどうかに応じて異なる方法で再定義されることができる。コンポーネントがアプリケーションにまだ組み込まれていない場合には、一つの可能な実装として、クラスローダ１３０２によってＪＶＭなどにロードされることで、正常に組み込まれ得る。例えば、.NETフレームワークを使用するような他の実装においては、クラスローダは使用されない。
【０１００】
コンポーネントがロードされると、命令があると、例えば、ユーザインタフェース１３０８、コンポーネントの動的リスト１３０６、コンポーネントの静的リスト１３１０およびパフォーマンスモニタ１３１２、に応答して、トランスフォーマ／プローブビルダ１３００がそのコンポーネントを計測する。アプリケーションにすでに組み込まれているが未計測のコンポーネントは、計測を含んでアプリケーションに再組み込みされ得る。例えば、コンポーネントは、アプリケーションから削除することができるとともに、仮想マシンを再起動することなく実行中にリロードすることが可能である。これを達成するためには、JavaのredefineClassコマンドがコンポーネントによってクラスローダ１３０２に提供される。Java開発キット（ＪＤＫ）バージョン１．５またはそれ以降のバージョンがこのコマンドを使用する再定義機能を備えている。このコマンドは、提供されたクラスファイルを使用して提供されたクラスのセットを再定義する。それは、２つ以上のクラスを同時にインターロック変更させるためにセットで動作する。また、再定義されたメソッドがアクティブなスタックフレームを有している場合には、これらのアクティブなフレームが元のメソッドのバイトコードの実行を続行し、再定義されたメソッドが新しい呼び出しで使用される。
【０１０１】
コンポーネントを例えばクラスのように再定義することは、クラスだけであるが、仮想マシンを再起動することに類似している。クラスが再定義されると、もしクラスが既存のメソッドスタックに存在するならば、そこにとどまる。しかし、すべての新しいメソッドが呼び出される場合には、新しいクラスが使用される。つまり、一旦、再定義されると、新しいバージョンがピックアップされる。
【０１０２】
トランスフォーマ／プローブビルダ１３００は、再定義されたコンポーネントを受信する場合、もしそうするように命令されていたのであれば、コンポーネントを計測する。トランスフォーマ／プローブビルダ１３００は、コンポーネントに特定の種類の計測を付加することも可能である。
【０１０３】
コンポーネントが一時的に計測されアプリケーションに再組み込みされた後、さらには計測が診断のために必要ではなくなると、そのコンポーネントは、再び、しかし一時的な計測を含まずにアプリケーションに再組み込みされる。この計測の削除は、特定された診断期間または他のある種のイベント後のタイムアウト、ユーザコマンド、に基づいて行われる。例えば、パフォーマンスモニタ１３１２は、コンポーネントのパフォーマンスデータが一定の時間期間に対して、あるいはコンポーネントの呼び出し数に対して許容されていると決めることができる。つまり、パフォーマンスモニタ１３１２は、計測されたメソッドの少なくとも一つのメソッドのパフォーマンスデータがもはや閾値パフォーマンスレベルに達していないという判定をすることができる。応答においては、パフォーマンスモニタ１３１２は、例えば、計測を削除するためのredefineClassのようなコマンドを発行することができる。
【０１０４】
計測の付加および削除は実行時に動的に行われるので、バイトコードを実行している仮想マシンはダウンさせる必要はなく、計測されたコンポーネントからのデータは直ちにアクセスされ得る（計測を追加する場合）。
【０１０５】
図１４は、コンポーネント群とそれに対応したパフォーマンスデータの階層的関係を示すユーザインタフェース表示を示すものである。ユーザインタフェース１４００は、一つまたはそれ以上の計測されたコンポーネントの名前を特定する表示領域１４０４を含む。ユーザは、表示領域１４０６内の計測に基づいたコンポーネントに対するトレースなどのパフォーマンスデータを表示するために表示領域１４０４の一つまたはそれ以上のコンポーネントを選択することができる。
【０１０６】
チェックボックスまたは他のインタフェースメカニズムが提供され、それによってユーザは、一時的に計測すべきクラス／メソッドまたは他のコンポーネントを特定することができる。ユーザは、例えば、コンポーネントがエラーに関与しているか否か、コンポーネント自身がエラーを起こしていないか、以前のトラブルシューティングの経験やその他の要因の観測に基づいて、あるコンポーネントに対して一時的に計測を付加すべきことを指示することができる。
【０１０７】
表示領域１４０４は、どのコンポーネントが別のコンポーネントの下にあるのか、または別のコンポーネントによって呼び出されるのかを示すツリーのような階層構造を使って、アプリケーション内の各コンポーネントを自動的に付加し得る。表示領域１４０６は、領域１４０４内のコンポーネントうち選択された一つについて、計測に基づいた計測されたコンポーネントのトランザクショントレースなどのパフォーマンスデータを表示している。例えば、コンポーネントＣ１、Ｃ５およびＣ５Ａは、コンポーネント名がアンダーラインで示されているように、現在、ユーザによって選択されており、そして、対応するパフォーマンスデータ、例えば、トランザクショントレースが、領域１４０６における曲線１４１０、１４１２および１４１４によって提供される。領域１４０６には、エージェントからマネージャに提供されるパフォーマンスデータが付加され得る。
【０１０８】
以上、本発明の具体例を詳細に説明したが、これらは例示に過ぎず、本発明の範囲を限定するものではない。上記した技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。上記した実施形態は、本発明の原理をベストに説明するために選定されたものであり、その実用に際しては、本発明が最適にその有用性を発揮するように、その特定用途に適するように当業者が様々に変形し得る。発明の範囲は、ここに添付した特許請求の範囲によって定められることを意図している。
【図１】
2011238234.tif 000003
【図２】
2011238234.tif 000004
【図３】
2011238234.tif 000005
【図４Ａ】
2011238234.tif 000006
【図４Ｂ】
2011238234.tif 000007
【図５Ａ】
2011238234.tif 000008
【図５Ｂ】
2011238234.tif 000009
【図５Ｃ】
2011238234.tif 000010
【図５Ｄ】
2011238234.tif 000011
【図５Ｅ】
2011238234.tif 000012
【図５Ｆ】
2011238234.tif 000013
【図５Ｇ】
2011238234.tif 000014
【図６】
2011238234.tif 000015
【図７】
2011238234.tif 000016
【図８Ａ】
2011238234.tif 000017
【図８Ｂ】
2011238234.tif 000018
【図８Ｃ】
2011238234.tif 000019
【図８Ｄ】
2011238234.tif 000020
【図９】
2011238234.tif 000021
【図１０】
2011238234.tif 000022
【図１１】
2011238234.tif 000023
【図１２Ａ】
2011238234.tif 000024
【図１２Ｂ】
2011238234.tif 000025
【図１３】
2011238234.tif 000026
【図１４】
2011238234.tif 000027
【外国語明細書】
2011238234000001.pdf
2011238234000002.pdf
2011238234000003.pdf
2011238234000004.pdf