(57)【要約】  本発明は、プログラムを構成する関数の粒度に関係なく、プログラム中で実行回数が多く実行時間が長い部分を抽出することを目的とする。この目的を達成するため、性能障害要因分析装置１００は、トレースレコードが出力順に格納された配列におけるトレースレコードの出現パターンの候補を生成する候補パターン生成部１１１と、パターン候補生成部１１１によって生成された候補にマッチする部分が配列中に出現する回数を計数する出現回数計数部１１２と、出現回数計数部１１２の計数結果に基づいて、パターン候補生成部１１１によって生成された候補から出現頻度が所定以上である候補を頻出パターンとして抽出する頻出パターン抽出部１１３とを有する。
2008129635.tif 000002
【特許請求の範囲】
【請求項１】
プログラム中の所定の箇所が実行された場合に出力されるトレースレコードに基づいて、該プログラムの性能障害要因となっている箇所に関する情報を出力する性能障害要因分析プログラムであって、
前記トレースレコードが出力順に格納された配列におけるトレースレコードの出現パターンの候補を生成する候補パターン生成手順と、
前記パターン候補生成手順によって生成された候補にマッチする部分が前記配列中に出現する回数を計数する出現回数計数手順と、
前記出現回数計数手順の計数結果に基づいて、前記パターン候補生成手順によって生成された候補から出現頻度が所定以上である候補を頻出パターンとして抽出する頻出パターン抽出手順と、
前記頻出パターン抽出手順の抽出結果を分析結果としてする分析結果出力手順と
をコンピュータに実行させることを特徴とする性能障害要因分析プログラム。
【請求項２】
前記頻出パターン抽出手順は、マッチする部分の長さがある値以上という条件付で、前記出現回数計数手順によって計数された前記回数の累積値が所定以上である前記候補を頻出パターンとして抽出することを特徴とする請求項１に記載の性能障害要因分析プログラム。
【請求項３】
前記出現回数計数手順は、前記候補にマッチする部分の長さが最短になるように前記配列を区切りながら、該部分が前記配列中に出現する回数を計数することを特徴とする請求項１または２に記載の性能障害要因分析プログラム。
【請求項４】
前記出現回数計数手順は、前記候補にマッチする部分とオーバーラップしないように前記配列を区切りながら、該部分が前記配列中に出現する回数を計数することを特徴とする請求項３に記載の性能障害要因分析プログラム。
【請求項５】
前記候補パターン生成手順は、前記頻出パターン抽出手順によって抽出された頻出パターンを組み合わせて前記候補を生成することを特徴とする請求項１に記載の性能障害要因分析プログラム。
【請求項６】
プログラム中の所定の箇所が実行された場合に出力されるトレースレコードに基づいて、該プログラムの性能障害要因となっている箇所に関する情報を出力する性能障害要因分析装置であって、
前記トレースレコードが出力順に格納された配列におけるトレースレコードの出現パターンの候補を生成する候補パターン生成手段と、
前記パターン候補生成手段によって生成された候補にマッチする部分が前記配列中に出現する回数を計数する出現回数計数手段と、
前記出現回数計数手段の計数結果に基づいて、前記パターン候補生成手段によって生成された候補から出現頻度が所定以上である候補を頻出パターンとして抽出する頻出パターン抽出手段と、
前記頻出パターン抽出手段の抽出結果を分析結果としてする分析結果出力手段と
を備えたことを特徴とする性能障害要因分析装置。
【請求項７】
前記頻出パターン抽出手段は、マッチする部分の長さがある値以上という条件付で、前記出現回数計数手段によって計数された前記回数の累積値が所定以上である前記候補を頻出パターンとして抽出することを特徴とする請求項６に記載の性能障害要因分析装置。
【請求項８】
前記出現回数計数手段は、前記候補にマッチする部分の長さが最短になるように前記配列を区切りながら、該部分が前記配列中に出現する回数を計数することを特徴とする請求項６または７に記載の性能障害要因分析装置。
【請求項９】
前記出現回数計数手段は、前記候補にマッチする部分とオーバーラップしないように前記配列を区切りながら、該部分が前記配列中に出現する回数を計数することを特徴とする請求項８に記載の性能障害要因分析装置。
【請求項１０】
前記候補パターン生成手段は、前記頻出パターン抽出手段によって抽出された頻出パターンを組み合わせて前記候補を生成することを特徴とする請求項６に記載の性能障害要因分析装置。
【請求項１１】
プログラム中の所定の箇所が実行された場合に出力されるトレースレコードに基づいて、該プログラムの性能障害要因となっている箇所に関する情報を出力する性能障害要因分析方法であって、
前記トレースレコードが出力順に格納された配列におけるトレースレコードの出現パターンの候補を生成する候補パターン生成工程と、
前記パターン候補生成工程によって生成された候補にマッチする部分が前記配列中に出現する回数を計数する出現回数計数工程と、
前記出現回数計数工程の計数結果に基づいて、前記パターン候補生成工程によって生成された候補から出現頻度が所定以上である候補を頻出パターンとして抽出する頻出パターン抽出工程と、
前記頻出パターン抽出工程の抽出結果を分析結果としてする分析結果出力工程と
を含んだことを特徴とする性能障害要因分析方法。
【請求項１２】
前記頻出パターン抽出工程は、マッチする部分の長さがある値以上という条件付で、前記出現回数計数肯定によって計数された前記回数の累積値が所定以上である前記候補を頻出パターンとして抽出することを特徴とする請求項１１に記載の性能障害要因分析方法。
【請求項１３】
前記出現回数計数工程は、前記候補にマッチする部分の長さが最短になるように前記配列を区切りながら、該部分が前記配列中に出現する回数を計数することを特徴とする請求項１１または１２に記載の性能障害要因分析方法。
【請求項１４】
前記出現回数計数工程は、前記候補にマッチする部分とオーバーラップしないように前記配列を区切りながら、該部分が前記配列中に出現する回数を計数することを特徴とする請求項１３に記載の性能障害要因分析方法。
【請求項１５】
前記候補パターン生成工程は、前記頻出パターン抽出工程によって抽出された頻出パターンを組み合わせて前記候補を生成することを特徴とする請求項１１に記載の性能障害要因分析方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プログラム中の所定の箇所が実行された場合に出力されるトレースレコードに基づいて、該プログラムの性能障害要因となっている箇所に関する情報を出力する性能障害要因分析プログラムおよび性能障害要因分析装置に関し、特に、プログラムを構成する関数の粒度に関係なく、プログラム中で実行回数が多く実行時間が長い部分を抽出することができる性能障害要因分析プログラムおよび性能障害要因分析装置に関する。
【背景技術】
【０００２】
プログラムの処理性能を最適化するには、プログラム中で、実行回数が多く、実行時間が長い部分を改善することが効果的である。そこで、従来より、プログラムの実行中に収集した情報に基づいて、関数単位で実行回数と実行時間を集計する技術（例えば、特許文献１において開示されている技術）が広く利用されている。【０００３】
【特許文献１】特開２００２−１７５２０２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、関数単位で実行回数や実行時間を集計した場合、関数の粒度の影響により、性能上問題のある部分を発見することが困難な場合がある。例えば、頻繁に実行される処理であっても、その部分が多数の関数に分割されている場合、個々の関数の実行時間が短くなり、他の部分と区別し難くなる。一方、実行回数が少ない処理であっても、関数分割を行っていなければ、実行時間が長くなり、性能上問題のある部分に見えてしまう。【０００５】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、プログラムを構成する関数の粒度に関係なく、プログラム中で、実行回数が多く、実行時間が長い部分を抽出することができる性能障害要因分析プログラムおよび性能障害要因分析装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上述した課題を解決し、目的を達成するため、本発明の一つの態様では、プログラム中の所定の箇所が実行された場合に出力されるトレースレコードに基づいて、該プログラムの性能障害要因となっている箇所に関する情報を出力する性能障害要因分析プログラムであって、前記トレースレコードが出力順に格納された配列におけるトレースレコードの出現パターンの候補を生成する候補パターン生成手順と、前記パターン候補生成手順によって生成された候補にマッチする部分が前記配列中に出現する回数を計数する出現回数計数手順と、前記出現回数計数手順の計数結果に基づいて、前記パターン候補生成手順によって生成された候補から出現頻度が所定以上である候補を頻出パターンとして抽出する頻出パターン抽出手順と、前記頻出パターン抽出手順の抽出結果を分析結果としてする分析結果出力手順とをコンピュータに実行させることを特徴とする。【０００７】
この発明の態様によれば、プログラム中の任意の箇所に埋め込むことができる関数やマクロが出力するトレースレコードの出現パターンに基づいて、プログラム中で頻繁に実行される部分を抽出することとしたので、プログラムを構成する関数の粒度に関係なく、プログラム中で実行回数が多い部分を抽出することができる。【０００８】
また、本発明の他の態様では、上記の発明の態様において、前記頻出パターン抽出手順は、マッチする部分の長さがある値以上という条件付で、前記出現回数計数手順によって計数された前記回数の累積値が所定以上である前記候補を頻出パターンとして抽出することを特徴とする。【０００９】
この発明の態様によれば、トレースレコードの出現パターンの長い部分の出現回数のみを集計して頻出部分を抽出することとしたので、プログラムを構成する関数の粒度に関係なく、プログラム中で実行回数が多く実行時間が長い部分を抽出することができる。【００１０】
また、本発明の他の態様では、上記の発明の態様において、前記出現回数計数手順は、前記候補にマッチする部分の長さが最短になるように前記配列を区切りながら、該部分が前記配列中に出現する回数を計数することを特徴とする。【００１１】
この発明の態様によれば、トレースレコードの出現パターンが最短になるように区切りながら、出現パターンの出現回数を計数することとしたので、出現回数の計数結果を一律にすることができる。【００１２】
また、本発明の他の態様では、上記の発明の態様において、前記候補パターン生成手順は、前記頻出パターン抽出手順によって抽出された頻出パターンを組み合わせて前記候補を生成することを特徴とする。【００１３】
この発明の態様によれば、頻出パターンを組み合わせて他の頻出パターンの候補を生成することとしたので、頻出パターンの候補を絞り込み、処理時間を短縮させることができる。【００１４】
なお、本発明の構成要素、表現または構成要素の任意の組合せを、方法、装置、システム、コンピュータプログラム、記録媒体、データ構造などに適用したものも本発明の態様として有効である。
【発明の効果】
【００１５】
本発明の一つの態様によれば、プログラム中の任意の箇所に埋め込むことができる関数やマクロが出力するトレースレコードの出現パターンに基づいて、プログラム中で頻繁に実行される部分を抽出することとしたので、プログラムを構成する関数の粒度に関係なく、プログラム中で実行回数が多い部分を抽出することができるという効果を奏する。【００１６】
また、本発明の一つの態様によれば、トレースレコードの出現パターンの長い部分の出現回数のみを集計して頻出部分を抽出することとしたので、プログラムを構成する関数の粒度に関係なく、プログラム中で実行回数が多く実行時間が長い部分を抽出することができるという効果を奏する。【００１７】
また、本発明の一つの態様によれば、トレースレコードの出現パターンが最短になるように区切りながら、出現パターンの出現回数を計数することとしたので、出現回数の計数結果を一律にすることができるという効果を奏する。【００１８】
また、本発明の一つの態様によれば、頻出パターンを組み合わせて他の頻出パターンの候補を生成することとしたので、頻出パターンの候補を絞り込み、処理時間を短縮させることができるという効果を奏する。
【図面の簡単な説明】
【００１９】
【図１】図１は、トレースレコードを出力するマクロが埋め込まれたソースファイルの一例を示す図である。
【図２】図２は、出力されたトレースレコードの一例を示す図である。
【図３】図３は、本実施例に係る性能障害要因分析方法の分析結果の一例を示す図である。
【図４】図４は、性能障害要因分析装置の構成を示すブロック図である。
【図５】図５は、候補パターンデータの一例を示す図である。
【図６】図６は、頻出パターンデータの一例を示す図である。
【図７】図７は、トレースレコードの並びの一例を示す図である。
【図８−１】図８−１は、ＮＦＡｆの例を示す図である。
【図８−２】図８−２は、ＮＦＡｂの例を示す図である。
【図９】図９は、ＮＦＡを用いた候補パターンの検出例を示す図である。
【図１０】図１０は、性能障害要因分析装置の処理手順を示すフローチャートである。
【図１１】図１１は、候補パターン生成処理の処理手順を示すフローチャートである。
【図１２】図１２は、出現回数計数処理の処理手順を示すフローチャートである。
【図１３】図１３は、頻出パターン抽出処理の処理手順を示すフローチャートである。
【図１４】図１４は、性能障害要因分析プログラムを実行するコンピュータを示す機能ブロック図である。
【符号の説明】
【００２０】
１１  ＮＦＡｆ
１２  ＮＦＡｂ
１００  性能障害要因分析装置
１１０  制御部
１１１  候補パターン生成部
１１２  出現回数計数部
１１３  頻出パターン抽出部
１１４  分析結果出力部
１２０  記憶部
１２１  トレースデータ
１２２  候補パターンデータ
１２３  頻出パターンデータ
１０００  コンピュータ
１０１０  ＣＰＵ
１０２０  入力装置
１０３０  モニタ
１０４０  媒体読取り装置
１０５０  ネットワークインターフェース装置
１０６０  ＲＡＭ
１０６１  性能障害要因分析プロセス
１０７０  ハードディスク装置
１０７１  性能障害要因分析プログラム
１０７２  性能障害要因分析用データ
１０８０  バス
【発明を実施するための最良の形態】
【００２１】
以下に、本発明に係る性能障害要因分析プログラムおよび性能障害要因分析装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例】
【００２２】
まず、本実施例に係る性能障害要因分析方法の概要について説明する。本実施例に係る性能障害要因分析方法は、プログラムが実行時に出力したトレースレコードに基づいて性能障害要因となっている可能性がある部分を抽出する。トレースレコードとは、プログラムのソースファイル中の任意の箇所に埋め込まれたマクロや関数がファイル等に出力するレコードである。【００２３】
図１は、トレースレコードを出力するマクロが埋め込まれたソースファイルの一例を示す図である。同図に示した例では、プログラムのソースファイルの任意の箇所にＴＲＡＣＥというマクロが埋め込まれている。ＴＲＡＣＥは、１つ以上の引数をもつことができ、当該のマクロが埋め込まれた箇所が実行されるたびに、与えられた引数や時刻等をトレースレコードとして出力する。ＴＲＡＣＥの第１引数には、ＴＲＡＣＥが埋め込まれた位置を識別するためのレコード種別が指定され、第２引数以降には、その時点の変数の値等を出力するための引数が任意に指定される。【００２４】
なお、トレースレコードの出力によるプログラムの性能の低化や、記憶領域の消費等を回避するため、トレースレコードの出力は、ソースファイルのコンパイル時や、プログラムの実行時に所定のオプションが指定されていた場合にのみ実行されることとしてもよい。【００２５】
図２は、出力されたトレースレコードの一例を示す図である。同図に示すように、トレースレコードは、レコード番号（Ｎｏ）、時刻、ＣＰＵ（Central  Processing  Unit）番号、レコード種別、付随データといった項目を有する。レコード番号は、トレースレコードの出力順に採番される連番である。時刻は、トレースレコードを出力する関数やマクロが実行された時刻であり、ＣＰＵ番号は、それを実行したＣＰＵの識別番号である。レコード種別は、ＴＲＡＣＥの第１引数であり、付随データは、ＴＲＡＣＥの２番目以降の引数である。【００２６】
本実施例に係る性能障害要因分析方法は、実行回数の多い部分を特定するため、このように実行順に配列されたトレースレコードの並びの中から、頻出するパターンを抽出して出力する。【００２７】
実際の運用時には、レコード種別だけでなく、付随データも比較してトレースレコードの同一性を判断することとしてもよい。また、プログラムを実行するＣＰＵが複数ある場合は、ＣＰＵ番号も比較してトレースレコードの同一性を判断することとしてもよい。また、ＣＰＵ番号毎にトレースレコードを分割して分析することとしてもよい。以下、本実施例では、説明を簡単にするため、レコード種別のみを基準として、トレースレコードの同一性を判断するものとする。【００２８】
トレースレコードが出力される時間間隔は均一ではないが、同一のパターンにマッチするトレースレコード群の中の先頭と末尾のトレースレコードに記録されている時刻を取得し、その差をトレースレコード群の実行時間として用いたならば、実行時間を正確に算出可能である。以下では簡単のため、トレースレコードが出力される時間間隔は均一であることを仮定して、オカレンス長を採用する場合を詳述するが、前述の時刻の差を用いて、実行時間を採用する場合へ容易に拡張することができる。【００２９】
トレースレコードの出現パターンを、レコード種別と、任意のレコード種別にマッチする「＊」との組合せで表現するものとする。例えば、「Ａ＊Ｂ」というパターンは、「Ａ」というレコード種別のトレースレコードが出現した後に、０件以上の何らかのトレースレコードが存在し、その後、「Ｂ」というレコード種別のトレースレコードが出現するパターンを表す。【００３０】
また、本実施例に係る性能障害要因分析方法は、実行時間の長い部分を特定するため、オカレンス長を考慮して頻出パターンの抽出を行う。オカレンス長とは、パターンにマッチするトレースレコード群のレコード数である。例えば、以下のようなレコード種別をもつトレースレコードがこの順序で並んでいた場合、
「Ａ」「Ｃ」「Ｄ」「Ｗ」「Ｓ」「Ｂ」「Ｆ」「Ａ」「Ｓ」「Ｂ」
「Ａ＊Ｂ」というパターンには、
「Ａ」「Ｃ」「Ｄ」「Ｗ」「Ｓ」「Ｂ」
というトレースレコード群と
「Ａ」「Ｓ」「Ｂ」
というトレースレコード群がマッチし、前者のオカレンス長は６となり、後者のオカレンス長は３となる。【００３１】
図３は、本実施例に係る性能障害要因分析方法の分析結果の一例を示す図である。同図に示すように、分析結果には、パターン長、頻出パターン、出現回数といった項目が含まれる。パターン長は、トレースレコードの同一性を判定するためのキーの数、すなわち、本実施例の場合は、パターンに含まれるレコードの数（ただし「＊」は含まない）である。頻出パターンは、パターンとオカレンス下限長からなる。頻出パターンは、このパターンがオカレンス下限長以上の長さでトレースレコードの並びに所定回数以上出現するパターンである。出現回数は、その頻出パターンの出現回数である。【００３２】
本実施例に係る性能障害要因分析方法では、パターン長が長く出現回数が多い頻出パターンに相当する部分が、性能障害要因となっている可能性があるとみなすことができる。例えば、図３の例では、「Ｃ＊Ｄ＊Ｆ」に相当する部分や「Ｃ＊Ｈ＊Ｋ」に相当する部分が性能障害要因となっている可能性があるとみなすことができる。また、オカレンス長の指定を適切に行うことにより、実行時間を考慮して、性能障害要因となっている可能性がある部分を抽出することができる。【００３３】
このように、本実施例に係る性能障害要因分析方法は、ソースプログラムの任意の箇所に埋め込まれた関数やマクロが出力するトレースレコードの出力パターンに基づいて、実行回数が多く、実行時間が長い部分を抽出するので、関数の粒度に関係なく、性能障害要因となっている可能性がある部分を抽出することができる。【００３４】
次に、本実施例に係る性能障害要因分析方法を実行する性能障害要因分析装置１００の構成について説明する。図４は、性能障害要因分析装置１００の構成を示すブロック図である。同図に示すように、性能障害要因分析装置１００は、制御部１１０と記憶部１２０を有する。【００３５】
制御部１１０は、性能障害要因分析装置１００を全体制御する制御部であり、候補パターン生成部１１１と、出現回数計数部１１２と、頻出パターン抽出部１１３と、分析結果出力部１１４とを有する。【００３６】
候補パターン生成部１１１は、頻出パターンの候補となる候補パターンを生成し、記憶部１２０に候補パターンデータ１２２として記憶させる処理部である。トレースレコード中に存在しうるパターンの数は、パターン長が長くなるほど増大していくことになるが、候補パターン生成部１１１は、候補パターン数の増大により処理時間が長くなることを防止するため、パターン長が２以上の候補パターンについては、頻出パターン抽出部１１３によって抽出された頻出パターンを組み合わせて生成する。【００３７】
出現回数計数部１１２は、トレースレコードが出力順に配列されたトレースデータ１２１を参照して、候補パターン生成部によって生成された各候補パターンの出現回数を計数し、その結果を候補パターンデータ１２２に記憶させる処理部である。トレースデータ１２１は、図２に示したトレースレコードの並びと同様のデータ構造を有し、記憶部１２０に記憶される。【００３８】
ここで、候補パターンデータ１２２の一例を図５に示す。同図に示すように、候補パターンデータ１２２は、パターン長、候補パターン、出現回数といった項目を有する。パターン長は、トレースレコードの同一性を判定するためのキーの数、すなわち、本実施例の場合は、パターンに含まれるレコードの数（ただし「＊」は含まない）が設定される項目である。候補パターンは、候補パターン生成部１１１に生成された候補パターンが設定される項目である。出現回数は、出現回数計数部１１２によって計数された当該の候補パターンの出現回数が設定される項目であり、出現回数がオカレンス長毎に設定されるようになっている。【００３９】
頻出パターン抽出部１１３は、出現回数計数部１１２によって計数された出現回数に基づいて出現回数が所定数よりも多い候補パターンを頻出パターンとして抽出して、記憶部１２０に頻出パターンデータ１２３として記憶させる処理部である。なお、頻出か否かを判定するための所定値は、パターン長毎に異なる値が与えられることとしてもよい。【００４０】
ここで、頻出パターンデータ１２３の一例を図６に示す。同図に示すように、頻出パターンデータ１２３は、パターン長、頻出パターン、出現回数といった項目を有する。パターン長は、トレースレコードの同一性を判定するためのキーの数、すなわち、本実施例の場合は、パターンに含まれるレコードの数（ただし「＊」は含まない）が設定される項目である。頻出パターンは、頻出パターン抽出部１１３に抽出された頻出パターンが設定される項目である。出現回数は、その頻出パターンの出現回数が設定される項目である。【００４１】
分析結果出力部１１４は、頻出パターンの抽出が完了した後に、図３に示したような分析結果を出力する処理部である。【００４２】
次に、出現回数計数部１１２における候補パターンの出現回数の計数処理の詳細について説明する。例えば、出力順に配列されたトレースレコードのレコード種別が図７の通りであった場合、「Ａ＊Ｂ＊Ｃ」というパターンにマッチする部分は、同一のレコード種別をもつトレースレコードのレコード番号（Ｎｏ）のリストの形式で表現して
（２，３，４），  （２，３，１１），  （２，３，１９），  （２，８，１１），
（２，８，１９），  （２，１０，１１），  （２，１０，１９），
（２，１７，１９），  （５，８，１１），  （５，８，１９），
（５，１０，１１），  （５，１０，１９），  …，  （１６，１７，１９）
のように多数存在する。【００４３】
ここで、本実施例に係る性能障害要因分析方法では、前述のように、オーバーラップしている部分については、出現回数として重複してカウントしないこととしているが、それでも、パターンにマッチする部分の区切り方により、出現回数やオカレンス下限長が変動してしまう。例えば、頻出か否かを判定する閾値が１の場合では、
（２，３，４），  （５，８，１１），  （１４，１７，１９）
のように区切れば、出現回数は３で、オカレンス下限長は７となるが、
（２，３，４），  （７，８，１１），  （１６，１７，１９）
のように区切れば、出現回数は３のままであるが、オカレンス下限長は５となる。また、
（２，３，１９）
のように区切れば、出現回数は１で、オカレンス下限長は１８となる。【００４４】
このように出現回数やオカレンス下限長がぶれるのを回避するため、本実施例に係る性能障害要因分析方法では、パターンにマッチする部分を、オカレンス長が最も短くなるように区切っていく。具体的には、図７に示したトレースレコードの並びから、「Ａ＊Ｂ＊Ｃ」というパターンにマッチする部分を抽出する場合は、
（２，３，４），  （７，８，１１），  （１６，１７，１９）
のように区切る。【００４５】
（５，８，１１）のように、オカレンス長が長い部分は、例えば、「Ａ＊Ａ＊Ｂ＊Ｃ」のようなパターン長がより長いパターンにもマッチする部分であり、そのようなパターン長がより長いパターンが頻出している場合には頻出パターンとして出力される。したがって、このようにオカレンス長が最も短くなるように区切ることは、現在対象となっている候補パターンの出現数を計数するのに最も適した区切り方であるといえる。【００４６】
このように、オカレンス長が最も短くなるように区切りながら候補パターンの出現回数を計数するため、出現回数計数部１１２は、ＮＦＡ（Nondeterministic  Finite  Automaton）を用いて候補パターンの出現を検出する。ＮＦＡとは、受け付けた入力に応じて状態を遷移させるオブジェクトである。具体的には、出現回数計数部１１２は、ＮＦＡｆとＦＦＡｂという２種類のＮＦＡを用いる。ＮＦＡについては、例えば、Ｇ．Ｎａｖａｒｒｏ，Ｍ．Ｒａｆｆｉｎｏｔ，“Ｆｌｅｘｉｂｌｅ  Ｐａｔｔｅｒｎ  Ｍａｃｈｉｎｇ  ｉｎ  Ｓｔｒｉｎｇ，”Ｃａｍｂｒｉｄｇｅ  Ｕｎｉｖ．  Ｐｒｅｓｓ，２００２を参照のこと。【００４７】
図８−１は、ＮＦＡｆの例である。ＮＦＡｆは、候補パターンを正順に検出するためのＮＦＡであり、例えば、候補パターンが「Ａ＊Ｂ＊Ｃ」であれば、レコード種別が「Ａ」のトレースレコードが入力されたときに初期状態から第１の状態に遷移し、その後、レコード種別が「Ｂ」のトレースレコードが入力されたときに第２の状態に遷移し、その後、レコード種別が「Ｃ」のトレースレコードが入力されたときに、候補パターンが検出されたことを示す状態に遷移する。【００４８】
図８−２は、ＮＦＡｂの例である。ＮＦＡｂは、候補パターンを逆順に検出するためのＮＦＡであり、例えば、候補パターンが「Ａ＊Ｂ＊Ｃ」であれば、レコード種別が「Ｃ」のトレースレコードが入力されたときに初期状態から第１の状態に遷移し、その後、レコード種別が「Ｂ」のトレースレコードが入力されたときに第２の状態に遷移し、その後、レコード種別が「Ａ」のトレースレコードが入力されたときに、候補パターンが検出されたことを示す状態に遷移する。【００４９】
図９は、ＮＦＡを用いた候補パターンの検出例を示す図である。同図に示すように、出現回数計数部１１２は、まず、ＮＦＡｆ１１を用いて正順に候補パターンを検出する。これにより、候補パターンが「Ａ＊Ｂ＊Ｃ」であれば、同図のように、
「Ａ」「Ｄ」「Ａ」「Ｂ」「Ｅ」「Ｂ」「Ｃ」
の部分で候補パターンが検出され、出現回数計数部１１２は、検出された部分の末尾を候補パターンにマッチする部分の末尾として確定する。【００５０】
続いて、出現回数計数部１１２は、確定した末尾を基点として、ＮＦＡｂ１２を用いて逆順に候補パターンを検出する。これにより、同図のように、
「Ａ」「Ｂ」「Ｅ」「Ｂ」「Ｃ」
の部分で候補パターンが検出され、出現回数計数部１１２は、検出された部分の先頭を候補パターンにマッチする部分の先頭として確定する。このように、正順と逆順の２つのＮＦＡを組み合わせて用いることにより、オカレンス長が最も短くなるように区切りながら候補パターンの出現回数を計数することができる。【００５１】
次に、図４に示した性能障害要因分析装置１００の処理手順について説明する。図１０は、性能障害要因分析装置１００の処理手順を示すフローチャートである。同図に示すように、制御部１１０は、まず、パターン長を表す変数ｉを１に初期化する（ステップＳ１０１）。そして、候補パターン生成部１１１が、パターン長１の候補パターンを候補パターンデータ１２２へ格納する（ステップＳ１０２）。パターン長１の候補パターンは、全アイテムのみを含むパターンであることは自明である。【００５２】
続いて、出現回数計数部１１２が、後述する出現回数計数処理を実行して、パターン長ｉにおける候補パターンの出現回数を計数して候補パターンデータ１２２に設定する（ステップＳ１０３）。【００５３】
続いて、頻出パターン抽出部１１３が、後述する頻出パターン抽出処理を実行してパターン長ｉにおける頻出パターンを抽出して頻出パターンデータ１２３に格納する（ステップＳ１０４）。ここで、制御部１１０は、パターン長ｉにおける頻出パターンの数を取得し（ステップＳ１０５）、頻出パターンの数が０でなければ（ステップＳ１０６否定）、変数ｉの値を１だけ増加させる（ステップＳ１０７）。【００５４】
続いて、候補パターン生成部１１１が、後述する候補パターン生成処理を実行して、パターン長ｉ−１における頻出パターンに基づいてパターン長ｉにおける候補パターンを生成する（ステップＳ１０８）。その後、ステップＳ１０３から処理が再開され、出現回数計数部１１２が、出現回数計数処理を実行して、パターン長ｉにおける候補パターンの出現回数を計数し（ステップＳ１０３）、それ以降の処理も上記と同様に実行される。【００５５】
そして、ステップＳ１０５において取得されたパターン長ｉにおける頻出パターンの数が０であれば（ステップＳ１０６肯定）、制御部１１０は、分析結果出力部１１４に頻出パターンデータ１２３の内容を分析結果として出力させた後（ステップＳ１０９）、処理を終了させる。【００５６】
共通するフローをまとめて説明する都合上、候補パターン生成処理（ステップＳ１０８）、出現回数計数処理（ステップＳ１０３）、頻出パターン抽出処理（ステップＳ１０４）の順に説明する。【００５７】
図１１は、候補パターン生成処理の処理手順を示すフローチャートである。例えば、「Ａ＊Ｂ＊Ｃ＊Ｄ」というパターンが頻出であるならば、その末尾のアイテムを削除した「Ａ＊Ｂ＊Ｃ」というパターンも、その先頭のアイテムを削除した「Ｂ＊Ｃ＊Ｄ」というパターンも頻出であるはずである。候補パターン生成部１１１は、この論理を用いることにより、パターン長の増加にともなって候補パターン数が増加することを抑制し、効率よく頻出ターンの抽出を行うことを可能にしている。【００５８】
具体的には、候補パターン生成部１１１は、まず、パターン長ｉ−１における頻出パターンを頻出パターンデータ１２３から取得し、２つの頻出パターンの組合せを全て作成する（ステップＳ２０１）。【００５９】
そして、未選択の組合せの選択を試みて（ステップＳ２０２）、選択できた場合は（ステップＳ２０３否定）、組合せの１番目の頻出パターンから先頭のアイテムｓを削除したパターンＸを作成し（ステップＳ２０４）、さらに、組合せの２番目の頻出パターンから末尾のアイテムｔを削除したパターンＹを作成する（ステップＳ２０５）。【００６０】
そして、パターンＸとパターンＹが同一であれば（ステップＳ２０６肯定）、パターンＸの前にアイテムｓを付加し、末尾にアイテムｔを付加したパターンｓ＊Ｘ＊ｔが頻出である可能性があるので、このパターンをパターン長ｉにおける候補パターンとして候補パターンデータ１２２へ登録し（ステップＳ２０７）、その後、ステップＳ２０２へ戻って次の未選択の組合せの取得を試みる。【００６１】
一方、パターンＸとパターンＹが同一でなければ（ステップＳ２０６否定）、パターンＸの前にアイテムｓを付加し、末尾にアイテムｔを付加したパターンｓ＊Ｘ＊ｔが頻出である可能性はないので、このパターンをパターン長ｉにおける候補パターンとして候補パターンデータ１２２へ登録することなく、ステップＳ２０２へ戻って次の未選択の組合せの取得を試みる。【００６２】
そして、ステップＳ２０２において全ての組合せを取得済であった場合は（ステップＳ２０３肯定）、処理を終了する。【００６３】
図１２は、出現回数計数処理の処理手順を示すフローチャートである。同図に示すように、出現回数計数部１１２は、まず、パターン長ｉにおける未取得の候補パターンを候補パターンデータ１２２から１つ取得する（ステップＳ３０１）。ここで、未取得の候補パターンを取得できた場合は（ステップＳ３０２否定）、取得した候補パターンに対応するＮＦＡｆとＮＦＡｂを作成する（ステップＳ３０３）。【００６４】
そして、トレースレコードの位置を示す変数ｋを１に初期化し（ステップＳ３０４）、トレースデータ１２１からｋ番目のトレースレコードを取得する（ステップＳ３０５）。ここで、ｋがトレースデータ１２１のレコード数よりも大きく、トレースレコードを取得できなかった場合は（ステップＳ３０６肯定）、ステップＳ３０１に戻って、パターン長ｉにおける未取得の候補パターンを候補パターンデータ１２２から１つ取得する。【００６５】
一方、トレースレコードを取得できた場合は（ステップＳ３０６否定）、取得したトレースレコードをＮＦＡｆに入力する（ステップＳ３０７）。そして、ＮＦＡｆが、候補パターンを検出したことを示す状態に遷移していなければ（ステップＳ３０８否定）、変数ｋの値を１だけ増加させた後（ステップＳ３０９）、ステップＳ３０５から処理を再開する。【００６６】
ＮＦＡｆが、候補パターンを検出したことを示す状態に遷移していた場合は（ステップＳ３０８肯定）、現在の変数ｋの値を変数ｊに設定し（ステップＳ３１０）、トレースデータ１２１からｊ番目のトレースレコードを取得する（ステップＳ３１１）。そして、取得したトレースレコードをＮＦＡｂに入力し（ステップＳ３１２）、ＮＦＡｂが、候補パターンを検出したことを示す状態に遷移していなければ（ステップＳ３１３否定）、変数ｊの値を１だけ減算した後（ステップＳ３１４）、ステップＳ３１１から処理を再開する。【００６７】
ＮＦＡｂが、候補パターンを検出したことを示す状態に遷移していた場合は（ステップＳ３１３肯定）、ｋ−ｊ＋１を演算してオカレンス長を算出し（ステップＳ３１５）、候補パターンデータ１２２において、パターン長がｉで候補パターンがステップＳ３０１で取得した候補パターンと一致するエントリの、オカレンス長に対応する出現回数を１だけインクリメントする（ステップＳ３１６）。そして、ＮＦＡｆとＮＦＡｂの状態を初期化した後（ステップＳ３１７）、ステップＳ３０９以降の処理を実行する。【００６８】
そして、ステップＳ３０１において全ての候補パターンを取得済であった場合は（ステップＳ３０２肯定）、処理を終了する。【００６９】
図１３は、頻出パターン抽出処理の処理手順を示すフローチャートである。同図に示すように、頻出パターン抽出部１１３は、まず、パターン長ｉにおける未取得の候補パターンを候補パターンデータ１２２から１つ取得する（ステップＳ４０１）。ここで、未取得の候補パターンを取得できた場合は（ステップＳ４０２否定）、候補パターンが頻出であるためのオカレンス長の下限値を次の手続きにより探索する。【００７０】
まず、オカレンス長を表すカウンタｌ、オカレンス下限値を表すカウンタｍをそれぞれＭ＋１に、累積出現回数を表すカウンタｎを０に初期化する（ステップＳ４０３）。ここで、Ｍは、この候補パターンのオカレンス長の最大値であり、候補パターンデータ（図５）では、出現回数欄における最も右側の非０値を格納するインデックスである。続いて、ｌをデクリメントした後（ステップＳ４０４）、ｌが０より大であれば（ステップＳ４０５肯定）、累積出現回数ｎにこの候補パターンのオカレンス長ｌにおける出現回数を加算する（ステップＳ４０６）。さらに、累積出現回数ｎが頻出であるか否かを判定するための閾値より小さい場合のみ（ステップＳ４０７肯定）、オカレンス下限値ｍにｌを代入し（ステップＳ４０８）、ステップＳ４０４から処理を再開する。そして、オカレンス長ｌが０より大でなくなったならば（ステップＳ４０５否定）、ステップＳ４０９へジャンプする。【００７１】
そして、累積出現回数ｎが、頻出であるか否かを判定するための閾値以上であれば（ステップＳ４０９肯定）、取得した候補パターンとオカレンス下限長ｍ−１をパターン長ｉにおける頻出パターンとして頻出パターンデータ１２３に格納する（ステップＳ４１０）。そして、集計した出現回数を、そのエントリの出現回数として設定し（ステップＳ４１１）、ステップＳ４０１から処理を再開する。【００７２】
一方、集計した累積出現回数ｎが、頻出であるか否かを判定するための閾値よりも小さいならば（ステップＳ４０９否定）、候補パターンを頻出パターンとして登録することなく、ステップＳ４０１から処理を再開する。【００７３】
そして、ステップＳ４０１において全ての候補パターンを取得済であった場合は（ステップＳ４０２肯定）、処理を終了する。【００７４】
なお、図４に示した本実施例に係る性能障害要因分析装置１００の構成は、本発明の要旨を逸脱しない範囲で種々に変更することができる。例えば、性能障害要因分析装置１００の制御部１１０の機能をソフトウェアとして実装し、これをコンピュータで実行することにより、性能障害要因分析装置１００と同等の機能を実現することもできる。以下に、制御部１１０の機能をソフトウェアとして実装した性能障害要因分析プログラム１０７１を実行するコンピュータの一例を示す。【００７５】
図１４は、性能障害要因分析プログラム１０７１を実行するコンピュータ１０００を示す機能ブロック図である。このコンピュータ１０００は、各種演算処理を実行するＣＰＵ１０１０と、ユーザからのデータの入力を受け付ける入力装置１０２０と、各種情報を表示するモニタ１０３０と、記録媒体からプログラム等を読み取る媒体読取り装置１０４０と、ネットワークを介して他のコンピュータとの間でデータの授受を行うネットワークインターフェース装置１０５０と、各種情報を一時記憶するＲＡＭ（Random  Access  Memory）１０６０と、ハードディスク装置１０７０とをバス１０８０で接続して構成される。【００７６】
そして、ハードディスク装置１０７０には、図４に示した制御部１１０と同様の機能を有する性能障害要因分析プログラム１０７１と、図４に示した記憶部１２０に記憶される各種データに対応する性能障害要因分析用データ１０７２とが記憶される。なお、性能障害要因分析用データ１０７２を、適宜分散させ、ネットワークを介して接続された他のコンピュータに記憶させておくこともできる。【００７７】
そして、ＣＰＵ１０１０が性能障害要因分析プログラム１０７１をハードディスク装置１０７０から読み出してＲＡＭ１０６０に展開することにより、性能障害要因分析プログラム１０７１は、性能障害要因分析プロセス１０６１として機能するようになる。そして、性能障害要因分析プロセス１０６１は、性能障害要因分析用データ１０７２から読み出した情報等を適宜ＲＡＭ１０６０上の自身に割り当てられた領域に展開し、この展開したデータ等に基づいて各種データ処理を実行する。【００７８】
なお、上記の性能障害要因分析プログラム１０７１は、必ずしもハードディスク装置１０７０に格納されている必要はなく、ＣＤ−ＲＯＭ等の記憶媒体に記憶されたこのプログラムを、コンピュータ１０００が読み出して実行するようにしてもよい。また、公衆回線、インターネット、ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等を介してコンピュータ１０００に接続される他のコンピュータ（またはサーバ）等にこのプログラムを記憶させておき、コンピュータ１０００がこれらからプログラムを読み出して実行するようにしてもよい。【００７９】
上述してきたように、本実施例では、プログラム中の任意の箇所に埋め込むことができる関数やマクロが出力するトレースレコードの出現パターンに基づいて、プログラム中で頻繁に実行される部分を抽出することとしたので、プログラムを構成する関数の粒度に関係なく、プログラム中で実行回数が多い部分を抽出することができる。【００８０】
また、本実施例では、トレースレコードの出現パターンの長い部分の出現回数のみを集計して頻出部分を抽出することとしたので、プログラムを構成する関数の粒度に関係なく、プログラム中で実行回数が多く実行時間が長い部分を抽出することができる。
【産業上の利用可能性】
【００８１】
以上のように、本発明に係る性能障害要因分析プログラムおよび性能障害要因分析装置は、プログラムの性能障害要因となっている箇所の分析に有用であり、特に、プログラムを構成する関数の粒度に関係なく、プログラム中で実行回数が多く実行時間が長い部分を抽出することが必要な場合に適している。
【図１】
2008129635.tif 000003
【図２】
2008129635.tif 000004
【図３】
2008129635.tif 000005
【図４】
2008129635.tif 000006
【図５】
2008129635.tif 000007
【図６】
2008129635.tif 000008
【図７】
2008129635.tif 000009
【図８−１】
2008129635.tif 000010
【図８−２】
2008129635.tif 000011
【図９】
2008129635.tif 000012
【図１０】
2008129635.tif 000013
【図１１】
2008129635.tif 000014
【図１２】
2008129635.tif 000015
【図１３】
2008129635.tif 000016
【図１４】
2008129635.tif 000017
【手続補正書】
【提出日】平成21年7月27日(2009.7.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プログラム中の所定の箇所が実行された場合に出力されるトレースレコードに基づいて、該プログラムの性能障害要因となっている箇所に関する情報を出力する性能障害要因分析プログラムであって、
前記トレースレコードが出力順に格納された配列におけるトレースレコードの出現パターンの候補を生成する候補パターン生成手順と、
前記パターン候補生成手順によって生成された候補にマッチする部分が前記配列中に出現する回数を計数する出現回数計数手順と、
前記出現回数計数手順の計数結果に基づいて、前記パターン候補生成手順によって生成された候補から出現頻度が所定以上である候補を頻出パターンとして抽出する頻出パターン抽出手順と、
前記頻出パターン抽出手順の抽出結果を分析結果としてする分析結果出力手順と
をコンピュータに実行させることを特徴とする性能障害要因分析プログラム。
【請求項２】
前記頻出パターン抽出手順は、マッチする部分の長さがある値以上という条件付で、前記出現回数計数手順によって計数された前記回数の累積値が所定以上である前記候補を頻出パターンとして抽出することを特徴とする請求項１に記載の性能障害要因分析プログラム。
【請求項３】
前記出現回数計数手順は、前記候補にマッチする部分の長さが最短になるように前記配列を区切りながら、該部分が前記配列中に出現する回数を計数することを特徴とする請求項１または２に記載の性能障害要因分析プログラム。
【請求項４】
前記候補パターン生成手順は、前記頻出パターン抽出手順によって抽出された頻出パターンを組み合わせて前記候補を生成することを特徴とする請求項１に記載の性能障害要因分析プログラム。
【請求項５】
プログラム中の所定の箇所が実行された場合に出力されるトレースレコードに基づいて、該プログラムの性能障害要因となっている箇所に関する情報を出力する性能障害要因分析装置であって、
前記トレースレコードが出力順に格納された配列におけるトレースレコードの出現パターンの候補を生成する候補パターン生成手段と、
前記パターン候補生成手段によって生成された候補にマッチする部分が前記配列中に出現する回数を計数する出現回数計数手段と、
前記出現回数計数手段の計数結果に基づいて、前記パターン候補生成手段によって生成された候補から出現頻度が所定以上である候補を頻出パターンとして抽出する頻出パターン抽出手段と、
前記頻出パターン抽出手段の抽出結果を分析結果としてする分析結果出力手段と
を備えたことを特徴とする性能障害要因分析装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プログラム中の所定の箇所が実行された場合に出力されるトレースレコードに基づいて、該プログラムの性能障害要因となっている箇所に関する情報を出力する性能障害要因分析プログラムおよび性能障害要因分析装置に関し、特に、プログラムを構成する関数の粒度に関係なく、プログラム中で実行回数が多く実行時間が長い部分を抽出することができる性能障害要因分析プログラムおよび性能障害要因分析装置に関する。
【背景技術】
【０００２】
プログラムの処理性能を最適化するには、プログラム中で、実行回数が多く、実行時間が長い部分を改善することが効果的である。そこで、従来より、プログラムの実行中に収集した情報に基づいて、関数単位で実行回数と実行時間を集計する技術（例えば、特許文献１において開示されている技術）が広く利用されている。
【０００３】
【特許文献１】特開２００２−１７５２０２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、関数単位で実行回数や実行時間を集計した場合、関数の粒度の影響により、性能上問題のある部分を発見することが困難な場合がある。例えば、頻繁に実行される処理であっても、その部分が多数の関数に分割されている場合、個々の関数の実行時間が短くなり、他の部分と区別し難くなる。一方、実行回数が少ない処理であっても、関数分割を行っていなければ、実行時間が長くなり、性能上問題のある部分に見えてしまう。
【０００５】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、プログラムを構成する関数の粒度に関係なく、プログラム中で、実行回数が多く、実行時間が長い部分を抽出することができる性能障害要因分析プログラムおよび性能障害要因分析装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上述した課題を解決し、目的を達成するため、本発明の一つの態様では、プログラム中の所定の箇所が実行された場合に出力されるトレースレコードに基づいて、該プログラムの性能障害要因となっている箇所に関する情報を出力する性能障害要因分析プログラムであって、前記トレースレコードが出力順に格納された配列におけるトレースレコードの出現パターンの候補を生成する候補パターン生成手順と、前記パターン候補生成手順によって生成された候補にマッチする部分が前記配列中に出現する回数を計数する出現回数計数手順と、前記出現回数計数手順の計数結果に基づいて、前記パターン候補生成手順によって生成された候補から出現頻度が所定以上である候補を頻出パターンとして抽出する頻出パターン抽出手順と、前記頻出パターン抽出手順の抽出結果を分析結果としてする分析結果出力手順とをコンピュータに実行させることを特徴とする。
【０００７】
この発明の態様によれば、プログラム中の任意の箇所に埋め込むことができる関数やマクロが出力するトレースレコードの出現パターンに基づいて、プログラム中で頻繁に実行される部分を抽出することとしたので、プログラムを構成する関数の粒度に関係なく、プログラム中で実行回数が多い部分を抽出することができる。
【０００８】
また、本発明の他の態様では、上記の発明の態様において、前記頻出パターン抽出手順は、マッチする部分の長さがある値以上という条件付で、前記出現回数計数手順によって計数された前記回数の累積値が所定以上である前記候補を頻出パターンとして抽出することを特徴とする。
【０００９】
この発明の態様によれば、トレースレコードの出現パターンの長い部分の出現回数のみを集計して頻出部分を抽出することとしたので、プログラムを構成する関数の粒度に関係なく、プログラム中で実行回数が多く実行時間が長い部分を抽出することができる。
【００１０】
また、本発明の他の態様では、上記の発明の態様において、前記出現回数計数手順は、前記候補にマッチする部分の長さが最短になるように前記配列を区切りながら、該部分が前記配列中に出現する回数を計数することを特徴とする。
【００１１】
この発明の態様によれば、トレースレコードの出現パターンが最短になるように区切りながら、出現パターンの出現回数を計数することとしたので、出現回数の計数結果を一律にすることができる。
【００１２】
また、本発明の他の態様では、上記の発明の態様において、前記候補パターン生成手順は、前記頻出パターン抽出手順によって抽出された頻出パターンを組み合わせて前記候補を生成することを特徴とする。
【００１３】
この発明の態様によれば、頻出パターンを組み合わせて他の頻出パターンの候補を生成することとしたので、頻出パターンの候補を絞り込み、処理時間を短縮させることができる。
【００１４】
なお、本発明の構成要素、表現または構成要素の任意の組合せを、方法、装置、システム、コンピュータプログラム、記録媒体、データ構造などに適用したものも本発明の態様として有効である。
【発明の効果】
【００１５】
本発明の一つの態様によれば、プログラム中の任意の箇所に埋め込むことができる関数やマクロが出力するトレースレコードの出現パターンに基づいて、プログラム中で頻繁に実行される部分を抽出することとしたので、プログラムを構成する関数の粒度に関係なく、プログラム中で実行回数が多い部分を抽出することができるという効果を奏する。
【００１６】
また、本発明の一つの態様によれば、トレースレコードの出現パターンの長い部分の出現回数のみを集計して頻出部分を抽出することとしたので、プログラムを構成する関数の粒度に関係なく、プログラム中で実行回数が多く実行時間が長い部分を抽出することができるという効果を奏する。
【００１７】
また、本発明の一つの態様によれば、トレースレコードの出現パターンが最短になるように区切りながら、出現パターンの出現回数を計数することとしたので、出現回数の計数結果を一律にすることができるという効果を奏する。
【００１８】
また、本発明の一つの態様によれば、頻出パターンを組み合わせて他の頻出パターンの候補を生成することとしたので、頻出パターンの候補を絞り込み、処理時間を短縮させることができるという効果を奏する。
【発明を実施するための最良の形態】
【００１９】
以下に、本発明に係る性能障害要因分析プログラムおよび性能障害要因分析装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例】
【００２０】
まず、本実施例に係る性能障害要因分析方法の概要について説明する。本実施例に係る性能障害要因分析方法は、プログラムが実行時に出力したトレースレコードに基づいて性能障害要因となっている可能性がある部分を抽出する。トレースレコードとは、プログラムのソースファイル中の任意の箇所に埋め込まれたマクロや関数がファイル等に出力するレコードである。
【００２１】
図１は、トレースレコードを出力するマクロが埋め込まれたソースファイルの一例を示す図である。同図に示した例では、プログラムのソースファイルの任意の箇所にＴＲＡＣＥというマクロが埋め込まれている。ＴＲＡＣＥは、１つ以上の引数をもつことができ、当該のマクロが埋め込まれた箇所が実行されるたびに、与えられた引数や時刻等をトレースレコードとして出力する。ＴＲＡＣＥの第１引数には、ＴＲＡＣＥが埋め込まれた位置を識別するためのレコード種別が指定され、第２引数以降には、その時点の変数の値等を出力するための引数が任意に指定される。
【００２２】
なお、トレースレコードの出力によるプログラムの性能の低化や、記憶領域の消費等を回避するため、トレースレコードの出力は、ソースファイルのコンパイル時や、プログラムの実行時に所定のオプションが指定されていた場合にのみ実行されることとしてもよい。
【００２３】
図２は、出力されたトレースレコードの一例を示す図である。同図に示すように、トレースレコードは、レコード番号（Ｎｏ）、時刻、ＣＰＵ（Central Processing Unit）番号、レコード種別、付随データといった項目を有する。レコード番号は、トレースレコードの出力順に採番される連番である。時刻は、トレースレコードを出力する関数やマクロが実行された時刻であり、ＣＰＵ番号は、それを実行したＣＰＵの識別番号である。レコード種別は、ＴＲＡＣＥの第１引数であり、付随データは、ＴＲＡＣＥの２番目以降の引数である。
【００２４】
本実施例に係る性能障害要因分析方法は、実行回数の多い部分を特定するため、このように実行順に配列されたトレースレコードの並びの中から、頻出するパターンを抽出して出力する。
【００２５】
実際の運用時には、レコード種別だけでなく、付随データも比較してトレースレコードの同一性を判断することとしてもよい。また、プログラムを実行するＣＰＵが複数ある場合は、ＣＰＵ番号も比較してトレースレコードの同一性を判断することとしてもよい。また、ＣＰＵ番号毎にトレースレコードを分割して分析することとしてもよい。以下、本実施例では、説明を簡単にするため、レコード種別のみを基準として、トレースレコードの同一性を判断するものとする。
【００２６】
トレースレコードが出力される時間間隔は均一ではないが、同一のパターンにマッチするトレースレコード群の中の先頭と末尾のトレースレコードに記録されている時刻を取得し、その差をトレースレコード群の実行時間として用いたならば、実行時間を正確に算出可能である。以下では簡単のため、トレースレコードが出力される時間間隔は均一であることを仮定して、オカレンス長を採用する場合を詳述するが、前述の時刻の差を用いて、実行時間を採用する場合へ容易に拡張することができる。
【００２７】
トレースレコードの出現パターンを、レコード種別と、任意のレコード種別にマッチする「＊」との組合せで表現するものとする。例えば、「Ａ＊Ｂ」というパターンは、「Ａ」というレコード種別のトレースレコードが出現した後に、０件以上の何らかのトレースレコードが存在し、その後、「Ｂ」というレコード種別のトレースレコードが出現するパターンを表す。
【００２８】
また、本実施例に係る性能障害要因分析方法は、実行時間の長い部分を特定するため、オカレンス長を考慮して頻出パターンの抽出を行う。オカレンス長とは、パターンにマッチするトレースレコード群のレコード数である。例えば、以下のようなレコード種別をもつトレースレコードがこの順序で並んでいた場合、
「Ａ」「Ｃ」「Ｄ」「Ｗ」「Ｓ」「Ｂ」「Ｆ」「Ａ」「Ｓ」「Ｂ」
「Ａ＊Ｂ」というパターンには、
「Ａ」「Ｃ」「Ｄ」「Ｗ」「Ｓ」「Ｂ」
というトレースレコード群と
「Ａ」「Ｓ」「Ｂ」
というトレースレコード群がマッチし、前者のオカレンス長は６となり、後者のオカレンス長は３となる。
【００２９】
図３は、本実施例に係る性能障害要因分析方法の分析結果の一例を示す図である。同図に示すように、分析結果には、パターン長、頻出パターン、出現回数といった項目が含まれる。パターン長は、トレースレコードの同一性を判定するためのキーの数、すなわち、本実施例の場合は、パターンに含まれるレコードの数（ただし「＊」は含まない）である。頻出パターンは、パターンとオカレンス下限長からなる。頻出パターンは、このパターンがオカレンス下限長以上の長さでトレースレコードの並びに所定回数以上出現するパターンである。出現回数は、その頻出パターンの出現回数である。
【００３０】
本実施例に係る性能障害要因分析方法では、パターン長が長く出現回数が多い頻出パターンに相当する部分が、性能障害要因となっている可能性があるとみなすことができる。例えば、図３の例では、「Ｃ＊Ｄ＊Ｆ」に相当する部分や「Ｃ＊Ｈ＊Ｋ」に相当する部分が性能障害要因となっている可能性があるとみなすことができる。また、オカレンス長の指定を適切に行うことにより、実行時間を考慮して、性能障害要因となっている可能性がある部分を抽出することができる。
【００３１】
このように、本実施例に係る性能障害要因分析方法は、ソースプログラムの任意の箇所に埋め込まれた関数やマクロが出力するトレースレコードの出力パターンに基づいて、実行回数が多く、実行時間が長い部分を抽出するので、関数の粒度に関係なく、性能障害要因となっている可能性がある部分を抽出することができる。
【００３２】
次に、本実施例に係る性能障害要因分析方法を実行する性能障害要因分析装置１００の構成について説明する。図４は、性能障害要因分析装置１００の構成を示すブロック図である。同図に示すように、性能障害要因分析装置１００は、制御部１１０と記憶部１２０を有する。
【００３３】
制御部１１０は、性能障害要因分析装置１００を全体制御する制御部であり、候補パターン生成部１１１と、出現回数計数部１１２と、頻出パターン抽出部１１３と、分析結果出力部１１４とを有する。
【００３４】
候補パターン生成部１１１は、頻出パターンの候補となる候補パターンを生成し、記憶部１２０に候補パターンデータ１２２として記憶させる処理部である。トレースレコード中に存在しうるパターンの数は、パターン長が長くなるほど増大していくことになるが、候補パターン生成部１１１は、候補パターン数の増大により処理時間が長くなることを防止するため、パターン長が２以上の候補パターンについては、頻出パターン抽出部１１３によって抽出された頻出パターンを組み合わせて生成する。
【００３５】
出現回数計数部１１２は、トレースレコードが出力順に配列されたトレースデータ１２１を参照して、候補パターン生成部によって生成された各候補パターンの出現回数を計数し、その結果を候補パターンデータ１２２に記憶させる処理部である。トレースデータ１２１は、図２に示したトレースレコードの並びと同様のデータ構造を有し、記憶部１２０に記憶される。
【００３６】
ここで、候補パターンデータ１２２の一例を図５に示す。同図に示すように、候補パターンデータ１２２は、パターン長、候補パターン、出現回数といった項目を有する。パターン長は、トレースレコードの同一性を判定するためのキーの数、すなわち、本実施例の場合は、パターンに含まれるレコードの数（ただし「＊」は含まない）が設定される項目である。候補パターンは、候補パターン生成部１１１に生成された候補パターンが設定される項目である。出現回数は、出現回数計数部１１２によって計数された当該の候補パターンの出現回数が設定される項目であり、出現回数がオカレンス長毎に設定されるようになっている。
【００３７】
頻出パターン抽出部１１３は、出現回数計数部１１２によって計数された出現回数に基づいて出現回数が所定数よりも多い候補パターンを頻出パターンとして抽出して、記憶部１２０に頻出パターンデータ１２３として記憶させる処理部である。なお、頻出か否かを判定するための所定値は、パターン長毎に異なる値が与えられることとしてもよい。
【００３８】
ここで、頻出パターンデータ１２３の一例を図６に示す。同図に示すように、頻出パターンデータ１２３は、パターン長、頻出パターン、出現回数といった項目を有する。パターン長は、トレースレコードの同一性を判定するためのキーの数、すなわち、本実施例の場合は、パターンに含まれるレコードの数（ただし「＊」は含まない）が設定される項目である。頻出パターンは、頻出パターン抽出部１１３に抽出された頻出パターンが設定される項目である。出現回数は、その頻出パターンの出現回数が設定される項目である。
【００３９】
分析結果出力部１１４は、頻出パターンの抽出が完了した後に、図３に示したような分析結果を出力する処理部である。
【００４０】
次に、出現回数計数部１１２における候補パターンの出現回数の計数処理の詳細について説明する。例えば、出力順に配列されたトレースレコードのレコード種別が図７の通りであった場合、「Ａ＊Ｂ＊Ｃ」というパターンにマッチする部分は、同一のレコード種別をもつトレースレコードのレコード番号（Ｎｏ）のリストの形式で表現して
（２，３，４），  （２，３，１１），  （２，３，１９），  （２，８，１１），
（２，８，１９），  （２，１０，１１），  （２，１０，１９），
（２，１７，１９），  （５，８，１１），  （５，８，１９），
（５，１０，１１），  （５，１０，１９），  …，  （１６，１７，１９）
のように多数存在する。
【００４１】
ここで、本実施例に係る性能障害要因分析方法では、前述のように、オーバーラップしている部分については、出現回数として重複してカウントしないこととしているが、それでも、パターンにマッチする部分の区切り方により、出現回数やオカレンス下限長が変動してしまう。例えば、頻出か否かを判定する閾値が１の場合では、
（２，３，４），  （５，８，１１），  （１４，１７，１９）
のように区切れば、出現回数は３で、オカレンス下限長は７となるが、
（２，３，４），  （７，８，１１），  （１６，１７，１９）
のように区切れば、出現回数は３のままであるが、オカレンス下限長は５となる。また、
（２，３，１９）
のように区切れば、出現回数は１で、オカレンス下限長は１８となる。
【００４２】
このように出現回数やオカレンス下限長がぶれるのを回避するため、本実施例に係る性能障害要因分析方法では、パターンにマッチする部分を、オカレンス長が最も短くなるように区切っていく。具体的には、図７に示したトレースレコードの並びから、「Ａ＊Ｂ＊Ｃ」というパターンにマッチする部分を抽出する場合は、
（２，３，４），  （７，８，１１），  （１６，１７，１９）
のように区切る。
【００４３】
（５，８，１１）のように、オカレンス長が長い部分は、例えば、「Ａ＊Ａ＊Ｂ＊Ｃ」のようなパターン長がより長いパターンにもマッチする部分であり、そのようなパターン長がより長いパターンが頻出している場合には頻出パターンとして出力される。したがって、このようにオカレンス長が最も短くなるように区切ることは、現在対象となっている候補パターンの出現数を計数するのに最も適した区切り方であるといえる。
【００４４】
このように、オカレンス長が最も短くなるように区切りながら候補パターンの出現回数を計数するため、出現回数計数部１１２は、ＮＦＡ（Nondeterministic Finite Automaton）を用いて候補パターンの出現を検出する。ＮＦＡとは、受け付けた入力に応じて状態を遷移させるオブジェクトである。具体的には、出現回数計数部１１２は、ＮＦＡｆとＦＦＡｂという２種類のＮＦＡを用いる。ＮＦＡについては、例えば、Ｇ．Ｎａｖａｒｒｏ，Ｍ．Ｒａｆｆｉｎｏｔ，“Ｆｌｅｘｉｂｌｅ  Ｐａｔｔｅｒｎ  Ｍａｃｈｉｎｇ  ｉｎ  Ｓｔｒｉｎｇ，”Ｃａｍｂｒｉｄｇｅ  Ｕｎｉｖ．  Ｐｒｅｓｓ，２００２を参照のこと。
【００４５】
図８−１は、ＮＦＡｆの例である。ＮＦＡｆは、候補パターンを正順に検出するためのＮＦＡであり、例えば、候補パターンが「Ａ＊Ｂ＊Ｃ」であれば、レコード種別が「Ａ」のトレースレコードが入力されたときに初期状態から第１の状態に遷移し、その後、レコード種別が「Ｂ」のトレースレコードが入力されたときに第２の状態に遷移し、その後、レコード種別が「Ｃ」のトレースレコードが入力されたときに、候補パターンが検出されたことを示す状態に遷移する。
【００４６】
図８−２は、ＮＦＡｂの例である。ＮＦＡｂは、候補パターンを逆順に検出するためのＮＦＡであり、例えば、候補パターンが「Ａ＊Ｂ＊Ｃ」であれば、レコード種別が「Ｃ」のトレースレコードが入力されたときに初期状態から第１の状態に遷移し、その後、レコード種別が「Ｂ」のトレースレコードが入力されたときに第２の状態に遷移し、その後、レコード種別が「Ａ」のトレースレコードが入力されたときに、候補パターンが検出されたことを示す状態に遷移する。
【００４７】
図９は、ＮＦＡを用いた候補パターンの検出例を示す図である。同図に示すように、出現回数計数部１１２は、まず、ＮＦＡｆ１１を用いて正順に候補パターンを検出する。これにより、候補パターンが「Ａ＊Ｂ＊Ｃ」であれば、同図のように、
「Ａ」「Ｄ」「Ａ」「Ｂ」「Ｅ」「Ｂ」「Ｃ」
の部分で候補パターンが検出され、出現回数計数部１１２は、検出された部分の末尾を候補パターンにマッチする部分の末尾として確定する。
【００４８】
続いて、出現回数計数部１１２は、確定した末尾を基点として、ＮＦＡｂ１２を用いて逆順に候補パターンを検出する。これにより、同図のように、
「Ａ」「Ｂ」「Ｅ」「Ｂ」「Ｃ」
の部分で候補パターンが検出され、出現回数計数部１１２は、検出された部分の先頭を候補パターンにマッチする部分の先頭として確定する。このように、正順と逆順の２つのＮＦＡを組み合わせて用いることにより、オカレンス長が最も短くなるように区切りながら候補パターンの出現回数を計数することができる。
【００４９】
次に、図４に示した性能障害要因分析装置１００の処理手順について説明する。図１０は、性能障害要因分析装置１００の処理手順を示すフローチャートである。同図に示すように、制御部１１０は、まず、パターン長を表す変数ｉを１に初期化する（ステップＳ１０１）。そして、候補パターン生成部１１１が、パターン長１の候補パターンを候補パターンデータ１２２へ格納する（ステップＳ１０２）。パターン長１の候補パターンは、全アイテムのみを含むパターンであることは自明である。
【００５０】
続いて、出現回数計数部１１２が、後述する出現回数計数処理を実行して、パターン長ｉにおける候補パターンの出現回数を計数して候補パターンデータ１２２に設定する（ステップＳ１０３）。
【００５１】
続いて、頻出パターン抽出部１１３が、後述する頻出パターン抽出処理を実行してパターン長ｉにおける頻出パターンを抽出して頻出パターンデータ１２３に格納する（ステップＳ１０４）。ここで、制御部１１０は、パターン長ｉにおける頻出パターンの数を取得し（ステップＳ１０５）、頻出パターンの数が０でなければ（ステップＳ１０６否定）、変数ｉの値を１だけ増加させる（ステップＳ１０７）。
【００５２】
続いて、候補パターン生成部１１１が、後述する候補パターン生成処理を実行して、パターン長ｉ−１における頻出パターンに基づいてパターン長ｉにおける候補パターンを生成する（ステップＳ１０８）。その後、ステップＳ１０３から処理が再開され、出現回数計数部１１２が、出現回数計数処理を実行して、パターン長ｉにおける候補パターンの出現回数を計数し（ステップＳ１０３）、それ以降の処理も上記と同様に実行される。
【００５３】
そして、ステップＳ１０５において取得されたパターン長ｉにおける頻出パターンの数が０であれば（ステップＳ１０６肯定）、制御部１１０は、分析結果出力部１１４に頻出パターンデータ１２３の内容を分析結果として出力させた後（ステップＳ１０９）、処理を終了させる。
【００５４】
共通するフローをまとめて説明する都合上、候補パターン生成処理（ステップＳ１０８）、出現回数計数処理（ステップＳ１０３）、頻出パターン抽出処理（ステップＳ１０４）の順に説明する。
【００５５】
図１１は、候補パターン生成処理の処理手順を示すフローチャートである。例えば、「Ａ＊Ｂ＊Ｃ＊Ｄ」というパターンが頻出であるならば、その末尾のアイテムを削除した「Ａ＊Ｂ＊Ｃ」というパターンも、その先頭のアイテムを削除した「Ｂ＊Ｃ＊Ｄ」というパターンも頻出であるはずである。候補パターン生成部１１１は、この論理を用いることにより、パターン長の増加にともなって候補パターン数が増加することを抑制し、効率よく頻出ターンの抽出を行うことを可能にしている。
【００５６】
具体的には、候補パターン生成部１１１は、まず、パターン長ｉ−１における頻出パターンを頻出パターンデータ１２３から取得し、２つの頻出パターンの組合せを全て作成する（ステップＳ２０１）。
【００５７】
そして、未選択の組合せの選択を試みて（ステップＳ２０２）、選択できた場合は（ステップＳ２０３否定）、組合せの１番目の頻出パターンから先頭のアイテムｓを削除したパターンＸを作成し（ステップＳ２０４）、さらに、組合せの２番目の頻出パターンから末尾のアイテムｔを削除したパターンＹを作成する（ステップＳ２０５）。
【００５８】
そして、パターンＸとパターンＹが同一であれば（ステップＳ２０６肯定）、パターンＸの前にアイテムｓを付加し、末尾にアイテムｔを付加したパターンｓ＊Ｘ＊ｔが頻出である可能性があるので、このパターンをパターン長ｉにおける候補パターンとして候補パターンデータ１２２へ登録し（ステップＳ２０７）、その後、ステップＳ２０２へ戻って次の未選択の組合せの取得を試みる。
【００５９】
一方、パターンＸとパターンＹが同一でなければ（ステップＳ２０６否定）、パターンＸの前にアイテムｓを付加し、末尾にアイテムｔを付加したパターンｓ＊Ｘ＊ｔが頻出である可能性はないので、このパターンをパターン長ｉにおける候補パターンとして候補パターンデータ１２２へ登録することなく、ステップＳ２０２へ戻って次の未選択の組合せの取得を試みる。
【００６０】
そして、ステップＳ２０２において全ての組合せを取得済であった場合は（ステップＳ２０３肯定）、処理を終了する。
【００６１】
図１２は、出現回数計数処理の処理手順を示すフローチャートである。同図に示すように、出現回数計数部１１２は、まず、パターン長ｉにおける未取得の候補パターンを候補パターンデータ１２２から１つ取得する（ステップＳ３０１）。ここで、未取得の候補パターンを取得できた場合は（ステップＳ３０２否定）、取得した候補パターンに対応するＮＦＡｆとＮＦＡｂを作成する（ステップＳ３０３）。
【００６２】
そして、トレースレコードの位置を示す変数ｋを１に初期化し（ステップＳ３０４）、トレースデータ１２１からｋ番目のトレースレコードを取得する（ステップＳ３０５）。ここで、ｋがトレースデータ１２１のレコード数よりも大きく、トレースレコードを取得できなかった場合は（ステップＳ３０６肯定）、ステップＳ３０１に戻って、パターン長ｉにおける未取得の候補パターンを候補パターンデータ１２２から１つ取得する。
【００６３】
一方、トレースレコードを取得できた場合は（ステップＳ３０６否定）、取得したトレースレコードをＮＦＡｆに入力する（ステップＳ３０７）。そして、ＮＦＡｆが、候補パターンを検出したことを示す状態に遷移していなければ（ステップＳ３０８否定）、変数ｋの値を１だけ増加させた後（ステップＳ３０９）、ステップＳ３０５から処理を再開する。
【００６４】
ＮＦＡｆが、候補パターンを検出したことを示す状態に遷移していた場合は（ステップＳ３０８肯定）、現在の変数ｋの値を変数ｊに設定し（ステップＳ３１０）、トレースデータ１２１からｊ番目のトレースレコードを取得する（ステップＳ３１１）。そして、取得したトレースレコードをＮＦＡｂに入力し（ステップＳ３１２）、ＮＦＡｂが、候補パターンを検出したことを示す状態に遷移していなければ（ステップＳ３１３否定）、変数ｊの値を１だけ減算した後（ステップＳ３１４）、ステップＳ３１１から処理を再開する。
【００６５】
ＮＦＡｂが、候補パターンを検出したことを示す状態に遷移していた場合は（ステップＳ３１３肯定）、ｋ−ｊ＋１を演算してオカレンス長を算出し（ステップＳ３１５）、候補パターンデータ１２２において、パターン長がｉで候補パターンがステップＳ３０１で取得した候補パターンと一致するエントリの、オカレンス長に対応する出現回数を１だけインクリメントする（ステップＳ３１６）。そして、ＮＦＡｆとＮＦＡｂの状態を初期化した後（ステップＳ３１７）、ステップＳ３０９以降の処理を実行する。
【００６６】
そして、ステップＳ３０１において全ての候補パターンを取得済であった場合は（ステップＳ３０２肯定）、処理を終了する。
【００６７】
図１３は、頻出パターン抽出処理の処理手順を示すフローチャートである。同図に示すように、頻出パターン抽出部１１３は、まず、パターン長ｉにおける未取得の候補パターンを候補パターンデータ１２２から１つ取得する（ステップＳ４０１）。ここで、未取得の候補パターンを取得できた場合は（ステップＳ４０２否定）、候補パターンが頻出であるためのオカレンス長の下限値を次の手続きにより探索する。
【００６８】
まず、オカレンス長を表すカウンタｌ、オカレンス下限値を表すカウンタｍをそれぞれＭ＋１に、累積出現回数を表すカウンタｎを０に初期化する（ステップＳ４０３）。ここで、Ｍは、この候補パターンのオカレンス長の最大値であり、候補パターンデータ（図５）では、出現回数欄における最も右側の非０値を格納するインデックスである。続いて、ｌをデクリメントした後（ステップＳ４０４）、ｌが０より大であれば（ステップＳ４０５肯定）、累積出現回数ｎにこの候補パターンのオカレンス長ｌにおける出現回数を加算する（ステップＳ４０６）。さらに、累積出現回数ｎが頻出であるか否かを判定するための閾値より小さい場合のみ（ステップＳ４０７肯定）、オカレンス下限値ｍにｌを代入し（ステップＳ４０８）、ステップＳ４０４から処理を再開する。そして、オカレンス長ｌが０より大でなくなったならば（ステップＳ４０５否定）、ステップＳ４０９へジャンプする。
【００６９】
そして、累積出現回数ｎが、頻出であるか否かを判定するための閾値以上であれば（ステップＳ４０９肯定）、取得した候補パターンとオカレンス下限長ｍ−１をパターン長ｉにおける頻出パターンとして頻出パターンデータ１２３に格納する（ステップＳ４１０）。そして、集計した出現回数を、そのエントリの出現回数として設定し（ステップＳ４１１）、ステップＳ４０１から処理を再開する。
【００７０】
一方、集計した累積出現回数ｎが、頻出であるか否かを判定するための閾値よりも小さいならば（ステップＳ４０９否定）、候補パターンを頻出パターンとして登録することなく、ステップＳ４０１から処理を再開する。
【００７１】
そして、ステップＳ４０１において全ての候補パターンを取得済であった場合は（ステップＳ４０２肯定）、処理を終了する。
【００７２】
なお、図４に示した本実施例に係る性能障害要因分析装置１００の構成は、本発明の要旨を逸脱しない範囲で種々に変更することができる。例えば、性能障害要因分析装置１００の制御部１１０の機能をソフトウェアとして実装し、これをコンピュータで実行することにより、性能障害要因分析装置１００と同等の機能を実現することもできる。以下に、制御部１１０の機能をソフトウェアとして実装した性能障害要因分析プログラム１０７１を実行するコンピュータの一例を示す。
【００７３】
図１４は、性能障害要因分析プログラム１０７１を実行するコンピュータ１０００を示す機能ブロック図である。このコンピュータ１０００は、各種演算処理を実行するＣＰＵ１０１０と、ユーザからのデータの入力を受け付ける入力装置１０２０と、各種情報を表示するモニタ１０３０と、記録媒体からプログラム等を読み取る媒体読取り装置１０４０と、ネットワークを介して他のコンピュータとの間でデータの授受を行うネットワークインターフェース装置１０５０と、各種情報を一時記憶するＲＡＭ（Random Access Memory）１０６０と、ハードディスク装置１０７０とをバス１０８０で接続して構成される。
【００７４】
そして、ハードディスク装置１０７０には、図４に示した制御部１１０と同様の機能を有する性能障害要因分析プログラム１０７１と、図４に示した記憶部１２０に記憶される各種データに対応する性能障害要因分析用データ１０７２とが記憶される。なお、性能障害要因分析用データ１０７２を、適宜分散させ、ネットワークを介して接続された他のコンピュータに記憶させておくこともできる。
【００７５】
そして、ＣＰＵ１０１０が性能障害要因分析プログラム１０７１をハードディスク装置１０７０から読み出してＲＡＭ１０６０に展開することにより、性能障害要因分析プログラム１０７１は、性能障害要因分析プロセス１０６１として機能するようになる。そして、性能障害要因分析プロセス１０６１は、性能障害要因分析用データ１０７２から読み出した情報等を適宜ＲＡＭ１０６０上の自身に割り当てられた領域に展開し、この展開したデータ等に基づいて各種データ処理を実行する。
【００７６】
なお、上記の性能障害要因分析プログラム１０７１は、必ずしもハードディスク装置１０７０に格納されている必要はなく、ＣＤ−ＲＯＭ等の記憶媒体に記憶されたこのプログラムを、コンピュータ１０００が読み出して実行するようにしてもよい。また、公衆回線、インターネット、ＬＡＮ（Local Area Network）、ＷＡＮ（Wide Area Network）等を介してコンピュータ１０００に接続される他のコンピュータ（またはサーバ）等にこのプログラムを記憶させておき、コンピュータ１０００がこれらからプログラムを読み出して実行するようにしてもよい。
【００７７】
上述してきたように、本実施例では、プログラム中の任意の箇所に埋め込むことができる関数やマクロが出力するトレースレコードの出現パターンに基づいて、プログラム中で頻繁に実行される部分を抽出することとしたので、プログラムを構成する関数の粒度に関係なく、プログラム中で実行回数が多い部分を抽出することができる。
【００７８】
また、本実施例では、トレースレコードの出現パターンの長い部分の出現回数のみを集計して頻出部分を抽出することとしたので、プログラムを構成する関数の粒度に関係なく、プログラム中で実行回数が多く実行時間が長い部分を抽出することができる。
【産業上の利用可能性】
【００７９】
以上のように、本発明に係る性能障害要因分析プログラムおよび性能障害要因分析装置は、プログラムの性能障害要因となっている箇所の分析に有用であり、特に、プログラムを構成する関数の粒度に関係なく、プログラム中で実行回数が多く実行時間が長い部分を抽出することが必要な場合に適している。
【図面の簡単な説明】
【００８０】
【図１】図１は、トレースレコードを出力するマクロが埋め込まれたソースファイルの一例を示す図である。
【図２】図２は、出力されたトレースレコードの一例を示す図である。
【図３】図３は、本実施例に係る性能障害要因分析方法の分析結果の一例を示す図である。
【図４】図４は、性能障害要因分析装置の構成を示すブロック図である。
【図５】図５は、候補パターンデータの一例を示す図である。
【図６】図６は、頻出パターンデータの一例を示す図である。
【図７】図７は、トレースレコードの並びの一例を示す図である。
【図８−１】図８−１は、ＮＦＡｆの例を示す図である。
【図８−２】図８−２は、ＮＦＡｂの例を示す図である。
【図９】図９は、ＮＦＡを用いた候補パターンの検出例を示す図である。
【図１０】図１０は、性能障害要因分析装置の処理手順を示すフローチャートである。
【図１１】図１１は、候補パターン生成処理の処理手順を示すフローチャートである。
【図１２】図１２は、出現回数計数処理の処理手順を示すフローチャートである。
【図１３】図１３は、頻出パターン抽出処理の処理手順を示すフローチャートである。
【図１４】図１４は、性能障害要因分析プログラムを実行するコンピュータを示す機能ブロック図である。
【符号の説明】
【００８１】
１１  ＮＦＡｆ
１２  ＮＦＡｂ
１００  性能障害要因分析装置
１１０  制御部
１１１  候補パターン生成部
１１２  出現回数計数部
１１３  頻出パターン抽出部
１１４  分析結果出力部
１２０  記憶部
１２１  トレースデータ
１２２  候補パターンデータ
１２３  頻出パターンデータ
１０００  コンピュータ
１０１０  ＣＰＵ
１０２０  入力装置
１０３０  モニタ
１０４０  媒体読取り装置
１０５０  ネットワークインターフェース装置
１０６０  ＲＡＭ
１０６１  性能障害要因分析プロセス
１０７０  ハードディスク装置
１０７１  性能障害要因分析プログラム
１０７２  性能障害要因分析用データ
１０８０  バス
【国際調査報告】
2008129635.tif 000018
2008129635.tif 000019
2008129635.tif 000020
2008129635.tif 000021