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