(57)【要約】【課題】一つの実施形態において、本発明は、ハードウェアクライアント−サーバ環境で実装されるコンピュータプログラムのボトルネックを測定するコンピュータ実装方法を含む。【解決手段】方法は、ハードウェアクライアント−サーバ環境の測定をするために実行パラメータを定義することを含む。方法はまた、インストラメンテーションコードを含むためにコードブロックを修正することを含む。インストラメンテーションコードは、実行パラメータに関する。方法はまた、修正されたコードブロックをハードウェアクライアント−サーバ環境で実行することを含む。方法はまた、実行パラメータに関し、コードブロックを実行することから生じるインストラメンテーションデータを生成することを含む。方法はまた、生成されたインストラメンテーションデータを出力することを含む。【選択図】図３
2010129079.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェアクライアント−サーバ環境で実装されるコンピュータプログラムのボトルネックを測定するコンピュータ実装方法であって、
測定するために実行パラメータを定義し、
インストラメンテーションコードを含むために複数のコードブロックの各コードブロックを修正し、インストラメンテーションコードは、実行パラメータに関し、
修正された複数のコードブロックを実行し、
実行パラメータに関し、複数のコードブロックを実行することから生じるインストラメンテーションデータを生成し、
生成されたインストラメンテーションデータを出力する
ことからなることを特徴とするコンピュータ実装方法。
【請求項２】
コンピュータプログラムは、ハードウェアサーバコンピュータによって記憶される情報にアクセスし、ハードウェアクライアントコンピュータによって実行される第２Java(登録商標)言語プログラムと相互作用する、ハードウェアサーバコンピュータによって実行される第１Java(登録商標)言語プログラムであることを特徴とする請求項１に記載のコンピュータ実装方法。
【請求項３】
コンピュータプログラムは、ハードウェアデータベースサーバと相互作用し、ハードウェアクライアントコンピュータによって実行される第２Java(登録商標)言語プログラムと相互作用する、ハードウェアアプリケーションサーバによって実行される第１Java(登録商標)言語プログラムであることを特徴とする請求項１に記載のコンピュータ実装方法。
【請求項４】
各コードブロックを修正する段階は、
複数のコードブロックの同期コードブロックを特定し、
同期コードブロックの開始にモニタ入力命令を追加し、
同期コードブロックの終了にモニタ終了命令を追加する
ことからなることを特徴とする請求項１に記載のコンピュータ実装方法。
【請求項５】
実行パラメータは、並行パラメータ、スループットパラメータ、通し時間パラメータ、極限スループットパラメータ、及び利用パラメータのうち少なくとも一つを含むことを特徴とする請求項１に記載のコンピュータ実装方法。
【請求項６】
複数のコードブロックは、低負荷を有するハードウェアサーバコンピュータに従って実行されることを特徴とする請求項１に記載のコンピュータ実装方法。
【請求項７】
実行する段階は、
ハードウェアデータベースサーバコンピュータによって実装されるデータベースに記憶されるロックオン情報を得て、
データベースへの接続を得て、
情報へアクセスするデータベースコマンドを実行し、
ロックを解除する
ことからなることを特徴とする請求項１に記載のコンピュータ実装方法。
【請求項８】
インストラメンテーションデータは、位置識別子、スレッド識別子、モニタ識別子、入力時間、及び終了時間のうち少なくとも一つを含むことを特徴とする請求項１に記載のコンピュータ実装方法。
【請求項９】
インストラメンテーションデータは、位置識別子、スループット測定、通し時間測定、極限スループット測定、及び利用測定のうち少なくとも一つを含むことを特徴とする請求項１に記載のコンピュータ実装方法。
【請求項１０】
インストラメンテーションデータは、減少順序で利用測定に従って出力されることを特徴とする請求項１に記載のコンピュータ実装方法。
【請求項１１】
インストラメンテーションデータの出力に応答してユーザ入力に従って、ハードウェアクライアント−サーバ環境の局面を調整することをさらに具備することを特徴とする請求項１に記載のコンピュータ実装方法。
【請求項１２】
インストラメンテーションデータの出力に応答してユーザ入力に従って、ハードウェアクライアント−サーバ環境のアプリケーションサーバの局面を調整することをさらに具備することを特徴とする請求項１に記載のコンピュータ実装方法。
【請求項１３】
インストラメンテーションデータの出力に応答してユーザ入力に従って、ハードウェアクライアント−サーバ環境のアプリケーションサーバの仮想マシンの局面を調整することをさらに具備することを特徴とする請求項１に記載のコンピュータ実装方法。
【請求項１４】
ハードウェアクライアント−サーバ環境で実装されるコンピュータプログラムのボトルネックを測定するための命令を実行する装置であって、
複数のコードブロックを記憶するメモリと、
測定するために実行パラメータを定義し、
インストラメンテーションコードを含むために複数のコードブロックの各コードブロックを修正し、インストラメンテーションコードは、実行パラメータに関し、
修正された複数のコードブロックを実行し、
実行パラメータに関し、複数のコードブロックを実行することから生じるインストラメンテーションデータを生成し、
生成されたインストラメンテーションデータを出力する
ことを含む処理を実行するプロセッサと
を具備することを特徴とする装置。
【請求項１５】
プロセッサは、
仮想マシンを実装し、仮想マシンは、修正された複数のコードブロックを実行することをさらに具備する処理を実行することを特徴とする請求項１４に記載の装置。
【請求項１６】
プロセッサは、
仮想マシンを実装し、仮想マシンは、修正された複数のコードブロックを実行し、
インストラメンテーションデータに応答してユーザ入力に従って仮想マシンの局面を調整する
ことをさらに具備する処理を実行することを特徴とする請求項１４に記載の装置。
【請求項１７】
インストラメンテーションデータは、減少順序で利用測定に従って出力されることを特徴とする請求項１４に記載の装置。
【請求項１８】
ハードウェアクライアント−サーバ環境で実装されるコンピュータプログラムのボトルネックを測定するための処理を実行するためにデータ処理装置を制御する命令をその上に記録したコンピュータ読取可能な媒体であって、
ハードウェアクライアント−サーバ環境を測定するために実行パラメータを定義し、
インストラメンテーションコードを含むために複数のコードブロックの各コードブロックを修正し、インストラメンテーションコードは、実行パラメータに関し、
修正された複数のコードブロックをハードウェアクライアント−サーバ環境で実行し、
実行パラメータに関し、複数のコードブロックを実行することから生じるインストラメンテーションデータを生成し、
生成されたインストラメンテーションデータを出力する
ことからなることを特徴とするコンピュータ読取可能な媒体。
【請求項１９】
命令は、
修正された複数のコードブロックを実行する仮想マシンを実装する
ことをさらに具備する処理を実行するためにデータ処理装置を制御することを特徴とする請求項１８に記載のコンピュータ読取可能な媒体。
【請求項２０】
命令は、
修正された複数のコードブロックを実行する仮想マシンを実装し、
インストラメンテーションデータに応答してユーザ入力に従って仮想マシンの局面を調整する
ことをさらに具備する処理を実行するためにデータ処理装置を制御することを特徴とする請求項１８に記載のコンピュータ読取可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ボトルネックの測定に関し、具体的には、クライアント−サーバ環境のボトルネックを測定することに関する。
【０００２】
本明細書中で特に示す場合を除いて、このセクションで説明される手法は、本願の特許請求の範囲に対する先行技術ではなく、このセクションに包含されることによって従来技術であるとは認められない。
【背景技術】
【０００３】
Java(登録商標)プログラミング言語は、シンプル、オブジェクト指向、分散、マルチスレッド、ダイナミック、アーキテクチャ中立、ポータブル、ハイパフォーマンス、ロバスト、及びセキュアの全てのバズワードによって特徴付けることができるハイレベル言語である。これらバズワードの各々に関する詳細は、James Gosling及びHenry McGiltonによる“The Java（登録商標） Language Environment”で見出される。
【０００４】
Java（登録商標）プログラミング言語において、ソースコードは、.java(登録商標)拡張子で終了するプレンテキストファイルに先ず書き込まれる。これらソースファイルはその後、java（登録商標）c等のJava（登録商標）コンパイラによって.classファイルへコンパイルされる。.classファイルは、物理プロセッサにネイティブなコードを含まず、代わりにバイトコードを含み、バイトコードは、Java(登録商標) Virtual Machine（Java(登録商標) VM）の機械言語である。ランチャツール（Java(登録商標).exe又はその他Java(登録商標)ランタイム環境）はその後、Java(登録商標) VMの場合にアプリケーションを動作する。
【０００５】
Java(登録商標) VMは、Java(登録商標)バイトコードをネイティブな命令に変換することによってアプリケーションを動作し、その命令は、コンピューティング装置の実際のオペレーティングシステム及びプロセッサに特有である。バイトコードがポータブルで設計される一方で、Java(登録商標) VMが実際のコンピューティング装置に特有なので、Java(登録商標) VMは、Java(登録商標)スタンダードと互換性を維持している各種タスクを実行するために修正されうる。
【０００６】
一般に、Java(登録商標)プログラムは、実行のためにクライアントへサーバによって提供されうる。Java(登録商標) Enterprise Editionによって提供されるようなクライアント−サーバエンタープライズ環境において、サーバはまた、クライアントによって実行されるJava(登録商標)プログラムと通信し、サーバによって実行されるデータベースアプリケーションとインタフェースするJava(登録商標)プログラムを実行しうる。これらJava(登録商標)プログラムは、クライアントがサーバによって記憶される情報にアクセスする時にボトルネックを含むことがある。例えば、ボトルネックは、サーバがクライアントによってアクセスされているデータをロックする時にサーバで発生することがある。これらボトルネックにより生じる遅延は、Java(登録商標)プログラムが複数のクライアントによって実行される時に増加することがある。
【０００７】
ボトルネックを測定する一つの方法は、以下の通りである。第１に、高負荷がサーバに提供される。これにより、拡張性の問題から生じるボトルネックを特定することを促進する。第２に、ソフトウェアが実行され、実際の待機時間が測定される。第３に、ボトルネックが特定され、取扱われる。第４に、実行、測定、特定及び取扱いからなる段階は、いくつかのボトルネックが他のボトルネックを隠しているかもしれないので、さらにボトルネックを特定するために反復して実行される。
【０００８】
上記方法では、多くの既存のシステムは、連続的にボトルネックを検出及び除去する。
【０００９】
また、ボトルネックは、Java(登録商標)言語の実装に限定されない。ボトルネックは、アクセスがデータ整合性を維持するよう調整されるその他分散型コンピューティング環境に存在しうる。
【発明の概要】
【課題を解決するための手段】
【００１０】
本発明の実施形態は、ハードウェアクライアント−サーバ環境のパフォーマンスを改善する。一つの実施形態において、本発明は、ハードウェアクライアント−サーバ環境で実装されるコンピュータプログラムのボトルネックを測定するコンピュータ実装方法を含む。方法は、ハードウェアクライアント−サーバ環境の測定のために実行パラメータを定義することを含む。方法はまた、インストラメンテーションコード（instrumentation code）を含むためにコードブロックを修正することを含む。インストラメンテーションコードは、実行パラメータに関する。方法はまた、修正されたコードブロックをハードウェアクライアント−サーバ環境で実行することを含む。方法はまた、実行パラメータに関し、コードブロックを実行することから生じるインストラメンテーションデータを生成することを含む。方法はまた、生成されたインストラメンテーションデータを出力することを含む。
【００１１】
この方法において、ボトルネックが測定でき、測定されたボトルネックを記憶でき、対象のボトルネックが特定でき、ハードウェアクライアント−サーバ環境の局面がボトルネックを取扱うために調整できる。何千もの同期点が検出され測定されることがあるので、ソーティングは有益であるが、それらの多くは、訂正を要求する問題を呈しない。
【図面の簡単な説明】
【００１２】
【図１Ａ】図１Ａは、どのようにボトルネックがもう一つのボトルネックを隠すのかを示す。
【図１Ｂ】図１Ｂは、どのようにボトルネックがもう一つのボトルネックを隠すのかを示す。
【図２】図２は、本発明の実施形態によるクライアント−サーバ環境のブロック図である。
【図３】図３は、本発明の実施形態によるボトルネック測定過程のフローチャートである。
【図４】図４は、本発明の実施形態によるボトルネックメトリクスを示す。
【図５Ａ】図５Ａは、本発明の実施形態によるコードブロック修正の例を示す。
【図５Ｂ】図５Ｂは、本発明の実施形態によるコードブロック修正の例を示す。
【図６】図６は、本発明の実施形態を実装するための例示的なコンピュータシステム及びネットワーク１４００のブロック図である。
【図７Ａ】図７Ａは、どのようにボトルネックがコンピュータプログラムシステムで検出及び除去されうるかを示す。
【図７Ｂ】図７Ｂは、どのようにボトルネックがコンピュータプログラムシステムで検出及び除去されうるかを示す。
【図７Ｃ】図７Ｃは、どのようにボトルネックがコンピュータプログラムシステムで検出及び除去されうるかを示す。
【図８Ａ】図８Ａは、どのようにボトルネックが本発明の実施形態により測定されるかを示す。
【図８Ｂ】図８Ｂは、どのようにボトルネックが本発明の実施形態により測定されるかを示す。
【発明を実施するための形態】
【００１３】
コンピュータプログラムのボトルネックを特定するための手法は、以下に説明される。以下の説明において、説明のために、複数の例及び特定の詳細は、本発明の完全な理解を提供するために示される。しかし、特許請求の範囲によって定義される本発明は、以下に説明するこれらの例における、又は他の特徴との組合せにおける、一部又は全ての特徴を含み、以下に説明する特徴及び概念の変更及び均等物をさらに含むことが当業者にとって明らかである。
【００１４】
一般に、ウェブサーバは、同時に複数の要求を扱うよう設計される。理想的には、サーバは、次々に要求をシリアル化しない。しかし、サーバのいくつかの要素は、同期を必要とするので（例えば、データ記憶ユニット）、サーバは、これら要求を同期化し、同期化したコードセグメントを互いに待機させる。そのような危険なセクション（critical section）は、“ボトルネック”と呼ばれる。２つの要求がそのようなセクションに入ることを希望する時、それらのうち１つのみが入り、その他が待機する。さらに要求が到着する場合、それらも待機する。これは、単一の要求（又は単一のルーチン）に対する“待機時間”と呼ばれることがある。また、危険なセクションがもう一つの危険なセクション内にある場合（“ネスティング”と呼ばれる）、その後要求は、内部セクションを待機しないので、“隠され「hidden」”たままである。任意のその他ネスト化された危険なセクションも、隠されたままである。
【００１５】
図１Ａ〜１Ｂは、どのようにボトルネックがもう一つのボトルネックを隠しうるのかを示す。図１Ａは、ボトルネックの隠しを示し、図１Ｂは、ボトルネックのシリアル化を示す。矢印は、同時に動作するサブプロセス、例えばJava(登録商標)スレッドを示し、それは、サーバによって処理されるクライアント要求に対応しうる。図１Ａにおいて、ボトルネック１２は、待機時間１４をもたらし、ボトルネック１６は、待機時間１８をもたらす。ボトルネック１２は、ボトルネック１６を隠す。ボトルネック１６は、ボトルネック１２が特定され取扱われるまで現れない。図１Ｂにおいて、ボトルネック２２は、待機時間２４をもたらし、ボトルネック２６は、待機時間２８をもたらす。ボトルネック２２は、ボトルネック２６が待機時間及びコンテンションのような、任意の並行処理（concurrency）効果に関与しないように、ルーチンをシリアル化する。一度ボトルネック２２が特定され取扱われた場合、ボトルネック２６の待機時間２８は、特定され取扱われうる。図７Ａ〜７Ｃは、ボトルネックのシリアル化について、さらに詳細を提供する。
【００１６】
図７Ａ〜７Ｃは、どのようにボトルネックがコンピュータプログラムシステムで検出され移動されうるのかを示す。図７Ａは、パイプのように視覚化しうるコンピュータプログラムシステムにおける処理フロー７００を示す。処理フロー７００は、２つのボトルネックＢ１及びＢ２を有する。ボトルネックＢ１及びＢ２は、コンピュータプログラム同期点に対応しうる。
【００１７】
図７Ｂは、高処理負荷７０２が処理フロー７００に適用されることを示す。ボトルネックＢ１は、処理負荷７０２を抑制する。ボトルネックＢ１は、点７０４及び点７０６で処理フロー７００を測定して差異に注目することによって検出される。ボトルネックＢ２は、点７０６及び点７０８における処理フロー間の差異がないので、検出できないことが分かる。
【００１８】
図７Ｃは、（図７Ｂと比較して）ボトルネックＢ１が検出され移動された後の処理フロー７００を示す。再び、高処理負荷７０２が処理フロー７００に適用され、ここでボトルネックＢ２は、処理負荷７０２を抑制する。ボトルネックＢ２は、点７０６及び点７０８における処理フロー間の差異に注目することによって検出される。
【００１９】
図２は、本発明の実施形態によるクライアント−サーバ環境１００のブロック図である。クライアント−サーバ環境１００は、ネットワークを介して接続されたアプリケーションサーバ１０２、クライアント１０４、及びデータベースサーバ１２４を含む。クライアント−サーバ環境１００は、“３階層アーキテクチャ”と呼ばれることがある。クライアント−サーバ環境１００は、Java(登録商標) Enterprise Edition を実装しうる。クライアント−サーバ環境１００のさらに特定のハードウェア詳細は、図６に示すことができる。
【００２０】
ネットワークは、ローカルエリアネットワーク、広域ネットワーク、又はインターネットのようなもう一つのネットワークタイプでもよい。
【００２１】
クライアント１０４は、仮想マシン１１２を実装する。仮想マシン１１２は、Java(登録商標)プログラムを実行するJava(登録商標) 仮想マシンでもよく、クライアント１０４は、アプリケーションサーバ１０２からそのプログラムを受取る。クライアントは、３階層アーキテクチャのうち“プレゼンテーション層”を実装しうる。一つのクライアント１０４より多くのクライアントが存在しうる。
【００２２】
アプリケーションサーバ１０２は、仮想マシン１２２、アプリケーション（コンピュータプログラム）１２８、及び並行処理プロファイラ１３０を実装する。仮想マシン１２２は、（以下に説明するように並行処理プロファイラ１３０によって修正されうる）アプリケーション１２８を実行する。仮想マシン１２２は、Java(登録商標)プログラムを実行するJava(登録商標)仮想マシンでもよい。一つ以上のコンピュータプログラム１２８は、実行のためにクライアント１０４に提供されてもよい。コンピュータプログラム１２８は、Java(登録商標)プログラムでもよい。アプリケーションサーバ１０２は、３階層アーキテクチャのうち“アプリケーション層”を実装しうる。一つより多いアプリケーションサーバ１０２が存在しうる。
【００２３】
データベースサーバ１２４は、データベース１２６を実装する。データベース１２６は、問合せされ、追加され、削除される等の基礎データを記憶する。データベースサーバ１２４は、３階層アーキテクチャのうち“データ層”を実装しうる。一つより多いデータベースサーバ１２４が存在しうる。
【００２４】
クライアント−サーバ環境１００に対する日常の動作において、並行処理プロファイラ１３０が省略されてもよい。日常の動作の一例は、以下の通りである。データベース１２６は、会計データを記憶する。データベースサーバ１２４は、例えばデータベース１２６及びその他ハードウェア又はユーザインタフェース要素間をインタフェースし、データベース１２６にデータを追加し、データベースに問合せ又はその他データ操作を送信し、データベース１２６から情報を抽出し、表示又は報告等する。仮想マシン１２２は、例えばデータベースサーバ１２４とクライアント１０４との間をインタフェースし、プログラムを実行し、データベース１２６に追加されるデータをクライアント１０４から受取り、データ操作の要求をクライアント１０４から受取り、又は抽出された情報をクライアント１０４へ送信し、表示等する。仮想マシン１２２のこれらアクションは、コンピュータプログラム１２８を実行することによって制御される。仮想マシン１２２のこれらアクションは、ボトルネックに直面しうる。
【００２５】
並行処理プロファイラ１３０は、仮想マシン１２２がコンピュータプログラム１２８を実行する時に生じるボトルネックを検出するためにアプリケーションサーバ１０２に実装されてもよい。これらボトルネックは、データベースサーバ１２４に相互作用する時、又はデータベース１２６にアクセスする時、データロックから生じることがある。クライアント−サーバ環境において、これらボトルネックは、クライアント１０４との相互作用からも生じることがある。並行処理プロファイラ１３０の詳細は、以下に提供される。
【００２６】
図３は、本発明の実施形態によるボトルネックを測定する処理２００のフローチャートである。処理２００は、並行処理プロファイラ１３０によって実装されてもよい。並行処理プロファイラ１３０は、コンピュータプログラムを実行して処理２００を実装してもよい。コンピュータプログラムは、コンピュータプログラム１２８とともに記憶されてもよい。処理２００を実装するコンピュータプログラムは、Java(登録商標)言語で書き込まれてもよい。
【００２７】
ステップ２０２において、一つ以上の実行パラメータは、測定のために定義される。実行パラメータは、アプリケーションサーバ１０２が実行するコンピュータプログラム１２８に関する。実行パラメータは、並行（parallelism）、スループット、通し時間（through time）、極限スループット（limit throughput）、及び利用パラメータ（utilization parameter）を含んでもよい。実行パラメータは、コンピュータプログラム１２８のボトルネックに関する。実行パラメータは、以下により詳細に検討される。
【００２８】
ステップ２０４において、ボトルネックについて評価されるコンピュータプログラムは、インストラメンテーションコード（instrumentation code）を含むように修正される。コンピュータプログラムは、アプレット、階級、関数、手順、方法、オブジェクト、インタフェース、変数等のようなコードブロックを含む。インストラメンテーションコードは、実行パラメータがそのコードブロックについて測定されうるように一つ以上のコードブロックに追加される。
【００２９】
ステップ２０６において、修正されたコードブロックが実行される。アプリケーションサーバ１０２によって実装される時、並行処理プロファイラ１３０は、修正されたコードブロックを仮想マシン１２２に提供して実行する。
【００３０】
ステップ２０８において、修正されたコードブロックがステップ２０６で実行されると、インストラメンテーションデータが生成される。インストラメンテーションデータは、実行パラメータに対応し、修正されたコードブロックの実行によって生じる。インストラメンテーションデータは、位置識別子、スレッド識別子、モニタ識別子、入力時間、及び終了時間のような各ボトルネックに関する情報を含んでもよい。インストラメンテーションデータは、スループット測定、通し時間測定、極限スループット測定、及び利用測定のようなパフォーマンス情報を含んでもよい。
【００３１】
ステップ２１０において、インストラメンテーションデータが出力される。一つの実施形態によると、並行処理プロファイラ１３０は、クライアント１０４にインストラメンテーションデータを送信するように仮想マシン１２２を指示し、仮想マシン１１２は、ユーザが読むためにインストラメンテーションデータを表示するようクライアント１０４に命令する。インストラメンテーションデータは、重要なボトルネックが訂正又は除去のために簡単に特定されうるように利用測定のようなパラメータによって減少順序で記憶又はそうでなければ表示されてもよい。
【００３２】
クライアント−サーバ環境１００、並行処理プロファイラ１３０、及び処理２００に関する詳細は、以下に提供される。
【００３３】
ソフトウェアボトルネック
上記検討の通り、ボトルネックは、スループットの低下をもたらす。コンピュータプログラムにおいて、ボトルネックは、異なるルーチン間の同期点によって通常引起される。これらボトルネックは、新たなハードウェアを追加することによって解消できない論理的限界を示すので危険である。
【００３４】
コンピュータプログラムボトルネックの例は、並行処理ロック及びリソース限界を含む。並行処理ロックは、並行処理問題を防ぐために異なるルーチンで使用される。例は、ファイルを修正する前にファイル上に排他的（ライト）ロックを設定すること、及びファイルを読み取る前にファイル上に共有（リード）ロックを設定することである。リソース限界は、複数のルーチンが、制限された一組のリソースからリソースを得る時である。例は、一組の１０個からなるデータベース接続を維持するプログラムである。プログラムは、同時に複数のクライアントに供することができるが、最大で１０個のクライアントが、時間内におけるある時点で接続を使用することができる。
【００３５】
本発明の実施形態によると、拡張性の問題は、低負荷で分析される。大きく高価なハードウェハが不要である。
【００３６】
本発明の実施形態によると、全ての可能性のあるボトルネックは、リスト化される。隠されるボトルネックがない。
【００３７】
本発明の実施形態によると、ボトルネックは、最も重要なボトルネックから最も重要でないボトルネックへの順序で測定され記憶される。
【００３８】
図８Ａ〜８Ｂは、どのようにボトルネックが本発明の実施形態により測定されるかを示す。図８Ａは、図７Ａと同一であり、処理フロー７００、ボトルネックＢ１及びＢ２を示す。図８Ｂは、低処理負荷７１２を示す。一例として、低処理負荷７１２は、コンピュータプログラムを介して実行する単一のルーチンでもよい。単一のルーチンはその後使用され、ボトルネックをトレースし、そのメトリクスを記述する。一つのメトリックは、一度にボトルネックを通過できるルーチン数である。もう一つのメトリックは、単一のルーチンがボトルネックを通過するのに要する時間である。メトリクスは、以下に詳細に説明される。
【００３９】
ボトルネックメトリクスの定義
以下の例を検討する。小さなウェブサーバは、一つのデータベース接続を有する。複数の同時要求が以下続く。１．明示ロックを得る（要求はここで待機しうる）。２．接続を得る。３．データベース命令を実行する。例えば、約０．０５秒間のＳＱＬ（構造化問合せ言語）動作。４．明示ロックを解除する。
【００４０】
１秒に７個の問合せの割合という負荷を仮定すると、以下の計算が導かれる。各動作は、０．０５秒かかるので、１秒に最大で２０個の動作が実行されうる（１／０．０５＝２０）。現在負荷は、１秒に７個の動作なので、ボトルネックは、３５％で“利用”される。付加が最大で１秒に２０個の動作に到達する場合、利用が１００％になる。
【００４１】
以下のメトリクスが定義される。並行［Ｐ］、スループット［Ｔ］、通し時間［Δｔ］、極限スループット［μＴ］、及び利用［Ｕ］。
【００４２】
並行［Ｐ］は、ボトルネック内で動作可能な最大ルーチン数である。メトリックは、コンピュータプログラム論理から暗示され、ハードウェア又は負荷に依存する必要がない。上記例において、１つの要求のみが時間内のある時点で接続に働きかけることができるので［Ｐ］＝１である。Ｎ個の接続を有する場合、並行は、Ｎに等しくなる。故に、並行は、負荷に依存しないがボトルネックデザインに依存する。
【００４３】
スループット［Ｔ］は、ルーチンが１秒あたりにボトルネックを通過する数である、１秒あたりの動作数である。このメトリックは、負荷に依存する。通常、２重の負荷から２重のスループットを予期する。
【００４４】
通し時間［Δｔ］は、一つのルーチンがボトルネックを通過するのに必要な時間である。実施形態によると、通し時間は、非並行処理環境で測定される（即ち、一つのルーチン）。これにより、待機時間のような並行処理の副作用を含むことなく、“クリーン”な通し時間測定を可能にする。実施形態によると、低負荷は、並行処理プロファイラ１３０を動作する時に使用される。
【００４５】
極限スループット［μＴ］は、特定時間で実行されうる最大動作数である（例えば、１秒あたりの最大動作数）。極限スループットは、以下のように通し時間から導かれる。
【００４６】
【数１】
2010129079.tif 000003
上記例において、［μＴ］＝１／０．０５＝２０動作（１秒あたり）である。
【００４７】
利用［Ｕ］は、スループット（測定された）及び極限スループット間の割合であり、以下の通りである。
【００４８】
【数２】
2010129079.tif 000004
上記例において、［Ｕ］＝７／２０＝３５％である。スループットは、極限スループットよりも大きくなりえないので以下の通りである。
【００４９】
【数３】
2010129079.tif 000005
【００５０】
図４は、これらボトルネックメトリクスを示す。通し時間［Δｔ］は、ボトルネック４００の高さによって表される。並行［Ｐ］は、ボトルネック４００の部分間の幅によって表される。スループット［Ｔ］は、ボトルネック４００を通過するルーチン（矢印４０２）によって表される。
【００５１】
実施形態によると、並行処理プロファイラ１３０は、存在する全てのボトルネックと同数の利用を計算するために、上記定義されたメトリクスを測定する。並行処理プロファイラ１３０は、各コードブロックをインストラメント（instrument）し、一つ以上の以下の情報を記録する。
位置：これは、階級、方法、及びボトルネックの線番号である。
スレッド：これは、スレッド識別子である（ルーチン識別子）。
モニタ：これは、ルーチンが努めるリソースである（例えば、同期モニタ又はロック）。
入力時間：これは、スレッドがボトルネックに入る時間である。
終了時間：これは、スレッドがボトルネックから出る時間である。
【００５２】
コンピュータプログラムのインストラメンテーションは、バイトコードの修正を介して実行されうる。並行処理プロファイラ１３０がJava(登録商標)プログラムを測定する実施形態によると、同期化されたコードブロックは、図５Ａ〜５Ｂに示す通り修正されうる。
【００５３】
図５Ａ〜５Ｂは、本発明の実施形態によるコードブロック修正の一例を示す。図５Ａは、修正前のコードブロックを示し、図５Ｂは、修正後のコードブロックを示す。Java(登録商標)実装において、モニタ入力及びモニタ終了命令は、Java(登録商標)同期ステートメントによって使用され、複数のスレッド間のオブジェクトに対するアクセスを調整する。各スレッドは、独自のトレースファイルを記述しているので、並行処理プロファイラ１３０によって引起されうる任意のコンテンションが回避される。
【００５４】
例
並行処理プロファイラ１３０の実施形態は、SPECjAppServerベンチマークアプリケーションのボトルネックを見つけるために使用され、拡張性を高める。（例えば、完全な拡張性によると、ハードウェアを二重にすれば、負荷機能「load capability」を二重にする。ボトルネックの存在は、拡張性を完全にするのを妨げるので、ボトルネックを特定及び除去することで拡張性を改善する。）並行処理プロファイラ１３０は、Java(登録商標)サーバ設定の全２値を変換し、それは、約３５０.jarファイルであった。有効動作は、トランザクション速度５で実行された（５０HTTP［hypertext transfer protocol］クライアント及び１５RMI［remote method invocation］クライアント）。（これらパラメータは、実行された負荷を示す負荷テストパラメータであり、例えばクライアントコンピュータ数に対応する。）並行処理プロファイラ１３０は、表１がトップレベル情報を要約する報告を生成した。
【００５５】
【表１】
2010129079.tif 000006
【００５６】
報告の情報によると（例えば、表１）、コンフィギュレーションの専門家であればその後、アプリケーションサーバ１０２の何の局面がボトルネックに含まれうるのかを判断し、これら局面を調整し、パフォーマンスを改善することができる。おおまかに調整されうる局面は、コンフィギュレーション問題、プログラミング非効率等を含む。特に、コンフィギュレーションの専門家であれば、アプリケーションサーバ１０２を実装するのに用いるハードウェア要素、アプリケーションサーバ１０２によって実行されるコンピュータプログラムのプログラミング、仮想マシン１２２のコンフィギュレーション、データベースサーバ１２４によって実行されるコンピュータプログラムのプログラミング、Java（登録商標） Database Connectivity (JDBC) APIドライバのプログラミング、ネットワークのコンフィギュレーション等を調整することができる。
【００５７】
上記検討の通り、コードブロックが設置され、パフォーマンス測定は、（例えば）一つの要求／ルーチン（“トレーシングルーチン”と呼ばれる）を用いて実行される。そのようなトレーシングルーチンは、システム要素上の高負荷を要求しない。ボトルネックは、上記説明した測定メトリクスに従って測定される。一度ボトルネックが測定されると、最も重要なボトルネックを特定するために記憶されうる。その後、コンフィギュレーションの専門家は、所定量の努力で最もよい結果が達成されるように、重要なボトルネックへの取扱いについて必要に応じて集中できる。
【００５８】
図６は、本発明の実施形態を実装するための例示的なコンピュータシステム及びネットワーク１４００のブロック図である。コンピュータシステム１４１０は、情報通信のためにバス１４０５又はその他通信メカニズム、及び情報処理のためにバス１４０５に接続されるプロセッサ１４０１を含む。コンピュータシステム１４１０はまた、プロセッサ１４０１によって実行されるべき情報及び指令を記憶するためにバス１４０５に接続されるメモリ１４０２を含み、それら情報及び指令には、上記説明した手法を実行するための情報及び指令が含まれる。このメモリはまた、プロセッサ１４０１によって実行されるべき指令の実行の間、一時的な変数又はその他中間情報を記憶するのに使用されうる。このメモリの可能な実装は、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、又はその両方でもよいが、それらに限定されない。記憶装置１４０３はまた、情報及び指令を記憶するために提供される。記憶装置の共通形式は例えば、ハードドライブ、磁気ディスク、光学ディスク、ＣＤ−ＲＯＭ、ＤＶＤ、フラッシュメモリ、ＵＳＢメモリカード、又はコンピュータ読取可能な任意のその他媒体を含む。記憶装置１４０３は、例えば上記手法を実行し、又は構成概念を具現化するために、ソースコード、２進コード、又はソフトウェアファイルを含みうる。
【００５９】
コンピュータシステム１４１０は、コンピュータユーザに情報を表示するために、陰極線管（ＣＲＴ）又は液晶ディスプレイ（ＬＣＤ）のようなディスプレイ１４１２にバス１４０５を介して接続されうる。キーボード及び／又はマウスのような入力装置１４１１は、ユーザからプロセッサ１４０１に情報及び命令の選択を通信するために、バス１４０５に接続される。これら要素の組合せによりユーザは、システムと通信することができる。いくつかのシステムにおいて、バス１４０５は、複数の専用バスに分割されてもよい。
【００６０】
コンピュータシステム１４１０はまた、バス１４０５に接続されるネットワークインタフェース１４０４を含む。ネットワークインタフェース１４０４は、コンピュータシステム１４１０及びローカルネットワーク１４２０間で双方向データ通信を提供しうる。ネットワークインタフェース１４０４は、例えば電話線上にデータ通信接続を提供するためにデジタル加入者線（ＤＳＬ）又はモデムでもよい。ネットワークインタフェースのもう一つの例は、互換ＬＡＮにデータ通信接続を提供するためにローカルエリアネットワーク（ＬＡＮ）カードである。無線リンクはまた、もう一つの例である。任意のそのような実装において、ネットワークインタフェース１４０４は、各種情報を示すデジタルデータストリームを伝える電気、電磁気、又は光学信号を送受信する。
【００６１】
コンピュータシステム１４１０は、ネットワークインタフェース１４０４を介してイントラネット又はインターネット１４３０へメッセージ又はその他インタフェースアクションを含む情報を送受信することができる。例えばインターネットにおいて、ソフトウェア要素又はサービスは、ネットワークにわたって複数の異なるコンピュータシステム１４１０又はサーバ１４３１、１４３２、１４３３、１４３４及び１４３５上に存在しうる。サーバ１４３１は、インターネット１４３０、ローカルネットワーク１４２０及びネットワークインタフェース１４０４を介してコンピュータシステム１４１０上の要素に一つの要素からアクション又はメッセージを送信してもよい。
【００６２】
コンピュータシステム及びネットワーク１４００は、アプリケーションサーバ１０２、クライアント１０４及びデータベースサーバ１２４を実装するために使用されるハードウェアでもよい。
【００６３】
上記説明は、Java(登録商標)環境に注目しているが、類似の環境は、ABAPTM環境、Ｃ＃環境、a.NETTM環境等の他の分散型コンピューティング環境においてボトルネックを特定及び測定するために実装されてもよい。
【００６４】
上記説明は、どのように本発明の局面が実装されうるのかの例に沿って、本発明の各種実施形態を示す。上記例及び実施形態は、実施形態のみであると見なされるべきでなく、特許請求の範囲によって定義される本発明の柔軟性及び利点を示すために提供される。上記開示及び特許請求の範囲に基づき、他の配列、実施形態、実装及び均等物は、当業者にとって明白であり、特許請求の範囲によって定義されるように本発明の精神及び範囲から逸脱することなく採用されうる。
【符号の説明】
【００６５】
２０２  同期ブロックにインストラメンテーションを追加
２０４  実行パラメータを定義
２０６  コードを実行
２０８  インストラメンテーションデータを記録
２１０  結果を表示
【図１Ａ】
2010129079.tif 000007
【図１Ｂ】
2010129079.tif 000008
【図２】
2010129079.tif 000009
【図３】
2010129079.tif 000010
【図４】
2010129079.tif 000011
【図５Ａ】
2010129079.tif 000012
【図５Ｂ】
2010129079.tif 000013
【図６】
2010129079.tif 000014
【図７Ａ】
2010129079.tif 000015
【図７Ｂ】
2010129079.tif 000016
【図７Ｃ】
2010129079.tif 000017
【図８Ａ】
2010129079.tif 000018
【図８Ｂ】
2010129079.tif 000019