(57)【要約】【課題】効率の良いプロファイリングを実現する。【解決手段】統計モード計測部２３１は、複数のメソッドから構成された実行プログラムを実行した際に、実行したメソッドの処理時間を計測する。そして、詳細計測対象設定部２４は、この計測した処理時間が所定の閾値以上の場合、その処理時間を有するメソッドを、詳細データ計測部２３２によるより詳細な計測の対象となるように設定する。詳細データ計測部は、詳細データ計測部２３２によって計測の対象として設定されているメソッドに対して、スタックトレースを取得するなど、より詳細な計測を行う。【選択図】図３
2008257287.tif 000002
【特許請求の範囲】
【請求項１】
複数のメソッドから構成されたプログラムを実行した際に、実行したメソッドの処理時間を計測する処理時間計測手段と、
前記処理時間計測手段により計測されたメソッドの処理時間が所定の閾値以上であるかを判別する処理時間判別手段と、
前記処理時間判別手段により処理時間が所定の閾値以上であると判別されたメソッドを、前記プログラムを実行した際の実行時間の主要な要因となる主要メソッドに設定する主要メソッド設定手段と、
前記主要メソッドが実行された際に、該主要メソッドの処理時間と該主要メソッドがどのようなメソッドを辿って呼び出されてきたのかを示すルート情報とを取得する、メソッド詳細情報取得手段と、
前記メソッド詳細情報取得手段により取得された前記主要メソッドの処理時間とルート情報とを、該主要メソッド毎に記憶するメソッド詳細情報記憶手段と、
を備えることを特徴とするプログラムプロファイリング装置。
【請求項２】
前記処理時間計測手段は、実行したメソッドの処理時間を該メソッド毎に累積して、累積した処理時間を該メソッドの処理時間とする、
ことを特徴とする、請求項１に記載のプログラムプロファイリング装置。
【請求項３】
前記閾値は、所定の時間内に前記処理時間計測手段で計測された処理時間の最大値を基準にした値である、
ことを特徴とする、請求項１又は２に記載のプログラムプロファイリング装置。
【請求項４】
所定の数を超えて前記メソッド詳細情報記憶手段に記憶されている主要メソッドに対して、前記主要メソッド設定手段によって設定した主要メソッドの設定を解除する主要メソッド設定解除手段をさらに備える、
ことを特徴とする、請求項１乃至３の何れか１項に記載のプログラムプロファイリング装置。
【請求項５】
前記主要メソッドが処理を待機している待ち時間を求める待ち時間求め手段をさらにそなえ、
前記メソッド詳細情報記憶手段は、前記待ち時間求め手段によって求められた待ち時間を前記主要メソッド毎に記憶する、
ことを特徴とする請求項１乃至４の何れか１項に記載のプログラムプロファイリング装置。
【請求項６】
複数のメソッドから構成されたプログラムを実行した際に、実行したメソッドの処理時間を計測する処理時間計測ステップと、
前記処理時間計測ステップにより計測されたメソッドの処理時間が所定の閾値以上であるかを判別する処理時間判別ステップと、
前記処理時間判別ステップにより処理時間が所定の閾値以上であると判別されたメソッドを、前記プログラムを実行した際の実行時間の主要な要因となる主要メソッドに設定する主要メソッド設定ステップと、
前記主要メソッドが実行された際に、該主要メソッドの処理時間と、該主要メソッドがどのようなメソッドを辿って呼び出されてきたのかを示すルート情報とを取得する、メソッド詳細情報取得ステップと、
前記メソッド詳細情報取得ステップにより取得された前記主要メソッドの処理時間とルート情報とを、該主要メソッド毎に記憶するメソッド詳細情報記憶ステップと、
を備えることを特徴とするプログラムプロファイリング方法。
【請求項７】
コンピュータを、
複数のメソッドから構成されたプログラムを実行した際に、実行したメソッドの処理時間を計測する処理時間計測手段と、
前記処理時間計測手段により計測されたメソッドの処理時間が所定の閾値以上であるかを判別する処理時間判別手段と、
前記処理時間判別手段により処理時間が所定の閾値以上であると判別されたメソッドを、前記プログラムを実行した際の実行時間の主要な要因となる主要メソッドに設定する主要メソッド設定手段と、
前記主要メソッドが実行された際に、該主要メソッドの処理時間と該主要メソッドがどのようなメソッドを辿って呼び出されてきたのかを示すルート情報とを取得する、メソッド詳細情報取得手段と、
前記メソッド詳細情報取得手段により取得された前記主要メソッドの処理時間とルート情報とを、該主要メソッド毎に記憶するメソッド詳細情報記憶手段と、
して機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のメソッドで構成されたプログラムを実行したときに、各メソッドの処理時間を測定したり、メソッド間の呼出関係を解析する、プログラムプロファイリング装置、プログラムプロファイリング方法、及びプログラムに関する。
【背景技術】
【０００２】
複数のメソッドで構成されたプログラムの処理性能の改善を目的として、プログラム全体の性能の低下に大きな影響を与える（ボトルネックとなる）メソッドを特定する必要がある。そのため、メソッドの処理時間を計測するなどの処理が行われている。
実際には、メソッドが呼び出されるルートによっても処理時間が異なる場合があるため、ボトルネックを特定するためにメソッドの処理時間を計測する際には、メソッド間の呼出関係も解析する必要がある。そして、解析した呼出関係に基づいて、メソッドの処理時間の計測を行う。このような一連の処理はプロファイリングと呼ばれている。
【０００３】
例えば、特許文献１は、ソースプログラムや実行プログラムを加工し、計測対象とするメソッドの前後にプローブを挿入し、このプローブの処理によってプロファイリングを行う技術を開示している。
【０００４】
しかし、特許文献１が開示する技術では、プログラムを実行した際に実行されるメソッドに挿入されているプローブが全て実行されるため、結果的に計測を行う必要性の低いプローブまで実行されてしまうことになる。したがって、より詳細な計測を行おうとすればするほどプローブの実行による実行環境への大きな負荷が生じ、計測結果の精度が低下してしまう。
【０００５】
そのため、以下に示すようなプロファイリングの手法が提案されている。
（ｉ）まず、ほぼ全てのメソッドを計測の対象とした統計的なデータを計測する第１の計測を行う。（ii）次に、この計測結果に基づいて、より詳細な計測を行うためのメソッドの絞り込みを行う。（iii）そして、この絞り込まれたメソッドに対してのみ、当該メソッドが実行される度に、一連の呼出関係にあるメソッドの実行時間も含めて処理時間を計測するといった、より詳細な計測を行う第２の計測処理を行う。
【０００６】
上述したプロファイリングの手法では、詳細な計測を行うメソッドが絞りこまれているため、実行環境への負荷の小さいプロファイリングを実現することが可能となる。
【特許文献１】特開２００４−９４３７４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかし、上述のプロファイリングの手法では、第１の計測と第２の計測とを別々に行う必要があり、この計測の度に計測対象システムの設定や、計測用シナリオの実行、計測結果の分析という手順が発生することになり、非効率的である。
【０００８】
本発明は、上記実状に鑑みてなされたものであり、効率的なプロファイリングが可能なプロファイリング装置等を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明の第１の観点に係るプロファイリング装置は、
複数のメソッドから構成されたプログラムを実行した際に、実行したメソッドの処理時間を計測する処理時間計測手段と、
前記処理時間計測手段により計測されたメソッドの処理時間が所定の閾値以上であるかを判別する処理時間判別手段と、
前記処理時間判別手段により処理時間が所定の閾値以上であると判別されたメソッドを、前記プログラムを実行した際の実行時間の主要な要因となる主要メソッドに設定する主要メソッド設定手段と、
前記主要メソッドが実行された際に、該主要メソッドの処理時間と該主要メソッドがどのようなメソッドを辿って呼び出されてきたのかを示すルート情報とを取得する、メソッド詳細情報取得手段と、
前記メソッド詳細情報取得手段により取得された前記主要メソッドの処理時間とルート情報とを、該主要メソッド毎に記憶するメソッド詳細情報記憶手段と、
を備えることを特徴とする。
【００１０】
前記処理時間計測手段は、実行したメソッドの処理時間を該メソッド毎に累積して、累積した処理時間を該メソッドの処理時間としてもよい。
【００１１】
前記閾値は、所定の時間内に前記処理時間計測手段で計測された処理時間の最大値を基準にした値であってよい。
【００１２】
所定の数を超えて前記メソッド詳細情報記憶手段に記憶されている主要メソッドに対して、前記主要メソッド設定手段によって設定した主要メソッドの設定を解除する主要メソッド設定解除手段をさらに備えてもよい。
【００１３】
前記主要メソッドが処理を待機している待ち時間を求める待ち時間求め手段をさらにそなえ、
前記メソッド詳細情報記憶手段は、前記待ち時間求め手段によって求められた待ち時間を前記主要メソッド毎に記憶してもよい。
【００１４】
上記目的を達成するため、本発明の第２の観点に係るプロファイリング方法は、
複数のメソッドから構成されたプログラムを実行した際に、実行したメソッドの処理時間を計測する処理時間計測ステップと、
前記処理時間計測ステップにより計測されたメソッドの処理時間が所定の閾値以上であるかを判別する処理時間判別ステップと、
前記処理時間判別ステップにより処理時間が所定の閾値以上であると判別されたメソッドを、前記プログラムを実行した際の実行時間の主要な要因となる主要メソッドに設定する主要メソッド設定ステップと、
前記主要メソッドが実行された際に、該主要メソッドの処理時間と、該主要メソッドがどのようなメソッドを辿って呼び出されてきたのかを示すルート情報とを取得する、メソッド詳細情報取得ステップと、
前記メソッド詳細情報取得ステップにより取得された前記主要メソッドの処理時間とルート情報とを、該主要メソッド毎に記憶するメソッド詳細情報記憶ステップと、
を備えることを特徴とする。
【００１５】
上記目的を達成するため、本発明の第３の観点に係るプログラムは、
コンピュータを、
複数のメソッドから構成されたプログラムを実行した際に、実行したメソッドの処理時間を計測する処理時間計測手段と、
前記処理時間計測手段により計測されたメソッドの処理時間が所定の閾値以上であるかを判別する処理時間判別手段と、
前記処理時間判別手段により処理時間が所定の閾値以上であると判別されたメソッドを、前記プログラムを実行した際の実行時間の主要な要因となる主要メソッドに設定する主要メソッド設定手段と、
前記主要メソッドが実行された際に、該主要メソッドの処理時間と該主要メソッドがどのようなメソッドを辿って呼び出されてきたのかを示すルート情報とを取得する、メソッド詳細情報取得手段と、
前記メソッド詳細情報取得手段により取得された前記主要メソッドの処理時間とルート情報とを、該主要メソッド毎に記憶するメソッド詳細情報記憶手段と、
して機能させる。
【発明の効果】
【００１６】
本発明によれば、１回のプログラムの実行で、統計的な情報と、詳細な情報とを同時に取得できるため、効率的なプロファイリングが可能となる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施形態に係るプログラムプロファイリング装置について、図面を参照して説明する。
プログラムプロファイリング装置１は、図１に示すように、通信部１１と、入力部１２と、出力部１３と、記憶部１４と、入出力Ｉ／Ｆ部１５と、制御部１６と、を備え、各部はバス１７を介して互いに接続されている。
【００１８】
通信部１１は、通信ネットワーク２を介して、ネットワーク上の情報処理装置等と通信を行うものであり、通信インタフェース等を備える。例えば、通信部１１が、プロファイリングの対象となる実行プログラムを受信することにより、プログラムプロファイリング装置１はプロファイリングの対象を取り込む。
なお、本実施形態でプロファイリングの対象とする実行プログラムは複数のクラスから構成され、各クラスは１つ以上のメソッドを備えているものとする。
【００１９】
入力部１２は、プログラムプロファイリング装置１に様々な情報を入力するために使用するものであり、ボタン、キー等の入力装置を備える。例えば、入力部１２には、後述する分析処理の開始指示情報等が入力される。
【００２０】
出力部１３は、様々な情報を出力するものであり、ディスプレイ等の表示装置を備える。例えば、出力部１３には、後述する分析処理において測定されたメソッド毎の処理時間の一覧画面等が表示される。
【００２１】
記憶部１４は、様々な情報やプログラム等を記憶するものであり、ハードディスク等の補助記憶装置を備える。例えば、記憶部１４は、分析処理を行う前に、予め、通信部１１等を介して取り込んだ実行プログラム等を記憶しておく。
また、記憶部は、図２に示すように、プローブ挿入対象記憶テーブル１４１と、メソッド統計情報記憶テーブル１４２と、コールグラフ情報記憶テーブル１４３と、メソッド情報記憶テーブル１４４と、メソッド詳細性能ログテーブル１４５と、を記憶する。
【００２２】
プローブ挿入対象記憶テーブル１４１は図４に示すように、プロファイリング対象の実行プログラムを構成するクラス毎に、該クラスにプローブを挿入するか否かを示す情報を記憶する。
【００２３】
メソッド統計情報記憶テーブル１４２は、図５に示すように、プログラムを実行した際の、メソッド毎の総実行時間と、総待ち時間と、実行回数とを記憶する。なお、総待ち時間とは、当該メソッドから呼び出されるメソッドの処理が完了するまで、当該メソッドの処理が待機してしている待ち状態の時間（待ち時間）をプログラムの開始から終了までで累算した時間である。
【００２４】
コールグラフ情報記憶テーブル１４３は、図６（Ａ）に示すように、処理（メソッド）間の呼出関係（呼出元メソッド名と呼出先メソッド名）および、その呼出関係が呼び出された回数（呼び出し回数）を記憶する。なお、コールグラフ情報記憶テーブル１４３に図６（Ａ）に示すような情報が記憶されている場合、この記憶情報から図６（Ｂ）に示すような呼出間系を表したグラフ（コールグラフ）を作成することができる。
【００２５】
メソッド情報記憶テーブル１４４は、図７に示すように、実行プログラムに含まれるメソッド毎に、メソッドＩＤと、トレース用ＩＤと、メソッド名と、該メソッドが属するクラスの識別情報（クラス名）と、計測可否情報とを記憶する。
メソッドＩＤは、後述するプローブ挿入処理において発行される、メソッドの識別情報である。
トレース用ＩＤは、後述するプローブ挿入処理において取得される、スタックトレースを取得する際に使用されるメソッドの識別情報である。例えば、実行プログラムがＪＡＶＡ（登録商標）である場合、このトレース用ＩＤはＪＡＶＡ仮想マシン・プロファイラインタフェースが発行するＩＤに相当する。
計測可否情報は、該メソッドを計測部が行うプロファイルの対象とするか否かを示す情報である。
【００２６】
メソッド詳細性能ログテーブル１４５は、プロファイリングの結果を記憶するテーブルである。メソッド詳細性能ログテーブル１４５は、図８に示すように、実行されたメソッドの処理毎に、実行される処理が属するスレッドの識別情報（図では名称）と、メソッドＩＤと、実行時間と、待ち時間と、スタックトレースとを記憶する。
スタックトレースは、処理がどのようなメソッドを辿って呼び出されてきたのかを示す情報であり、辿ってきたメソッドのトレース用ＩＤを順に記憶する。例えば、スタックトレースに「11111,22222,33333」という情報が記録されている場合、該スタックトレースを有する処理は、トレース用ＩＤ「11111」,「22222」,「33333」を有する各メソッドを順に辿って呼び出されてきたことを意味する。なお、トレース用ＩＤに対応したメソッド名などの情報は、前述したメソッド情報記憶テーブル１４４を参照して取得すればよい。
【００２７】
図１に戻り、入出力Ｉ／Ｆ部１５は、入出力機器３を接続するためのインタフェースである。例えば、プロファイリング対象となる実行プログラム等を、通信部１１ではなく、入出力Ｉ／Ｆ部１５を介して、ＣＤ−ＲＯＭドライブ等の入出力機器３から取り込むこともできる。
【００２８】
制御部１６は、データの演算処理を行うと共に、バス１７を介して通信部１１、入力部１２、出力部１３、記憶部１４、入出力Ｉ／Ｆ部１５を制御するものであり、ＣＰＵ（Central Processing Unit）１６１、ＲＯＭ（Read Only Memory）１６２、ＲＡＭ（Random Access  Memory）１６３等を備える。制御部１６における演算処理及び制御処理は、具体的には、ＣＰＵ１６１が、ＲＡＭ１６３を作業領域として使用して各種データを一時的に記憶させながら、ＲＯＭ１６２に記憶されている制御プログラムを実行することにより行われる。
【００２９】
例えば、制御部１６が、ＲＯＭ１６２や記憶部１４に記憶されている制御プログラムに従って上記各部を制御することにより、プログラムプロファイリング装置１において、プロファイリング処理等が行わ
【００３０】
図３は、本実施の形態に係るプログラムプロファイリング装置の機能構成例を示すブロック図である。
プログラムプロファイリング装置１は、機能的には、図示するように、プローブ挿入部２１と、プログラム実行部２２と、計測部２３と、詳細計測対象設定部２４と、計測方法選択部２５と、計測対象設定部２６とを備える。なお、これらの各構成要素は、図１に示した制御部１６が、同じく図１に示した通信部１１、入力部１２、出力部１３、記憶部１４、又は入出力Ｉ／Ｆ部１５を制御することにより、実現することができる。
【００３１】
プローブ挿入部２１は、プローブ挿入対象記憶テーブル１４１で挿入対象であると設定されている（可と設定されている）クラスのメソッドに対して、計測用のプローブを挿入するとともに、該メソッドをメソッド情報記憶テーブル１４４に登録する。
【００３２】
プログラム実行部２２は、プローブが挿入された実行プログラムを実行する。
【００３３】
計測部２３は、プログラム実行部２２によって実行された実行プログラムの処理（メソッド）に関する情報を計測する。計測部２３は、統計データ計測部２３１と、詳細データ計測部２３２とを備える。
統計データ計測部２３１は、プログラムに含まれるほぼ全てのメソッドを計測の対象とした計測を行う。
詳細データ計測部２３２は、プログラムを実行したときに比較的その実行時間に影響を与えるメソッドを計測の対象として、統計データ計測部２３１が行う計測よりも、より詳細な計測を行う。
【００３４】
詳細計測対象設定部２４は、詳細データ計測部２３２で計測の対象とするメソッドを設定する。
具体的には、詳細計測対象設定部２４は、メソッド統計情報記憶テーブル１４２に記憶されているメソッドの処理時間が所定の閾値以上のとき、該メソッドに埋め込まれている詳細監視フラグを有効化して、該メソッドを詳細データ計測部２３２による計測の対象にする。また、統計データ計測部２３１は、メソッド詳細性能ログテーブル１４５を参照することにより、詳細データ計測部２３２による計測が所定の回数以上行われたメソッドを判別し、その判別したメソッドに埋め込まれている詳細監視フラグを無効化して、該メソッドを詳細データ計測部２３２による計測の対象から外す。
【００３５】
計測方法選択部２５は、上述した計測処理を、計測部の統計データ計測部２３１と詳細データ計測部２３２のどちらで行うのかを切り換える処理を行う。
【００３６】
計測対象設定部２６は、メソッド情報記憶テーブル１４４の計測可否フラグを更新して、計測対象とするメソッドを設定する。
【００３７】
次に、プログラムプロファイリング装置１でプログラムを実行した際に、ボトルネックを見つけるためにプログラム（実行プログラム）をプロファイリングする処理について概略を説明する。
【００３８】
なお、前提として、予めプロファイリングの対象となる実行プログラムは、記憶部１４に格納されており、該実行プログラムを構成するクラスのうち、どのクラスをプローブの挿入対象とするかを示すための情報も、ユーザの準備作業等によりプローブ挿入対象記憶テーブル１４１に予め記憶されているものとする。
【００３９】
ユーザから、実行プログラムを計測するための指示入力が入力部１２よりなされ、その入力情報が制御部１６に送信されると、図９に示すプロファイリング処理が開始される。
【００４０】
まず、プローブ挿入部２１は、実行プログラムにメソッド計測用のプローブを挿入する（ステップＳ１０１）。
【００４１】
次に、計測対象設定部２６は、プログラムに含まれる全てのメソッドを、統計データ計測部２３１による計測の対象とするための設定を行う（ステップＳ１０２）。
【００４２】
次に、プログラム実行時に処理されるメソッドの処理時間等を計測する処理を行う（ステップＳ１０３）。
以上で、プロファイリング処理は終了する。
【００４３】
次に、先程概略を説明したプロファイリング処理を、図１０〜図１６を参照してより詳細に説明する。
【００４４】
（１）図９ステップＳ１０１のプローブ挿入処理：
まず、プローブ挿入部２１は、計測対象の実行プログラムを構成するクラスを１つＲＡＭ１６３に読み込む（図１０、ステップＳ２０１）。
【００４５】
続いて、プローブ挿入部２１は、プローブ挿入対象記憶テーブル１４１に記憶されている情報に基づいて、ステップS２０１で読み込んだクラスが、プローブ挿入対象になっているか否かを判断する（ステップS２０２）。
【００４６】
プローブ挿入対象のクラスでないと判断した場合（ステップＳ２０２；Ｎｏ）、プローブ挿入部２１は、処理をステップＳ２０７に移す。
プローブ挿入対象のクラスであると判断した場合（ステップＳ２０２；Ｙｅｓ）、プローブ挿入部２１は、クラスに含まれるメソッドに対して識別情報（メソッドＩＤ）を発行する（ステップＳ２０３）。
【００４７】
そして、プローブ挿入部２１は、メソッドＩＤを発行したメソッドの前後（実行段階でそのメソッドの実行の前後となる部分）に、計測用のプローブを挿入する（ステップＳ２０４）。
なお、メソッドの処理の前に挿入されたプローブを実行開始（検出用の）プローブ、メソッドの後に挿入されたプローブを実行終了（検出用の）プローブとして、以下説明する。
【００４８】
図１１は、メソッドと、該メソッドに挿入されるプローブの挿入の工程を説明するための図である。
なお、図１１に記載されているプログラムは、理解を容易にするため、バイナリデータである実行プログラムをJAVA（登録商標）の言語形式で表したものである。
図１１（Ａ）が示す実行プログラムには、クラス「Ａ」が含まれており、クラス「Ａ」には、引数が無いメソッド「sayHello」が含まれている。
この目的プログラムに計測用のプローブが挿入された例を図１１（B）に示す。クラス「Ａ」には、処理の先頭に、プローブの処理を実行させるか否かを示す監視フラグ「flag_1」と、詳細データ計測部２３２による詳細な計測を実行させるか否かを示す詳細監視フラグ「dflag_1」とが挿入される。また、メソッド「sayHello」の処理の開始時点には実行開始プローブ「enterMethod」が、処理の終了時点には実行終了プローブ「exitMethod」がそれぞれ挿入される。
この実行開始プローブ「enterMethod」および、実行終了プローブ「exitMethod」は、引数に詳細監視フラグ「dflag_1」を有する。詳細監フラグが無効である場合、プローブは、統計データ計測部２３１による測定のみを行う。詳細監視フラグが有効である場合、プローブは、統計データ計測部２３１による測定に加えて、詳細データ測定部２３２による測定も行う。
【００４９】
続いて、プローブ挿入部２１は、クラスに含まれるメソッドのトレース用ＩＤを取得する（ステップＳ２０５）。
なお、具体的には、実行プログラムを実行するための仮想マシン等が提供するＡＰＩ（Application Program Interface）の機能によりクラス情報を取得して、このクラス情報からトレース用ＩＤを取得する。
【００５０】
続いて、プローブ挿入部２１は、メソッド情報記憶テーブル１４４に、ステップＳ２０４でプローブを挿入したメソッドのメソッドＩＤ、クラス名、メソッド名および、ステップＳ２０５で取得したトレース用ＩＤとを対応付けて１つのエントリとして登録する（図１０，ステップＳ２０６）。
【００５１】
続いて、ステップＳ２０７で、プローブ挿入部２１は、読み込んでいない他のクラスが有るか否かを判別する。
読み込んでいない他のクラスが有ると判別した場合は（ステップＳ２０７；Ｙｅｓ）、プローブ挿入部２１は、ステップＳ２０１〜ステップＳ２０６の処理を繰り返す。
読み込んでいない他のクラスがないと判別した場合は（ステップＳ２０７；Ｎｏ）、プローブ挿入処理は終了する。
【００５２】
（２）図９ステップＳ１０２の計測対象設定処理：
計測対象設定部２６は、先程のプローブ挿入処理により登録されたメソッド情報記憶テーブル１４４の全エントリの計測可否フラグを、計測部２３による計測の対象とすることを表す「可」に設定する（図１２、ステップS３０１）。以上で、計測対象設定処理は終了する。
【００５３】
（３）図９ステップＳ１０3の計測処理：
プログラム実行部２２が、プローブ挿入済みの実行プログラムを実行すると、実行プログラムのメソッドに埋め込まれているプローブの処理により、統計モードでのメソッドの計測がなされる。
【００５４】
ここで、この実行プログラムの実行によって行われる、プローブが挿入されているメソッドの動作について、図１３、図１４を参照して説明する。
まず、メソッドの実行が開始されると、プログラム実行部２２は、該メソッドが計測の対象となっているか否かを判断する（図１３、ステップＳ４０１）。具体的には、プログラム実行部２２は、メソッド情報記憶テーブル１４４の計測可否情報に基づいて、この判断を行う。
【００５５】
メソッドが計測の対象となっていないと判断した場合（ステップＳ４０１；Ｎｏ）、プログラム実行部２２はステップＳ４０８に処理を移す。
【００５６】
メソッドが計測の対象となっていると判断した場合（ステップＳ４０１；Ｙｅｓ）、統計データ計測部２３１は、当該メソッドの処理が開始されたことを、そのときの時刻とともに、図１５（Ａ）のＬ１に示すように、ＲＡＭ１６３に記録する（ステップＳ４０２）。
【００５７】
続いて、計測方法選択部２５は、当該メソッドが詳細監視の対象とするメソッドから呼び出されたメソッドであるのか否かを判断する（ステップＳ４０３）。
【００５８】
なお、このステップＳ４０３の判断は、例えば以下のようにして行えばよい。
まず、スレッド毎にカウンタＣｎｔ（初期値０）を準備する。そして、このカウンタＣｎｔは、詳細データ計測部２３２による計測の対象に設定されているメソッドが実行されると１に設定され、それ以後メソッドが実行される度に、１つずつインクリメントするように設定する。そして、メソッドの実行開始時に、該カウンタＣｎｔをチェックして、カウンタＣｎｔの値が１となっている場合は、当該メソッドが詳細監視の対象とするメソッドから呼び出されたメソッドと判断すればよい。
例えば、図１６に示すような呼出関係を有するメソッドA〜Dがあるとする。すなわち、メソッドＡは、メソッドＢを呼び出し、メソッドＢはメソッドＣを呼び出し、メソッドＣはメソッドＤを呼び出す。なお、メソッドＢは、詳細データ計測部２３２による計測の対象として設定されているメソッドであるとする。
このような状態において、メソッドＡが実行されることにより、呼出関係によりメソッドＢ〜Ｄが順に実行されていく処理について考える。この場合、詳細監視の対象メソッドであるメソッドＢが実行された時点で、カウンタＣｎｔは１に設定される。そして、以降メソッドＣが実行されるとカウンタＣｎｔは２に、メソッドＤが実行されるとカウンタＣｎｔは３に設定される。すなわちこの例では、メソッドの実行開始時にカウンタＣｎｔのチェックを行い、値が１に設定されている当該メソッドＣを、詳細監視の対象とするメソッドから呼び出されたメソッドであると判断することができる。
【００５９】
図１３に戻り、当該メソッドが詳細監視の対象とするメソッドから呼び出されたメソッドであると判断すると（ステップS４０３；Ｙｅｓ）、詳細データ計測部２３２は、その呼出元の詳細監視の対象とするメソッドが待ち状態となったことを、該メソッドの処理が属するスレッドの識別情報（スレッド名）とそのときの時刻とともに、図１５（Ｂ）のＬ３に示すようにＲＡＭ１６３に記録し（ステップＳ４０４）、ステップＳ４０８に処理を移す。
【００６０】
当該メソッドが詳細監視の対象とするメソッドから呼び出されたメソッドでないと判断すると（ステップS４０３；Ｎｏ）、計測方法選択部２５は、当該メソッドが詳細データ計測部２３２による計測の対象と成っているか否かを判断する（ステップＳ４０５）。具体的には、当該メソッドに埋め込まれている詳細監視フラグから、この判断を行う。
【００６１】
当該メソッドが詳細データ計測部２３２による計測の対象でないと判断した場合（ステップＳ４０５；Ｎｏ）、計測方法選択部２５はステップＳ４０８に処理を移す。
【００６２】
当該メソッドが詳細データ計測部２３２による計測の対象である判断した場合（ステップＳ４０５；Ｙｅｓ）、詳細データ計測部２３２は、当該メソッドの処理が開始されたことを、当該メソッドの処理が属するスレッドの識別情報（スレッド名）とそのときの時刻とともに、図１５（Ｃ）のＬ５に示すように、ＲＡＭ１６３に記録する（ステップＳ４０６）。
【００６３】
続いて詳細データ計測部２３２はスタックトレースを行い、当該メソッドの処理が辿ってきたメソッドを、トレース用ＩＤのリスト形式で取得し、ＲＡＭ１６３に記憶する（ステップＳ４０７）。そして、処理をステップＳ４０８に移す。
なお、このスタックトレースは、実行プログラムを実行するための仮想マシン等が提供するＡＰＩの機能によって行えばよい。例えば、ＪＡＶＡ（登録商標）であれば、ＪＡＶＡ仮想マシン・プロファイラインタフェース (JVMPI)が提供するスタックトレースを行うためのメソッドであるGetCallTrace()を利用することで、この処理を行うことが可能となる。
【００６４】
ステップＳ４０８で、プログラム実行部２２は、当該メソッドに挿入されているプローブ以外のメソッドの処理（すなわち、プローブが挿入される前のメソッドの処理）を実行する。
【００６５】
続いて、ステップＳ４０８の処理が終了すると、プログラム実行部２２は、当該メソッドが計測の対象となっているか否かを判断する（図１４、ステップＳ４０９）。なお、この処理はステップＳ４０１と実質的に同等な処理である。
【００６６】
メソッドが計測の対象となっていないと判断した場合（ステップＳ４０９；Ｎｏ）、プログラム実行部２２は当該メソッドの実行を終了する。
【００６７】
メソッドが計測の対象となっていると判断した場合（ステップＳ４０９；Ｙｅｓ）、統計データ計測部２３１は、当該メソッドの処理が終了したことを、そのときの時刻とともに図１５（Ａ）のＬ２に示すように、ＲＡＭ１６３に記録する（ステップＳ４１０）。
【００６８】
そして、統計モード計測部２３１は、ステップＳ４０２とステップＳ４１０との処理によってＲＡＭ１６３に記録した情報から、当該メソッドの処理時間を算出する。さらに、統計モード計測部２３１は、算出した処理時間をメソッド統計情報記憶テーブル１４２の当該メソッドの総実行時間に累算すると共に、実行回数を１プラスする。
例えば、図１５（Ａ）に示すような情報がＲＡＭ１６３に記憶されている場合には、メソッド統計情報記憶テーブル１４２のメソッドＩＤ「０１」を有するエントリに格納されているメソッドの処理時間に４秒が加算され、またその実行回数が１プラスされる。
【００６９】
続いて、統計モード計測部２３１は、ステップＳ４０２とステップＳ４１０との処理によってＲＡＭ１６３に記録した情報から、当該メソッドの待ち時間を算出し、算出した待ち時間をメソッド統計情報記憶テーブル１４２の当該メソッドの総待ち時間に累算する（ステップＳ４１２）。
例えば、ステップＳ４０２とステップＳ４１０との処理により、図１５（Ｄ）に示すような情報がＲＡＭ１６３に記憶されている場合には、メソッド０１の待ち時間は、メソッド０１が呼出すメソッド０２の処理時間である３秒と求めることができ、メソッド０１の総待ち時間は３秒プラスされる。
また、この総待ち時間を求める処理は、実行プログラムを実行するための仮想マシン等が提供するＡＰＩを利用することにより求めてもよい。
【００７０】
続いて、統計モード計測部２３１は、当該メソッドが、別のメソッドから呼び出されて実行されている場合には、その呼出元、呼出先の対応関係をコールグラフ情報記憶テーブル１４３に記憶する（ステップＳ４１３）。
例えば、ステップＳ４０２とステップＳ４１０との処理により、図１５（Ｄ）に示すような情報がＲＡＭ１６３に記憶されている場合には、呼出元をメソッド「０１」、呼出先をメソッド「０２」、呼出回数「１」とするエントリ情報をコールグラフ情報記憶テーブル１４３に登録する。なお、コールグラフ情報記憶テーブル１４３に既に記憶されている呼出先と呼出元の対応関係である場合には、その対応関係の呼出回数をプラス１する処理を行う。
また、この呼出先の対応関係は、実行プログラムを実行するための仮想マシン等が提供するＡＰＩを利用することにより求めてもよい。
【００７１】
続いて、計測方法選択部２５は、当該メソッドが詳細データ計測部２３２の計測対象とするメソッドから呼び出されたメソッドであるのか否かを判断する（ステップＳ４１４）。なお、この判断処理はステップＳ４０３と実施的に同等な処理である。
【００７２】
当該メソッドが詳細監視の対象とするメソッドから呼び出されたメソッドであると判断すると（ステップS４１４；Ｙｅｓ）、詳細データ計測部２３２は、その呼出元の詳細監視の対象とするメソッドの待ち状態が解除されたことを、該メソッドの処理が属するスレッドの識別情報（スレッド名）とそのときの時刻とともに、図１５（Ｂ）のＬ４に示すようにＲＡＭ１６３記録する（ステップＳ４１５）。
【００７３】
そして、ステップＳ４０４とステップＳ４１５とでＲＡＭ１６３に記憶した情報から、当該メソッドの呼出元となる詳細監視対象のメソッドの待ち時間を求め、詳細性能ログテーブルに記憶する（ステップＳ４１６）。そして、処理をステップＳ４２１に移す。
例えば、ステップＳ４０４とステップＳ４１５の処理により、図１５（Ｂ）に示すような情報がＲＡＭ１６３に記憶されている場合、詳細データ計測部２３２は、メソッド詳細性能ログテーブル１４５のスレッド「＃１」、メソッド０１を有するエントリの待ち時間が「１０秒」と記憶される。
【００７４】
当該メソッドが詳細監視の対象とするメソッドから呼び出されたメソッドでないと判断すると（ステップS４１４；Ｎｏ）、計測方法選択部２５は、当該メソッドが詳細データ計測部２３２による計測の対象と成っているか否かを判断する（ステップＳ４１７）。なお、この判断処理はステップＳ４０５と実施的に同等な処理である。
【００７５】
当該メソッドが詳細データ計測部２３２による計測の対象でないと判断した場合（ステップＳ４１７；Ｎｏ）、計測方法選択部２５はステップＳ４２１に処理を移す。
【００７６】
当該メソッドが詳細データ計測部２３２による計測の対象であると判断した場合（ステップＳ４１７；Ｙｅｓ）、詳細データ計測部２３２は、当該メソッドの処理が終了したことを、当該メソッドの処理が属するスレッドの識別情報（スレッド名）とそのときの時刻とともに、図１５（Ｃ）のＬ６に示すように、ＲＡＭ１６３に記録する（ステップＳ４１８）。
【００７７】
そして、詳細データ計測部２３２は、ステップＳ４０６とステップＳ４１８との処理によってＲＡＭ１６３に記録した情報から、メソッド詳細性能ログテーブル１４５に登録するためのエントリ情報を作成し、登録する（ステップＳ４１９）。
例えば、ステップＳ４０６とステップＳ４１８の処理により、図１５（Ｃ）に示すような情報がＲＡＭ１６３に記憶されている場合、詳細データ計測部２３２は、スレッド「＃１」、メソッド「０１」、実行時間「４秒」のエントリをメソッド詳細性能ログテーブル１４５に記憶する。
【００７８】
次に、詳細データ計測部２３２は、ステップＳ４０７でＲＡＭ１６３に記憶したトレース用ＩＤのリストを、ステップＳ４１９で登録したエントリのスタックトレースに登録し（ステップＳ４２０）、処理をステップＳ４２２に移す。
【００７９】
ステップＳ４２１において、詳細計測対象設定部２４は、メソッド統計情報記憶テーブル１４２に記憶されている情報に基づいて、当該メソッドの総処理時間が、所定の閾値（例えば６０秒）以上であるか否かを判別する。
なお、この閾値は、所定の時間内にメソッド統計情報記憶テーブル１４２に記憶された総処理時間の最大値を基準とした値（例えば最大値の８０％）などの、動的に変化する値であっても良い。
【００８０】
当該メソッドの総処理時間が所定の閾値以上でないと判別すると（ステップＳ４２１；Ｎｏ）、詳細計測対象設定部２４は当該メソッドの処理を終了する。
【００８１】
当該メソッドの総処理時間が所定の閾値以上であると判別すると（ステップＳ４２１；Ｙｅｓ）、詳細計測対象設定部２４は当該メソッドに埋め込まれている詳細監視フラグを有効化して、当該メソッドを詳細データ計測部２３２による計測の対象となるように設定し（ステップＳ４２３）、当該メソッドの処理を終了する。
【００８２】
ステップＳ４２２において、詳細計測対象設定部２４は、当該メソッドの処理によるメソッド詳細性能ログテーブル１４５のエントリが、所定の数（例えば２０）以上登録されているか否かを判断する。
【００８３】
所定の数以上登録されていないと判断すると（ステップＳ４２２；Ｎｏ）、詳細計測対象設定部２４は当該メソッドの処理を終了する。
【００８４】
所定の数以上登録されていると判断すると（ステップＳ４２２；Ｙｅｓ）、詳細計測対象設定部２４は当該メソッドに埋め込まれている詳細監視フラグを無効化して、当該メソッドを詳細データ計測部２３２による計測の対象とならないように設定し（ステップＳ４２４）、当該メソッドの処理を終了する。
【００８５】
以上で、プローブが挿入されたメソッドが実行された場合の処理は終了する。そして、実行プログラムを実行したときに実行される全てのプローブが挿入されているメソッドに対して、前述の処理が実行される。そして、プログラムの実行が完了した時点で、計測処理は終了し、図９に示すプロファイリング処理は終了する。
【００８６】
以上説明したように、この実施の形態によれば、プログラムを実行した際に実行されるほぼ全てのメソッドを測定対象とした統計データ計測部２３１による計測が行われるとともに、その計測によって求められたメソッドの総実行時間に基づいて、詳細データ計測部２３２による監視の対象となるメソッドが随時設定される。そして、この設定がなされたメソッドに対しては、詳細データ計測部２３２による計測が行われる。
そのため、プログラムの実行回数が１回で、ほぼ全てのメソッドを測定対象とした統計的な測定と、ボトルネックとなる可能性のあるメソッドを測定対象とした、メソッドが実行される度に呼出関係とともに処理時間の測定を行う詳細な測定とを実施することが可能となり、実行環境への負荷を抑えた、より効率の良いプロファイリングを実現することができる。
【００８７】
なお、この発明は上記実施の形態に限定されず、様々な応用が可能である。
【００８８】
例えば、メソッド詳細性能ログテーブル１４５のエントリが、所定の数以上登録されているメソッドに対して詳細監視フラグを無効化したが（図１４、ステップＳ４２２、Ｓ４２４）、この処理は必ずしも行う必要はない。
また、上記実施の形態では、詳細監視フラグを有効化するか否かの判別を、実行されたメソッドの総実行時間が所定の閾値以上であるかどうかにより行った。しかしこの判別を、当該メソッドの実行時間（すなわち当該メソッドが過去に実行された際の実行時間は含まない時間）が所定の閾値以上であるかどうかで、この判別を行ってもよい。この場合、総実行時間を求めるために、実行時間をメソッド毎に累算して記憶する処理を行う必要がないため、より高速にプロファイリングを行うことができる。
【００８９】
なお、本発明のプログラムプロファイリング装置は、専用のハードウェアに限られるものではなく、通常のコンピュータシステムによっても実現することができる。
具体的には、上記実施の形態では、プログラムプロファイリング装置のプログラムが、メモリ等に予め記憶されているものとして説明した。しかし、上述の処理動作を実行させるためのプログラムを、フレキシブルディスク、ＣＤ−ＲＯＭ（Compact Disk Read-Only Memory）、ＤＶＤ（Digital Versatile Disk）、ＭＯ（Magneto-Optical disk）等のコンピュータ読み取り可能な記録媒体に格納して配布し、そのプログラムをコンピュータにインストールすることにより、上述の処理を実行するプログラムプロファイリング装置を構成してもよい。
【００９０】
また、プログラムをインターネット等の通信ネットワーク上のサーバ装置が有するディスク装置等に格納しておき、例えば、搬送波に重畳させて、コンピュータにダウンロード等するようにしてもよい。さらに、通信ネットワークを介してプログラムを転送しながら起動実行することによっても、上述の処理を達成することができる。
また、上述の機能を、ＯＳ（Operating System）が分担又はＯＳとアプリケーションの協働により実現する場合等には、ＯＳ以外の部分のみを媒体に格納して配布してもよく、また、コンピュータにダウンロード等してもよい。
【図面の簡単な説明】
【００９１】
【図１】本発明の実施の形態に係るプログラムプロファイリング装置の構成例を示すブロック図である。
【図２】図１に示したプログラムプロファイリング装置の記憶部の構成を示す図である。
【図３】本発明の実施の形態に係るプログラムプロファイリング装置の機能構成例を示すブロック図である。
【図４】プローブ挿入対象記憶テーブルの構成を示す図である。
【図５】メソッド統計情報記憶テーブルの構成を示す図である。
【図６】（Ａ）は、コールグラフ情報記憶テーブルの構成を示す図である。（Ｂ）は、コールグラフの例を示す図である。
【図７】メソッド情報記憶テーブルの構成を示す図である。
【図８】メソッド詳細性能ログテーブルの構成を示す図である。
【図９】プロファイリング処理の動作を説明するためのフローチャートである。
【図１０】プローブ挿入処理の動作を説明するためのフローチャートである。
【図１１】プローブの挿入を説明するための図である。
【図１２】計測対象設定処理の動作を説明するためのフローチャートである。
【図１３】プローブが挿入されているメソッドの動作を説明するためのフローチャートである。
【図１４】プローブが挿入されているメソッドの動作を説明するためのフローチャートである。
【図１５】測定処理によってＲＡＭに記憶される情報の例を示した図である。
【図１６】詳細監視の対象とするメソッドから呼び出されたメソッドを特定する処理を説明するための図である。
【符号の説明】
【００９２】
１  プログラムプロファイリング装置
１４１  プローブ挿入対象記憶テーブル
１４２  メソッド統計情報記憶テーブル
１４３  コールグラフ情報記憶テーブル
１４４  メソッド情報記憶テーブル
１４５  メソッド詳細性能ログテーブル
２１  プローブ挿入部
２２  プログラム実行部
２３  計測部
２３１  統計データ計測部
２３２  詳細データ計測部
２４  詳細計測対象設定部
２５  計測方法選択部
２６  計測対象設定部
【図１】
2008257287.tif 000003
【図２】
2008257287.tif 000004
【図３】
2008257287.tif 000005
【図４】
2008257287.tif 000006
【図５】
2008257287.tif 000007
【図６】
2008257287.tif 000008
【図７】
2008257287.tif 000009
【図８】
2008257287.tif 000010
【図９】
2008257287.tif 000011
【図１０】
2008257287.tif 000012
【図１１】
2008257287.tif 000013
【図１２】
2008257287.tif 000014
【図１３】
2008257287.tif 000015
【図１４】
2008257287.tif 000016
【図１５】
2008257287.tif 000017
【図１６】
2008257287.tif 000018