プログラム、分析方法、および情報処理装置
【課題】分析対象装置の処理能力の余力の有無を判断することができるようにする。
【解決手段】計算手段1cは、分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段1bから取得する。次に計算手段1cは、取得した情報に基づいて、分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間を計算する。また計算手段1cは、集計区間ごとに、集計区間内で実行された処理それぞれの進行量を合計した合計進行量を計算する。決定手段1dは、集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定する。そして検出手段1eは、合計処理時間が前記閾値以上の集計区間を検出する。
【解決手段】計算手段1cは、分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段1bから取得する。次に計算手段1cは、取得した情報に基づいて、分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間を計算する。また計算手段1cは、集計区間ごとに、集計区間内で実行された処理それぞれの進行量を合計した合計進行量を計算する。決定手段1dは、集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定する。そして検出手段1eは、合計処理時間が前記閾値以上の集計区間を検出する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータシステムの性能を分析するプログラム、分析方法、および情報処理装置に関する。
【背景技術】
【0002】
従来、複数のコンピュータが階層的に処理を分担するコンピュータシステム(多階層システムという)が利用されている。以下、多階層システムを構成するコンピュータを「サーバ」と呼ぶ。多階層システムとして、例えばシステム利用のためのインタフェースを提供するWebサーバ、システム上の業務処理を実行するApp(Application)サーバおよびデータを管理するDB(Database)サーバを有する三階層システムが知られている。各サーバは、ユーザからの処理要求に対して連携して処理を実行し、その処理要求に応答する。このように、各サーバに処理を分担させることで、システムの負担を分散させると共に、各階層のコンピュータの量を適切に調整することによって、信頼性や応答性を向上できる。
【0003】
このようなWeb三階層システムに代表される多階層システムにおいて、エンドユーザにおける応答時間の増大が発生した際には、問題が発生しているサーバが属する階層を特定することが、障害対応の第一歩として非常に重要である。そのために、各階層のサーバにおける処理時間を測定し、その推移を監視することによって問題の有無を判定する手法が広く一般に採用されている。
【0004】
例えば、トランザクションモデルを生成し、スイッチを介して送受信されたメッセージからトランザクションモデルに沿って進行するメッセージの受け渡しを検出する技術が考えられている。この技術により、任意のトランザクションを構成するメッセージの集合を特定し、そのトランザクションの解析が可能となる。例えば、ユーザのリクエストからレスポンスまでの各アプリケーションの処理を追跡することができる。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2006−11683号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかし、従来の方法では、分析対象であるサーバが処理に要した時間を把握することはできるものの、サーバの処理能力に余力があるかどうかについてはわからなかった。
1つの側面では、本発明は、分析対象装置の処理能力の余力の有無を判断することができるプログラム、分析方法、および情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【0007】
1つの案では、コンピュータに、分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段から取得し、該取得した情報に基づいて、前記分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間と、集計区間内で実行された処理それぞれの進行量を合計した合計進行量とを計算し、集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定し、合計処理時間が前記閾値以上の集計区間を検出する、処理を実行させるプログラムが提供される。
【発明の効果】
【0008】
分析対象装置の処理能力の余力の有無を判断することができるようになる。
【図面の簡単な説明】
【0009】
【図1】第1の実施の形態に係るシステムの構成の一例を示す図である。
【図2】第1の実施の形態の分析処理の手順の一例を示すフローチャートである。
【図3】第1の実施の形態による余力判定例を示す図である。
【図4】第2の実施の形態の業務システムの全体構成を示す図である。
【図5】第2の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。
【図6】第2の実施の形態に係る分析サーバの機能の一例を示すブロック図である。
【図7】キャプチャ処理の手順の一例を示すフローチャートである。
【図8】キャプチャデータ記憶部のデータ構造の一例を示す図である。
【図9】性能分析処理の手順の一例を示すフローチャートである。
【図10】メッセージデータ記憶部のデータ構造の一例を示す図である。
【図11】抽象化ルール記憶部のデータ構造の一例を示す図である。
【図12】HTTPのプロトコルのジョブ種の例を示す図である。
【図13】DBのプロトコルのジョブ種の例を示す図である。
【図14】ジョブ種が識別されたメッセージフローの一例を示す図である。
【図15】メッセージフロー情報記憶部のデータ構造の一例を示す図である。
【図16】階層別性能分析処理の手順の一例を示すフローチャートである。
【図17】多重度とスループットとの関係を示す図である。
【図18】集計区間への分割例を示す図である。
【図19】実行期間の集計区間への振り分け例を示す図である。
【図20】並列で処理が実行される状況を示す図である。
【図21】スループット・多重度算出処理の手順の一例を示すフローチャートである。
【図22】集計区間情報記憶部のデータ構造の一例を示す図である。
【図23】正規化スループット値記憶部のデータ構造の一例を示す図である。
【図24】スループットの時系列推移の一例を示す図である。
【図25】多重度の時系列推移の一例を示す図である。
【図26】多重度とスループットとの関係の一例を示す散布図である。
【図27】飽和多重度算出処理の一例を示すフローチャートである。
【図28】ボトルネック判定処理の手順の一例を示すフローチャートである。
【図29】階層が完全未飽和状態の一例を示す散布図である。
【図30】階層が未飽和状態の一例を示す散布図である。
【図31】階層が半飽和状態の一例を示す散布図である。
【図32】階層が飽和状態の一例を示す散布図である。
【図33】多重度とスループットの関連性を壊す要因の一例を示す図である。
【図34】間接的な外部資源待ち時間を除外しない場合の各集計区間のスループットと多重度との一例を示す散布図である。
【図35】間接的な外部資源待ち時間を除外した場合の各集計区間のスループットと多重度との一例を示す散布図である。
【図36】Full−GCによる停止期間が発生した場合の一連の業務処理を示す図である。
【図37】第4の実施の形態における正規化スループット値記憶部のデータ構造の一例を示す図である。
【図38】1ジョブ当たりの正規化スループット値に基づいてスループットを計算した場合の散布図である。
【図39】1メッセージ当たりの正規化スループット値に基づいてスループットを計算した場合の散布図である。
【図40】第5の実施の形態における飽和多重度算出処理の一例を示すフローチャートである。
【図41】第6の実施の形態の集計区間情報記憶部のデータ構造の一例を示す図である。
【図42】余力計算処理の手順の一例を示すフローチャートである。
【図43】余力計算処理を説明する図である。
【図44】集計区間長決定処理の手順の一例を示すフローチャートである。
【図45】低負荷時の平均処理時間算出処理の一例を示すフローチャートである。
【図46】多重度が閾値以下の集計区間の抽出例を示す図である。
【図47】瞬間スループット低下検出処理の手順の一例を示すフローチャートである。
【図48】第9の実施の形態により異常な瞬間スループット低下が検出される散布図の一例である。
【発明を実施するための形態】
【0010】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第1の実施の形態〕
第1の実施の形態は、単位期間における処理の合計処理時間の平均と、その単位期間における処理の合計進行量との関連を求め、合計処理時間が上昇しても合計進行量が上昇しなくなっている場合に、処理性能が限界に達していると判定するものである。
【0011】
図1は、第1の実施の形態に係るシステムの構成の一例を示す図である。第1の実施の形態では、情報処理装置1が、例えばWeb三階層システム中の各サーバを分析対象装置とし、ネットワーク2を介してサーバの性能分析を行う。Web三階層システムは、端末装置3からの要求に応じて、複数のサーバが連携して処理を実行するコンピュータシステムである。Web三階層システムは、例えばWebサーバ4、Appサーバ5、DBサーバ6で構成される。
【0012】
情報処理装置1は、例えば監視手段1a、記憶手段1b、計算手段1c、決定手段1d、および検出手段1eを有する。
監視手段1aは、分析対象期間内のWebサーバ4、Appサーバ5、DBサーバ6の動作を監視し、各サーバの処理の実行期間を示す情報を取得する。そして監視手段1aは、取得した情報を記憶手段1bに格納する。
【0013】
記憶手段1bは、分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶する。
計算手段1cは、分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段1bから取得する。次に計算手段1cは、取得した情報に基づいて、分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの進行量を合計した合計進行量を計算する。さらに計算手段1cは、取得した情報に基づいて、分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間を計算する。
【0014】
決定手段1dは、集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定する。
【0015】
検出手段1eは、合計処理時間が閾値以上の集計区間を検出する。
このような構成のシステムにおいて、以下のような処理が行われる。
図2は、第1の実施の形態の分析処理の手順の一例を示すフローチャートである。以下、図2に示す処理をステップ番号に沿って説明する。
【0016】
[ステップS1]監視手段1aは、分析対象期間内のWebサーバ4、Appサーバ5、DBサーバ6の動作を監視する。例えば監視手段1aは、Webサーバ4、Appサーバ5、DBサーバ6に入出力されるメッセージをネットワーク2からキャプチャする。監視手段1aは、監視内容に基づいて、Webサーバ4、Appサーバ5、DBサーバ6から、処理の実行状況に関する情報を、監視結果として取得する。そして監視手段1aは、監視結果を記憶手段1bに格納する。
【0017】
[ステップS2]計算手段1cは、記憶手段1bに格納されている情報に基づいて、分析対象装置であるサーバごとに、合計進行量を計算する。例えば計算手段1cは、分析対象期間を細分化して、集計区間を生成する。次に計算手段1cは、生成した集計区間ごとに、各サーバにおいて集計区間内で実行された処理それぞれの進行量を計算する。そして計算手段1cは、サーバごとに、各集計区間の進行量を合計し、合計進行量とする。
【0018】
[ステップS3]計算手段1cは、記憶手段1bに格納されている情報に基づいて、分析対象装置であるサーバごとに、合計処理時間を計算する。例えば計算手段1cは、分析対象期間を細分化して、集計区間を生成する。次に計算手段1cは、生成した集計区間ごとに、各サーバにおいて集計区間内で実行された処理それぞれの実行に費やされた時間を計算する。そして計算手段1cは、サーバごとに、各集計区間の実行に費やされた時間を合計し、合計処理時間とする。なお各サーバでは、複数の処理を並列実行する場合がある。そのため、合計処理時間は、集計区間の長さ(時間幅)より大きくなる場合もある。
【0019】
[ステップS4]決定手段1dは、集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定する。
【0020】
[ステップS5]検出手段1eは、合計処理時間が閾値以上の集計区間を検出する。
このようにして検出された集計区間は、合計処理時間が増加しても、処理の進行が増加しなくなっている時間帯である。すなわち、性能の余力がなくなっている時間帯である。合計処理時間が閾値以上の集計区間が多数検出されたサーバは、余力がなくなりつつあることが分かる。また合計処理時間が閾値以上の集計区間がほとんど検出されていないサーバは、性能の余力が十分にあることが分かる。
【0021】
図3は、第1の実施の形態による余力判定例を示す図である。図3の例では、各サーバにおいて、処理要求が入力されてから応答を返すまでに、処理要求に応じて実行された処理全体で、処理の進行を示す単位量を「1」としている。複数の集計区間を跨って実行された処理は、処理の単位量を処理時間に応じて、各集計区間に比例配分される。
【0022】
Webサーバ4では、1つの処理要求に応じて、「集計区間1」と「集計区間2」とで2回に分けて処理7が行われている。「集計区間1」における処理時間は「14ms」であり、「集計区間2」における処理時間は「11ms」である。そこで進行の単位量「1」を2つの集計区間に比例配分すると、「集計区間1」の進行量が「0.56」、「集計区間2」の進行量が「0.44」となる。図3の例では、「集計区間1」と「集計区間2」との間に1つの処理要求に応じた処理7のみが実行されているため、合計進行量も、「集計区間1」が「0.56」、「集計区間2」が「0.44」となる。
【0023】
Appサーバ5では、1つの処理要求に応じて、「集計区間1」と「集計区間2」とで5回に分けて処理8が行われている。「集計区間1」における処理時間は、「19ms」と「9ms」であり、合計「28ms」である。「集計区間2」における処理時間は「10ms」と「12ms」と「21ms」であり、合計「43ms」である。そこで進行の単位量「1」を2つの集計区間に比例配分すると、「集計区間1」の進行量が「0.394」、「集計区間2」の進行量が「0.606」となる。図3の例では、「集計区間1」と「集計区間2」との間に1つの処理要求に応じた処理8のみが実行されているため、合計進行量も、「集計区間1」が「0.394」、「集計区間2」が「0.606」となる。
【0024】
DBサーバ6では、4つの処理要求に応じて、「集計区間1」と「集計区間2」とで、処理要求ごとに1回ずつ、計4回の処理9a,9b,9c,9dが行われている。2つめの処理要求に応じた処理9bは、「集計区間1」と「集計区間2」とに跨って実行されている。このように2つの集計区間に跨って実行された処理9bに関しては、処理進行の単位量「1」が、処理時間に応じて比例配分される。処理9bの「集計区間1」における処理時間は「10ms」であり、「集計区間2」における処理時間は「24ms」であり、合計「34ms」である。そこで処理9bに関する進行の単位量「1」を2つの集計区間に比例配分すると、「集計区間1」の進行量が「0.29」、「集計区間2」の進行量が「0.71」となる。図3の例では、「集計区間1」において処理9aが完結しており、その処理9aの進行の単位量「1」と処理9bの進行量「0.29」の合計値「1.29」が、「集計区間1」の合計進行量となる。また「集計区間2」において処理9c,9dが完結しており、その処理9c,9dそれぞれの進行の単位量「1」と処理9bの進行量「0.71」の合計値「2.71」が、「集計区間2」の合計進行量となる。
【0025】
サーバごとの各集計区間の合計処理時間は、集計区間内で処理の実行に要した時間の合計である。Webサーバ4では、「集計区間1」の合計処理時間は「14ms」、「集計区間2」の合計処理時間は「11ms」である。Appサーバ5では、「集計区間1」の合計処理時間は「28ms」、「集計区間2」の合計処理時間は「43ms」である。DBサーバ6では、「集計区間1」の合計処理時間は「19ms」、「集計区間2」の合計処理時間は「39ms」である。
【0026】
このようにして集計された情報に基づいて、サーバごとに、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる閾値が計算される。なお、所定値としては、例えば、合計処理時間が少ない時間帯の合計処理時間の増加量に対する合計進行量の増加量の割合に、所定の係数(1より小さい値)を掛けた値とする。
【0027】
このようにして求められた閾値よりも合計処理時間が長い集計区間が、複数のサーバそれぞれに関して検出される。例えば図3の例では、Webサーバ4とDBサーバ6とについては、合計処理時間が閾値以上となっている集計区間の、全体の集計区間に対する割合は半分以下であり、少ない。他方、Appサーバ5については、ほとんどの集計区間において、合計処理時間が閾値以上となっている。そうすると、Appサーバ5において処理能力の余力がなくなっており、Web三階層システムにおけるボトルネックとなっていることが分かる。
【0028】
ここで言うボトルネックとは、システム全体としての処理性能の上昇を阻害している要因のことである。またボトルネックの検出とは、複数のコンピュータが階層的に処理を分担するシステム(多階層システム)の内のどの階層に問題があって、システム全体としての性能が頭打ちになっているのかを求めることである。
【0029】
このように、第1の実施の形態によれば、各サーバの処理能力の余力の有無を検出することができる。これにより、多階層システムにおいて、ボトルネックとなっているサーバを容易に特定できる。
【0030】
ところで、従来は、多階層システムにおけるボトルネックとなっているサーバの検出は、難しかった。以下、多階層システムにおいて、システム全体の処理性能が限界を迎えた場合の、ボトルネックとなっているコンピュータの検出の困難性について説明する。
【0031】
多階層システムの運用中に発生したボトルネックの検出に利用可能と考えられる技術を大別すると、下記の5通りに分類される。
・第1の手法:システムリソースの利用状況を監視する。
・第2の手法:アプリケーション内部の詳細な動作状況を監視する。
・第3の手法:コンピュータ上でアプリケーションの外部挙動(応答時間や各階層での滞在時間)を監視する。
・第4の手法:ネットワーク上でアプリケーションの外部挙動(応答時間や各階層での滞在時間)を監視する。
・第5の手法:システム運用前に予め負荷テストを行い、負荷量とスループットの関係を学習し、その知識を利用して運用中のボトルネックを特定する。
【0032】
次に、各手法について詳細に説明する。
<第1の手法>
第1の手法に該当する技術は、例えば多階層システムに含まれるコンピュータ上に特定のプロセス(エージェントと呼ばれることが多い)を用意しておき、そのプロセスが様々な測定値を収集する手法である。取得する測定値の例としては、マシン全体でのCPU利用率やメモリ使用量などの、マシン単位でのシステムリソース利用状況がある。また取得する測定値の別の例としては、プロセスごとのCPU利用率やファイルオープン数などの、プロセス単位の情報がある。
【0033】
第1の手法では、分析対象の各コンピュータ上で収集されたデータは、一旦そのコンピュータ上の記録装置へ書き出しておいて、後で分析を行うコンピュータで回収される。または分析対象のコンピュータがネットワーク経由で直接、分析を行うコンピュータに送信する。これによって、多階層システムに含まれるコンピュータ以外の特定のコンピュータに集められる。そしてデータが集められたコンピュータにおいて、多階層システム内の全コンピュータのデータを突き合わせて分析することによって、ボトルネックを検出することになる。
【0034】
<第2の手法>
第2の手法に該当する技術としては、例えばアプリケーションソフトウェアの機能を利用したり、アプリケーションソフトウェアに改造を加えたりして、アプリケーションソフトウェア内部の情報を取得する手法である。取得する情報は、例えばデータベース(DB)ソフトウェアにおけるDB問い合わせ処理時間、同時接続ユーザ数、各内部メソッドの開始・終了時刻などである。これらの情報は、エージェントのような別プロセスから当該ソフトウェアに問い合わせて得られる場合もあるし、当該アプリケーションソフトウェア自身がログなどの形式で出力する場合もある。
【0035】
第2の手法においても、第1の手法と同様に、各コンピュータ上で収集されたデータは、一旦そのコンピュータ上の記録装置へ書き出しておいて、後でそのコンピュータとは別の特定のコンピュータに集められる。そしてデータが集められたコンピュータにおいて、データが分析され、ボトルネックが検出される。
【0036】
<第3の手法>
第3の手法における外部挙動を監視する技術としては、応答時間を測定する手法が一般的である。応答時間は、多階層システムのあらゆる階層において測ることが考えられる。
【0037】
第3の手法では、例えば各コンピュータ上のアプリケーションソフトウェアの機能を利用したり、アプリケーションソフトウェアに改造を加えたりすることによって、アプリケーションソフトウェアが他コンピュータとメッセージ送受を行ったことを記録する。そしてアプリケーションソフトウェアは、その中から各処理要求の受信時刻と処理結果の返信時刻を抜き出して応答時間を求める手法である。
【0038】
第3の手法においても、第1の手法と同様に、各コンピュータ上で収集されたデータは、一旦そのコンピュータ上の記録装置へ書き出しておいて、後でそのコンピュータとは別の特定のコンピュータに集められる。そしてデータが集められたコンピュータにおいて、データが分析され、ボトルネックが検出される。
【0039】
<第4の手法>
第4の手法における外部挙動を監視する技術も、第3の手法と同様、応答時間を、多階層システムの各階層において測定する手法が一般的である。第3の手法と第4の手法との違いは、応答時間の測定方法にある。
【0040】
第4の手法では、例えば多階層システムに含まれるコンピュータには手を加えず、ネットワーク上を流れる通信パケットを、多階層システムに含まれないコンピュータで取得する。そして、通信パケットを取得したコンピュータが、取得した通信パケットから、多階層システムに含まれるコンピュータ間のメッセージ送受を解析し、それらの送受時刻から応答時間を求める。
【0041】
第4の手法には、他の全ての手法と違って、各コンピュータ内には一切手を加えないので各コンピュータ本来の挙動に一切影響を与えないという利点がある。以下に、第4の手法をさらに詳細に説明する。コンピュータネットワーク上から通信パケットを取得する方法として、ネットワークスイッチの持つポートミラーリング機能を利用する方法がある。ポートミラーリング機能は、ネットワークスイッチ上の特定のポートを流れるIP(Internet Protocol)パケットをコピーし、そのコピーを指定したポートに転送する。そのポートの先に接続したコンピュータにおいて、転送されてきたIPパケットをキャプチャして記録することができる。
【0042】
こうして取得したデータは、コンピュータ間でサーバプログラム同士がやり取りするメッセージの形式ではなく、細分化されたIPパケットという形式である。ここからメッセージ上の情報を取得するには、まず細分化されたIPパケット同士を組み立て、さらにはそのパケットをメッセージのプロトコル種別に従って解析することとなる。メッセージを解析することによって、各処理の要求と、その要求に対する返信のペア(メッセージペア)を見つけだすことができる。メッセージペアが検出できれば、メッセージペアの時刻情報の差分を取れば応答時間を求めることができる。
【0043】
さらには、各メッセージの情報から、処理要求の内容に関する情報も取得することができる。例えば、HTTP(HyperText Transfer Protocol)要求の場合は、取得を要求しているURL(Uniform Resource Locator)であるとか、DB要求の場合はSQL(Structured Query Language)文などの情報である。これらの内容と応答時間とから、どのような業務処理にどれくらいの応答時間を要しているか判断することができる。この応答時間の平均値の推移を監視することによって、特定の階層でだけ応答時間が増加すれば、それはその階層下の処理に何らかの問題が発生していると考え、ボトルネック検出の手掛かりとすることができる。また、業務処理内容ごとに集計すれば、特定の業務処理の応答時間だけが低下した場合に、その業務処理に関連している部分にボトルネックが存在すると考えることもできる。
【0044】
<第5の手法>
第5の手法は、事前の負荷テストによってデータ収集を行うことを前提とする。事前の負荷テストでは、例えば多階層システムに含まれないコンピュータ(負荷生成器)から多階層システムに対して運用時を模した負荷を掛ける。例えば、負荷生成器から多階層システムに、同時アクセスユーザ数を変えながら、多数のパターンの要求を入力する。そして、処理結果を観測するコンピュータにおいて、同時アクセスユーザ数ごとの多階層システムのスループットを測定する。処理結果を観測するコンピュータでは、システムに掛かる同時アクセスユーザ数とスループットの関係から、スループットが上限に達する同時アクセスユーザ数を判定し、判定した同時アクセスユーザ数を限界同時アクセスユーザ数とする。このような事前処理を行った後、その監視対象の多階層システムの運用時に同時アクセスユーザ数を監視しておき、先に得た限界同時アクセスユーザ数に達すると、システムの性能が限界に達したと判定する。
【0045】
以上のような第1から第5の手法のいずれかを用いて多階層システムのボトルネックを検出した場合、以下のような課題が残ってしまう。
<第1の手法の課題>
特定のシステムリソースを消費し尽くしていない状況で発生したボトルネックは検出できない。
【0046】
システムリソースの利用状況の監視では、ボトルネックを検出できない場合がある。これは、以下のような理由により、特定のリソースが枯渇していなくても、そのコンピュータがボトルネックとなることがあるからである。
1.ソフトウェア設定やユーザアプリ内部において、並列度を制限している場合
2.複数リソースが複合してボトルネックとなっている場合
なお第2の手法を使用して、アプリケーション内部の詳細な動作状況を監視する場合、1.の問題は解決できる可能性があるが、それも適切なデータを取得できた場合に限られる。アプリケーション内部でボトルネック要因になると考えられる要素は、一般的に非常に多く存在する。そのため、それらの全てについて網羅的に詳細な記録を取り続けることは、データの記録装置への書き出しに要する時間とシステム負荷を考えると、現実的には困難である。
【0047】
<第1〜第3の手法に共通の課題>
第1〜第3の手法には、極短時間で変化するボトルネックが検出できないという問題がある。
【0048】
各コンピュータ上でデータを測定する手法には、以下の2つの要因があって、極短い時間間隔ごとの詳細な分析を行うことが難しいという問題がある。
極短い時間間隔ごとの詳細なデータはデータ量が大きくなり、コンピュータ上の記録装置に一旦格納して後から取り出す場合においても、直接ネットワーク経由で外部へ送り出す場合においても、そのコンピュータに掛かる負担が大きくなる。そのため、データの収集処理が、コンピュータ上で動作しているアプリケーションの挙動に大きく影響を及ぼしてしまう。その結果として、そのアプリケーションの本来の挙動とは大きく異なる挙動を観測してしまうことになる。
【0049】
コンピュータ間で時計の誤差があり、これはNTP(Network Time Protocol)等の時計同期システムを使用したとしても、数ミリ秒単位の誤差は免れない。これでは、複数コンピュータから収集したデータを付き合わせて分析する際に、タイムスタンプ間に誤差が生じていて、正しく突き合わせを実行することができず、極短い時間間隔での精密な分析はできなくなる。
【0050】
極短い時間間隔ごとの詳細な分析を行えない結果として、例えば、一つのコンピュータ上で、測定期間より短い一瞬一瞬だけの短時間に発生しているボトルネックは、測定期間内で平均化されてしまい、その後の分析で検出できないことになる。また、複数の階層間で測定期間より短い極短時間の内にボトルネック要因が推移している場合は、同様に検出できない。
【0051】
<第4の手法の課題>
アプリケーションの外部挙動を監視する第4の手法には、以下の課題がある。
応答時間/処理時間などの外部観測ではボトルネックを見誤る場合がある。このようなことは、外部観測では外面の挙動しか観測しておらず、そのような挙動が発生する原因となる内部処理については何も情報を得ていないために発生する。
【0052】
例えば、発生しがちなケースとして次のようなことがある。ある層がボトルネックになった際に、その層に送られてくる処理要求の数が処理可能な数を超えて際限なく増加していく場合は、その階層における応答時間が大きく悪化する。しかし、その階層へ送られてくる処理要求の数が適切にコントロールされている場合は、その階層へはそれ以上処理要求が送られて来なくなる。それによって、応答時間の低下は小さく留まる。その代わりに、その層へ処理要求を送る上位の階層では、下位の階層へ処理を送るまでの待ち時間が指数関数的に増加する。外部観測で処理時間の推移を監視していると、その待ち時間の増加と純粋な処理時間の増加の区別が付かないために、あたかもその待ち時間が増加した階層にボトルネックが存在するかのように誤認してしまう。
【0053】
<第5の手法の課題>
システム運用前に予め負荷テストを行い、負荷量とスループットの関係を学習し、その知識を利用して運用中のボトルネックを特定する第5の手法には、以下の課題がある。
【0054】
第5の手法を多階層システムに適用する場合、多階層システムの最上段に掛かる多重度(同時アクセスユーザ数)と、その時のスループットは測定できても、階層ごとの多重度・スループットの関係は測定できないという問題がある。また、このような手法では、システムに掛かる多重度を変化させるために負荷生成器の発生する負荷量を変化させながら、何回も測定し直す必要がある。さらには、多階層システムの場合は、各階層のコンピュータの台数を動的に変更すること(スケールアウト)があり、その考えられる全ての構成について、このような事前測定を行っておくのは困難である。さらに、多階層システムにおいて各階層に掛かる負荷は、そのシステム上で動く複数種類の処理の混合割合やその実行タイミングによっても変わってくる。その全ての組み合わせを事前にテストして完全なデータを揃えておくことは、非常に困難で現実的ではない。
【0055】
また、同様の手法を最上段以外の階層に直接適用して、負荷生成器から中間階層へ直接負荷を掛けて、多重度とスループットの関係を測定しようとすると、実環境に即した負荷をどのようにして生成するかという非常に困難な問題が発生する。現在の多階層システムは挙動が非常に複雑で、各階層が上位層からある処理を受けた際に下位層へどのようなタイミングでどのような負荷を発行するかは、アプリケーションのプログラム内容だけでなく、ハードウェア構成やOS実装を含む種々の要因が複雑に絡んで決まる。そのため、負荷の生成要因を正確に理解して再現することは非常に困難であり、現実的ではない。
【0056】
よって、第5の手法は、システム運用前のテスト手法としては利用できるが、実運用中に発生した性能問題の原因分析(ボトルネック特定)には利用できない。
以上のように、第1〜第5の手法では、いずれも課題があり、多階層システムのボトルネックを適切に検出するのが難しかった。
【0057】
第1の実施の形態に示した手法では、精密なメッセージ送受時刻の記録などの情報から、各階層における処理の合計進行量と合計処理時間を算出し、その関係を動的に求め、そこからボトルネック判定を行うことを可能とする。これにより、各階層のサーバが処理性能の限界まで使用されているのかどうかを正確に把握することができ、上記課題も解消可能である。
【0058】
例えば、第1の実施の形態では、各サーバのシステムリソースの消費状況の情報ではなく、各サーバの処理の実行期間を示す情報に基づいてボトルネックを検出できる。そのため、上記第1の手法の「特定のシステムリソースを消費し尽くしていない状況で発生したボトルネックは検出できない」という課題は解消している。
【0059】
また第1の実施の形態では、分析対象期間を細分化した集計区間単位で、合計処理時間が閾値以上か否かを判断する。そのため上記第1〜第3の手法における「極短時間で変化するボトルネックが検出できない」という課題も解決されている。
【0060】
また第1の実施の形態では、合計処理時間と合計進行量という2つの測定値からボトルネックを判定している。一方で、上記第4の手法は、それら2つの測定値からも算出可能な応答時間/処理時間という単一の測定値からボトルネックの検出を行っている。第4の手法の課題「応答時間/処理時間などの外部観測ではボトルネックを見誤る場合がある」の原因の大きな要素は、単なる下位の階層のサーバからの応答待ち時間の増加をボトルネックと見誤る可能性があることである。第1の実施の形態では、合計処理時間と合計進行量という2つの測定値から二次元の関係を利用してボトルネック判定を行っているため、単なる下位の階層のサーバからの応答待ち時間の増加をボトルネックと見誤る可能性が、抑止されている。
【0061】
また第1の実施の形態では、各階層のサーバごとにボトルネックの発生の有無を検出できる。そのため、上記第5の手法の課題「階層ごとの多重度・スループットの関係は測定できない」について解消している。
【0062】
なお、図1に示した監視手段1a、計算手段1c、決定手段1d、および検出手段1eは、情報処理装置1が有するCPU(Central Processing Unit)により実現することができる。また、記憶手段1bは、情報処理装置1が有するRAM(Random Access Memory)やハードディスクドライブ(HDD:Hard Disk Drive)などにより実現することができる。
【0063】
また、図1に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。
〔第2の実施の形態〕
次に第2の実施の形態について説明する。第2の実施の形態は、ネットワーク上でのアプリケーションの外部挙動を観測するアプローチを採用する。第2の実施の形態では、スイッチングハブのポートミラーリング機能を使ってネットワークを流れるIPパケットをキャプチャし、そこからプロトコルメッセージを再現することによって情報を得る。ここで、プロトコルメッセージは、所定のプロトコルに準拠した情報である。以下、プロトコルメッセージを、単に「メッセージ」と呼ぶ。
【0064】
なお、コンピュータの単位時間当たりの処理能力は、スループットと呼ばれる。そこで、第2の実施の形態では、第1の実施の形態に示した合計進行量に相当する値を、スループットと呼ぶこととする。
【0065】
また第2の実施の形態では、第1の実施の形態における合計処理時間を、集計区間の長さで除算することで、集計区間内の処理の多重度の平均値を求め、集計区間内の多重度とする。各集計区間の長さは同じである。そのため、第1の実施の形態で示した性能分析における合計処理時間に代えて多重度を用いても、分析結果に影響はない。そこで第2の実施の形態では、集計区間の多重度を用いて、装置の性能の余力などの分析を行うものとする。
【0066】
また第2の実施の形態では、複数階層システムとしてWeb3階層システムを例として説明する。Web3階層システムとは、Webサーバ、アプリケーションサーバ(以降、Appサーバ)、データベースサーバ(以降、DBサーバ)からなる複数階層コンピュータシステムである。エンドユーザのコンピュータ上のブラウザが出力する処理要求は、WebサーバがHTTPに従ったメッセージで受ける。処理要求が静的コンテンツの取得であれば、Webサーバが、保持しているコンテンツを直接エンドユーザのコンピュータへ返信する。他方、処理要求がプログラムによって生成される動的コンテンツの取得の場合、Webサーバは、処理をAppサーバへ依頼する。処理の依頼を受けたAppサーバは、Java(登録商標)などで記述されたプログラムによってその処理要求を実行する。Appサーバは、処理の過程において使用されるデータを、それを保持するDBサーバに対して処理要求を発行して取得する。
【0067】
図4は、第2の実施の形態の業務システムの全体構成を示す図である。この業務システムは、分析サーバ100、Webサーバ200、Appサーバ300およびDBサーバ400を有する。分析サーバ100、Webサーバ200、Appサーバ300およびDBサーバ400は、スイッチ装置10を介して相互に接続されている。また、スイッチ装置10は、ネットワーク20を介して端末装置21,22,23に接続されている。
【0068】
端末装置21,22,23は、スイッチ装置10およびネットワーク20を介してWebサーバ200にアクセス可能である。端末装置21,22,23のユーザは、Webサーバ200が提供するGUI(Graphical User Interface)を端末装置21,22,23から操作して業務システムを利用できる。ネットワーク20は、例えばイントラネットである。
【0069】
なお、ネットワーク20がインターネットである場合も考えられる。その場合、スイッチ装置10はファイアウォールとして機能させることもできる。また、Webサーバ200の属するネットワークセグメントは、例えばDMZ(Demilitarized Zone)として扱われる。
【0070】
分析サーバ100は、Webサーバ200、Appサーバ300およびDBサーバ400の稼働状況を管理する。分析サーバ100は、そのための情報をスイッチ装置10から取得することができる。すなわち、スイッチ装置10は、ポートミラーリング機能を有しており、Webサーバ200、Appサーバ300およびDBサーバ400の間で送受信される通信パケットを分析サーバ100にも送信する。ポートミラーリング機能とは、スイッチ装置10上の設定したポートを流れるIPパケットをコピーして、指定した別のポートへ転送する機能である。この転送先として指定されたポートの先に、IPパケット記録や解析を行う分析サーバ100が配置される。
【0071】
分析サーバ100は、スイッチ装置10から送信される通信パケットを受信して、記憶する(パケットキャプチャ)。なお、分析サーバ100で単にパケットキャプチャを行う用途であれば、スイッチ装置10をリピータハブで代用することもできる。分析サーバ100は、この転送されてくるIPパケットを受信可能なネットワークインタフェースを有している。そして分析サーバ100は、転送されてきたIPパケット格納用の十分に大きなハードディスクを有している。さらに、分析サーバ100は、IPパケットをキャプチャするのに十分なCPU性能を保有していることが望ましい。転送されてきたIPパケットは、分析サーバ100上でキャプチャされ、その後にメッセージを抽出するための処理が実施される。
【0072】
Webサーバ200は、端末装置21,22,23で実行されるWebブラウザから業務システムに対する処理要求(メッセージ)を受け付ける。ここで、Webサーバ200と端末装置21,22,23とのメッセージ交換は、HTTPによって行われるものとする。ただし、他のプロトコルが用いられてもよい。
【0073】
以下では、端末装置21,22,23からWebサーバ200へ送信する処理要求をHTTPリクエストと呼ぶこととする。また、それに対する応答をHTTPレスポンスと呼ぶこととする。なお、リクエスト/レスポンスともに処理要求の一例である。
【0074】
Webサーバ200は、端末装置21,22,23から受信したHTTPリクエストに基づいて、静的コンテンツに関しては自装置でHTTPレスポンスを生成し、端末装置21,22,23に送信する。なお、動的コンテンツに関しては、Appサーバ300に依頼すべき処理の処理要求(メッセージ)を生成して、Appサーバ300に送信する。
【0075】
ここで、Webサーバ200とAppサーバ300とのメッセージ交換は、IIOP(Internet Inter-ORB(Object Request Broker) Protocol)によって行われるものとする。ただし、他のプロトコルが用いられてもよい。
【0076】
以下では、Webサーバ200からAppサーバ300へ送信する処理要求をIIOPリクエストと呼ぶこととする。また、それに対する応答をIIOPレスポンスと呼ぶこととする。
【0077】
Webサーバ200は、IIOPリクエストに対するIIOPレスポンスを受信すると、その内容に基づいてHTTPレスポンスを生成して、端末装置21,22,23に送信する。
【0078】
Appサーバ300は、Webサーバ200から受信したIIOPリクエストに基づいてDBサーバ400に依頼すべき処理のクエリを生成し、DBサーバ400に送信する。
ここで、Appサーバ300が生成するクエリは、例えばSQL文によって表記され、DBサーバに固有のプロトコルでDBサーバへと送信される。以下では、Appサーバ300がDBサーバ400に送信するクエリをDBリクエストと呼ぶこととする。また、それに対する応答をDBレスポンスと呼ぶこととする。
【0079】
Appサーバ300は、DBリクエストに対するDBレスポンスを受信すると、その内容に基づいてIIOPレスポンスを生成してWebサーバ200に送信する。
DBサーバ400は、Appサーバ300から受信したDBリクエストに含まれるSQL文を実行してDBの参照や更新等の処理を実行する。DBサーバ400は、その処理結果に基づいてDBレスポンスを生成し、Appサーバ300に送信する。
【0080】
なお、業務システムにおいてWebサーバ200、Appサーバ300およびDBサーバ400と各層(Web層、App層およびDB層)一台ずつの構成を例示したが、各層にそれぞれ複数台のサーバを設けてもよい。各層に複数のサーバがある場合、各層において負荷分散処理が行われる。
【0081】
階層間を跨って送受信されるメッセージを取得する手法には何通りか考えられるが、第2の実施の形態では、ネットワーク上を流れるIPパケットから情報を取得するものとする。この場合、ポートミラーリング機能を有するスイッチ装置10が用いられる。
【0082】
また、以下では各サーバという場合、Webサーバ200、Appサーバ300およびDBサーバ400を示すものとする。さらに、Webサーバ200は、Appサーバ300およびDBサーバ400よりも上位層のサーバであるとする。また、Appサーバ300は、DBサーバ400よりも上位層のサーバであるとする。このような階層関係を定義する情報は、分析サーバ100に予め格納される。
【0083】
図5は、第2の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。分析サーバ100は、CPU101、ROM(Read Only Memory)102、RAM103、HDD104、グラフィック処理装置105、入力インタフェース106、記録媒体読取装置107および通信インタフェース108を有する。
【0084】
CPU101は、分析サーバ100全体を制御する。
ROM102は、分析サーバ100上のBIOS(Basic Input / Output System)のプログラムなどを記憶する。
【0085】
RAM103は、CPU101に実行させるOS(Operating System)のプログラムやアプリケーションのプログラムの少なくとも一部を一時的に記憶する。また、RAM103は、CPU101による処理に必要な各種データを記憶する。
【0086】
HDD104は、OSのプログラム、アプリケーションのプログラムを記憶する。また、HDD104はCPU101による処理に必要な各種データを記憶する。なお、HDD104に代えて(または、HDD104と併せて)、SSD(Solid State Drive)など他の種類の記憶装置を用いてもよい。
【0087】
グラフィック処理装置105は、モニタ11と接続される。グラフィック処理装置105は、CPU101からの命令に従って画像をモニタ11の画面に表示させる。
入力インタフェース106は、キーボード12とマウス13と接続される。入力インタフェース106は、キーボード12やマウス13から送られてくる信号をCPU101に送信する。
【0088】
記録媒体読取装置107は、記録媒体14に記憶されたデータを読み取る読取装置である。例えば、分析サーバ100が有すべき機能は、その機能の処理内容を記述したプログラムをコンピュータに実行させることで実現できる。そのようなプログラムは、コンピュータ読み取り可能な記録媒体14に記録して配布することができる。また、スイッチ装置10あるいはネットワーク20に接続されたプログラム配信サーバ(図示せず)にそのプログラムを格納してもよい。この場合、分析サーバ100は、スイッチ装置10あるいはネットワーク20を介してプログラム配信サーバからプログラムをダウンロードすることができる。
【0089】
記録媒体14としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリを使用できる。磁気記録装置には、HDD、フレキシブルディスク(FD:Flexible Disk)、磁気テープなどがある。光ディスクには、CD(Compact Disc)、CD−R(Recordable)/RW(ReWritable)、DVD(Digital Versatile Disc)、DVD−R/RW/RAMなどがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。半導体メモリには、USB(Universal Serial Bus)メモリなどのフラッシュメモリがある。
【0090】
通信インタフェース108は、TP(Twisted Pair)ケーブルや光ケーブル等によってスイッチ装置10と接続される。通信インタフェース108は、スイッチ装置10を介して他の情報処理装置とデータ通信する。また、通信インタフェース108は、各サーバの間で送受信される通信パケットをスイッチ装置10から受信する。
【0091】
以上のようなハードウェア構成によって、第2の実施の形態の処理機能を実現することができる。なお、図5には分析サーバ100のハードウェア構成を示したが、Webサーバ200,Appサーバ300、DBサーバ400、および複数の端末装置21〜23も、分析サーバ100と同様のハードウェア構成で実現することができる。なお、第1の実施の形態に示した情報処理装置1も、図5に示したコンピュータと同様のハードウェアにより実現することができる。
【0092】
図6は、第2の実施の形態に係る分析サーバの機能の一例を示すブロック図である。分析サーバ100は、キャプチャ部111、キャプチャデータ記憶部112、メッセージ解析部121、メッセージデータ記憶部122、抽象化ルール記憶部131、メッセージフロー検出部132、メッセージフロー情報記憶部133、集計部141、集計区間情報記憶部142、正規化スループット値記憶部143、飽和多重度決定部144、および分析部145を有する。
【0093】
キャプチャ部111は、スイッチ装置10を介して送受信される通信パケットをスイッチ装置10のミラーポートから受信する。キャプチャ部111は、受信した通信パケットを、キャプチャデータ記憶部112に格納する。この際、キャプチャ部111は、例えば、格納する通信パケットに対して、現在の時刻を示す情報(タイムスタンプ)を付与し、時刻情報が付与された通信パケット情報をキャプチャデータ記憶部112に格納する。
【0094】
キャプチャデータ記憶部112は、キャプチャ部111がキャプチャした通信パケットを記憶する。例えば分析サーバ100のRAM103またはHDD104の記憶領域の一部が、キャプチャデータ記憶部112として使用される。
【0095】
メッセージ解析部121は、受信したパケットを解析し、Webサーバ200、Appサーバ300、DBサーバ400および端末装置21,22,23において通信されたメッセージを再構成する。そしてメッセージ解析部121は、再構成したメッセージを、メッセージデータ記憶部122に格納する。
【0096】
メッセージデータ記憶部122は、再構成されたメッセージを記憶する。例えばRAM103またはHDD104の記憶領域の一部がメッセージデータ記憶部122として使用される。
【0097】
抽象化ルール記憶部131は、リクエストメッセージの内容を抽象化するルール(抽象化ルール)を記憶する。例えば、抽象化ルール記憶部131には、同じ種類(ジョブ種)の処理(ジョブ)を依頼するリクエストメッセージを、同じ内容に抽象化するルールが記憶される。抽象化ルールに基づいて各リクエストメッセージを抽象化することで、抽象化後の内容が共通のリクエストメッセージを、同じジョブ種に関するリクエストメッセージと判断することが可能となる。抽象化ルール記憶部131としては、例えばRAM103またはHDD104の記憶領域の一部が使用される。
【0098】
メッセージフロー検出部132は、メッセージデータ記憶部122に格納されたメッセージによって実行される処理(ジョブ)の種別を、抽象化ルール記憶部131に格納された抽象化ルールに基づいて判断する。例えばメッセージフロー検出部132は、リクエストメッセージを抽象化ルールに従って抽象化し、同じ内容に抽象化されたリクエストメッセージを、同種のジョブに関するリクエストメッセージと判断する。
【0099】
またメッセージフロー検出部132は、抽象化処理後のメッセージから、Webサーバ200、Appサーバ300、およびDBサーバ400で実行されたトランザクション(一連の処理)のメッセージを検出する。例えば、メッセージフロー検出部132は、予めトランザクションモデルを有しており、トランザクションモデルに合致するメッセージの組み合わせ(メッセージフロー)を、メッセージデータ記憶部122から抽出する。
【0100】
さらにメッセージフロー検出部132は、メッセージデータ記憶部122から抽出したメッセージフローを、メッセージフロー情報としてメッセージフロー情報記憶部133に格納する。格納されるメッセージフロー情報のリクエストメッセージには、そのリクエストメッセージに応じて実行されるジョブの種類(ジョブ種)が設定される。
【0101】
メッセージフロー情報記憶部133は、メッセージフロー情報を記憶する。例えばRAM103またはHDD104の記憶領域の一部が、メッセージフロー情報記憶部133として使用される。
【0102】
集計部141は、分析対象期間を細かい粒度(短い時間間隔)で分割し、複数の集計区間を生成する。そして、集計部141は、メッセージフロー情報記憶部133に格納された情報を、集計区間ごとに集計する。例えば、集計部141は、メッセージフロー情報記憶部133に格納された情報に基づいて、階層ごとに、分析対象の期間を細かい粒度で分割して得られる集計区間それぞれのスループットと多重度とを計算する。集計部141は、計算したスループットと多重度とを、集計区間情報記憶部142に格納する。
【0103】
集計区間情報記憶部142は、集計区間それぞれにおける、階層ごとのスループットと多重度との組を記憶する。例えばRAM103またはHDD104の記憶領域の一部が、集計区間情報記憶部142として使用される。
【0104】
正規化スループット値記憶部143は、ジョブ種ごとの、1ジョブ当たりの正規化されたスループット値を記憶する。例えばRAM103またはHDD104の記憶領域の一部が、正規化スループット値記憶部143として使用される。
【0105】
飽和多重度決定部144は、飽和多重度を決定する。飽和多重度は、多重度の増加に伴ってスループットが増加する範囲と、多重度が増加しているのにスループットが増加しないか、微少な増加しかしない範囲との境界の多重度である。すなわち、それ以上多重度を上げてもスループットの十分な上昇が見込めない多重度が、飽和多重度である。
【0106】
分析部145は、多階層システムに含まれるサーバのうち、処理のボトルネックとなっているサーバを判定する。例えば分析部145は、飽和多重度よりも多重度が多い期間の割合が、所定値を超えた階層のサーバについて、ボトルネックになっていると判断する。そして、分析部145は判断結果を出力する。例えば分析部145は、ボトルネックとなっているサーバを示すメッセージをモニタ11に表示する。
【0107】
なお、図6に示した各機能間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。
また、図6のキャプチャ部111、キャプチャデータ記憶部112、メッセージ解析部121、メッセージデータ記憶部122、抽象化ルール記憶部131、およびメッセージフロー検出部132は、図1に示した監視手段1aを実現する機能の一例である。図6のメッセージフロー情報記憶部133は、図1に示した記憶手段1bの一例である。図6の集計部141は、図1に示した計算手段1cの一例である。図6の飽和多重度決定部144は、図1の決定手段1dの一例である。図6の分析部145は、図1の検出手段1eの一例である。
【0108】
次に、図6に示した各機能が行う処理について、詳細に説明する。
まず、キャプチャ部111が実行するパケットのキャプチャ処理について説明する。
図7は、キャプチャ処理の手順の一例を示すフローチャートである。なお図7では、UML(Unified Modeling Language)のアクティビティ図で用いられる同期バー31,32を用いて、並列処理を表している。同期バー31は、特にフォークと呼ばれ、1つの処理が2つ以上の並列処理に分割されることを示す。同期バー32は、特にジョインと呼ばれ、2つ以上の処理の流れを1つに統合することを示す。
【0109】
以下、図7に示す処理をステップ番号に沿って説明する。
[ステップS101]キャプチャ部111は、スイッチ装置10のミラーポートから出力されたIPパケットをキャプチャする。キャプチャ部111は、例えばキャプチャしたIPパケットを、一時的にRAM103に格納する。この際、キャプチャ部111は、受信したIPパケットに受信時刻を付与する。
【0110】
[ステップS102]キャプチャ部111は、キャプチャの開始、またはキャプチャデータの前回のファイル出力から、所定のファイル出力周期が経過したか否かを判断する。ファイル出力周期は、例えば180秒といった値が予めキャプチャ部111に設定されている。キャプチャ部111は、ファイル出力周期が経過した場合、処理をステップS103に進める。またキャプチャ部111は、ファイル出力周期が経過していなければ、処理をステップS101に進め、IPパケットのキャプチャを継続する。
【0111】
[ステップS103]キャプチャ部111は、RAM103などに一時的に保管してあるキャプチャデータを、ファイル112aに出力する。例えばキャプチャ部111は、新規のファイルを作成し、作成したファイル112aにキャプチャデータを出力する。そしてキャプチャ部111は、キャプチャデータを含むファイルをキャプチャデータ記憶部112に格納する。
【0112】
[ステップS104]キャプチャ部111は、停止コマンドが入力されたか否かを判断する。停止コマンドは、例えば管理者が、キーボード12やマウス13を操作して分析サーバ100に入力する。キャプチャ部111は、停止コマンドが入力された場合、キャプチャ処理を終了する。またキャプチャ部111は、停止コマンドが入力されていなければ、処理をステップS101に進める。
【0113】
このようにして、ファイル出力周期ごとにキャプチャしたデータを含むファイル112aが生成され、順次キャプチャデータ記憶部112に格納される。
[ステップS105]メッセージ解析部121は、キャプチャデータ記憶部112から、性能分析処理を行っていない、未処理のファイル112aがあるか否かを判断する。未処理のファイルは、キャプチャ部111により、ファイル出力周期で定期的にキャプチャデータ記憶部112に順次格納されている。従って、メッセージ解析部121は、ファイル出力周期で、未処理のファイルを検出できる。
【0114】
[ステップS106]メッセージ解析部121は、キャプチャデータ記憶部112内の未処理のファイル112aからキャプチャデータを読み込む。
[ステップS107]分析サーバ100内の各機能が連携して性能分析を行う。この処理の詳細は後述する。
【0115】
[ステップS108]メッセージ解析部121は、停止コマンドが入力されたか否かを判断する。停止コマンドは、例えば管理者が、キーボード12やマウス13を操作して分析サーバ100に入力する。メッセージ解析部121は、停止コマンドが入力された場合、分析処理を終了する。またメッセージ解析部121は、停止コマンドが入力されていなければ、処理をステップS105に進める。
【0116】
このように、キャプチャされたデータは、一定時間分(例えば180秒間)だけ貯められて、一定時間間隔で、その一定時間分のデータを使用して性能分析処理が行われる。このとき、データの収集処理(ステップS101〜S104)と性能分析処理(ステップS107)は切り離して非同期で行ってもよい。ただし、ボトルネック発生をリアルタイムに監視するためには、図7に示すようにデータの収集処理(ステップS101〜S104)と性能分析処理(ステップS107)を同期して動作させ、収集されたデータをすぐに処理するのが理想的である。
【0117】
図8は、キャプチャデータ記憶部のデータ構造の一例を示す図である。キャプチャデータ記憶部112には、複数のファイル112a,112b,112c,・・・が格納されている。
【0118】
ファイル112aには、複数のIPパケット112d−1〜112d−7が含まれている。またIPパケット112d−1〜112d−7それぞれには、受信時刻112e−1〜112e−7が付与されている。他のファイル112b,112c,・・・も、ファイル112aと同様に、受信時刻が付与されたIPパケットを含んでいる。
【0119】
次に、性能分析処理について詳細に説明する。
図9は、性能分析処理の手順を示すフローチャートである。以下、図9に示す処理をステップ番号に沿って説明する。
【0120】
[ステップS111]メッセージ解析部121は、取得したファイルに含まれるIPパケットに基づいて、メッセージを再構築する。メッセージ解析部121は、再構築したメッセージを、メッセージデータ記憶部122に時系列に格納する。
【0121】
[ステップS112]メッセージフロー検出部132は、メッセージデータ記憶部122に格納されたメッセージから、一つの業務処理リクエストに応じて多階層システム内で発行された一連のメッセージ送受関係を示すメッセージフローを検出する。
【0122】
第2の実施の形態では、メッセージは階層ごとに異なるプロトコルが使われている。端末装置21〜23からの一つのリクエストに関連して、多階層システム内の各階層で発行される異なるプロトコルのメッセージ間には、それらを関連付けるための情報が含まれていない場合が多い。そこで第2の実施の形態では、これらの異なるプロトコル間のメッセージを、既知のモデルと照合することで関連付ける。例えばメッセージフロー検出部132は、予め用意されたメッセージフローのモデルと、メッセージデータ記憶部122に格納されたメッセージとを比較し、モデルに合致するメッセージの組み合わせを作成する。そしてメッセージフロー検出部132は、作成されたメッセージの組み合わせをメッセージフローとする。
【0123】
[ステップS113]メッセージフロー検出部132は、検出したメッセージフローに含まれるリクエストメッセージに応じて、各階層のサーバで実行される処理のジョブ種を判定する。例えばメッセージフロー検出部132は、抽象化ルール記憶部131に格納されている抽象化ルールに従って、リクエストメッセージを抽象化する。そしてメッセージフロー検出部132は、抽象化後の内容が同じリクエストメッセージ同士をまとめて、1つのジョブ種とする。検出されたジョブ種には、識別名(ジョブ種名)が付与される。
【0124】
そしてメッセージフロー検出部132は、リクエストメッセージにジョブ種名が付与されたメッセージフローを、メッセージフロー情報記憶部133に格納する。
[ステップS114]飽和多重度決定部144は、未処理の階層を選択する。例えば飽和多重度決定部144には、多階層システムを構成する各階層のサーバに入力するリクエストメッセージのプロトコル名が予め設定されている。Web3階層であれば、例えばプロトコル名「HTTP」、「IIOP」、「DB」の各プロトコル名が飽和多重度決定部144に設定されている。飽和多重度決定部144は、設定されているプロトコル名に対応する階層を順に選択する。
【0125】
[ステップS115]飽和多重度決定部144と分析部145とが連携し、選択したプロトコル名に対応する階層の性能分析処理を行う。この処理の詳細は後述する(図16参照)。
【0126】
[ステップS116]飽和多重度決定部144は、全ての階層について階層別の性能分析処理を実行したか否かを判断する。例えば飽和多重度決定部144は、予め設定されているプロトコル名で示される全ての階層が選択済みであれば、未処理の階層なしと判断する。未処理の階層がある場合、飽和多重度決定部144は、処理をステップS114に進める。未処理の階層がなければ、飽和多重度決定部144は、性能分析処理を終了する。
【0127】
このように、性能分析処理では、まずメッセージが再構築され、メッセージデータ記憶部122に格納される。
図10は、メッセージデータ記憶部のデータ構造の一例を示す図である。メッセージデータ記憶部122には、復元された複数のメッセージが、時系列に格納されている。このように時系列に並べられたメッセージが、時系列データである。図10では、各メッセージの左に、メッセージデータ記憶部122内での行番号を示している。なお、メッセージデータ記憶部122には、各階層間の処理要求および応答に関連するメッセージ以外のメッセージに関しては図示を省略している。
【0128】
各行に示されるメッセージには、日付フィールド122a、時刻フィールド122b、セッション番号フィールド122c、送信元アドレスフィールド122d、送信先アドレスフィールド122e、コマンド種別フィールド122fおよびメッセージフィールド122gが含まれる。
【0129】
日付フィールド122aは、メッセージをキャプチャした日付を示すフィールドである。
時刻フィールド122bは、メッセージをキャプチャした時刻を示すフィールドである。
【0130】
セッション番号フィールド122cは、業務システムにおけるメッセージの送受信に用いるリソースを管理するためのセッション番号を示すフィールドである。
送信元アドレスフィールド122dは、メッセージの送信元のコンピュータのIPアドレスおよびポート番号を示すフィールドである。
【0131】
送信先アドレスフィールド122eは、メッセージの送信先のコンピュータのIPアドレスおよびポート番号を示すフィールドである。
コマンド種別フィールド122fは、コマンドのリクエスト/レスポンス属性やプロトコル(HTTP、IIOPおよびDBクエリ用等)の種別を示すフィールドである。
【0132】
メッセージフィールド122gは、コマンド種別フィールド122fに示されたリクエスト等のメッセージ内容を示すフィールドである。
このようなメッセージデータ記憶部122内のメッセージを参照することで、何れのサーバに対して、どのようなメッセージが送信されたかを検出することができる。
【0133】
ここで、メッセージデータ記憶部122内のメッセージ中のその他のIPアドレスと各装置との対応関係は次の通りである。
“194.23.5.226”は、Webサーバ200のIPアドレスを示す。“194.23.7.168”は、Appサーバ300のIPアドレスを示す。“194.23.8.198”は、DBサーバのIPアドレスを示す。“194.185.39.24”は、端末装置22のIPアドレスを示す。
【0134】
なお、日付フィールド122aおよび時刻フィールド122bの情報として、メッセージ解析部110が通信パケットをキャプチャしたタイミングにおけるタイムスタンプを設定するものとしたが、設定方法はこれに限らない。例えば、通信パケット中に各サーバにおけるパケットの生成時刻や送信時刻の情報が含まれている場合には、その日時を日付フィールド122aおよび時刻フィールド122bの情報としてもよい。その場合、各サーバで精度良く時刻同期が行われていることが望ましい。
【0135】
メッセージが再構築されると、メッセージフロー検出部132は、検出されたメッセージフロー内のリクエストメッセージに関し、そのリクエストメッセージによって実行されるジョブのジョブ種を識別する。ここでいうジョブ種は、同様の処理内容のリクエストをグループ化したものである。メッセージフロー検出部132は、ジョブ種を識別する場合、抽象化ルール記憶部131に設定された抽象化ルールに基づいて、リクエストメッセージを抽象化する。
【0136】
図11は、抽象化ルール記憶部のデータ構造の一例を示す図である。抽象化ルール記憶部131には、プロトコルごとの抽象化ルールが格納されている。
例えばプロトコルがHTTPのメッセージの場合は、メッセージフロー検出部132は、コマンド名と、URL内のローカルアドレス部分に、残すべきと指定されたCGI(Common Gateway Interface)パラメータを連結したもので、ジョブ種を区別する。コマンド名は、GETやPOST等である。URL内のローカルアドレス部分は、URLから“プロトコル名://ホスト名:ポート番号”の部分を削除したものである。そしてHTTP用の抽象化ルール131aには、残すべきCGIパラメータが定義されている。例えば、図11の例では、「type」、「comment_table」の各パラメータを残し、他のパラメータは削除することが示されている。
【0137】
またDBプロトコルのメッセージの場合は、メッセージフロー検出部132は、使用するDBプロトコル固有のコマンド名とSQL文とを、正規表現で記述したルールで置換する。そしてメッセージフロー検出部132は、置換によって抽象化されたメッセージによりジョブ種を区別する。DBプロトコル用の抽象化ルール131bには、正規表現を用いた置換規則が定義されている。図11の例では、Perlと同じ記法による置換規則が定義されている。例えば1行目の置換規則「s/INSERT INTO ([^ \(]+).*/INSERT INTO $1 VALUES (..)/」の先頭の「s」は、置換処理であることを示している。最初の「/」と2つめの「/」で囲われた文字列「INSERT INTO ([^ \(]+).*」が、置換元の文字列である。また2つめの「/」と3つめの「/」で囲われた文字列「INSERT INTO $1 VALUES (..)」が、置換後の文字列である。置換元の文字列の「(」と「)」とで囲われた文字列は、変数として記憶される。1行目の置換規則の「(」、「)」で囲われた文字列「[^ \(]+」は、「(」以外の文字の1回以上の繰り返しが、正規表現で示されている。「(」と「)」とで囲われた文字列は、左から順に記憶される。n番目に記憶された文字列には、「$n」(nは、1以上の整数)という変数名が与えられる。変数に記憶された文字列は、置換後の文字列内に、変数名で指定された位置に挿入される。
【0138】
このような抽象化ルールに従ってリクエストメッセージが抽象化される。そして、抽象化された後の内容が同じリクエストメッセージ同士が、同じジョブ種となる。
図12は、HTTPのプロトコルのジョブ種の例を示す図である。図12の例では、HTTPのプロトコルに関するジョブ種名に対応付けて、コマンド名と、抽象化されたジョブ内容とが示されている。例えば、ジョブ種名「W1」のジョブ種は、コマンド名「GET」であり、ジョブ内容が「/RUBBOS/SERVLET/EDU.RICE.RUBBOS.SERVLETS.STORIESOFTHEDAY」である。
【0139】
図13は、DBのプロトコルのジョブ種の例を示す図である。図13の例では、DBのプロトコルに関するジョブ種名に対応付けて、コマンド名と、抽象化されたジョブ内容とが示されている。例えば、ジョブ種名「D1」のジョブ種は、コマンド名「EXECREADREQ」であり、ジョブ内容が「SELECT .. FROM STORIES, USERS WHERE ..」である。
【0140】
メッセージの抽象化が終了すると、メッセージフロー検出部132によりメッセージ同士の関連付けが行われ、関連付けられたメッセージを時系列に並べたメッセージフローが検出される。メッセージフローは、各階層のプロトコル間のメッセージにおいて、同一のトランザクションによって発行された関連するメッセージ同士を紐付けたものである。例えば上位層のプロトコルによって、その下の階層のサーバに送られたメッセージと、その処理に伴って生成された下位層のプロトコルのメッセージとの間が紐付けされる。このようなメッセージ間の紐付けを全ての階層のプロトコル間で行うことによって、最上位層から最下位層までの間で、一連のトランザクションを構成する全てのメッセージ送受の関係が再現される。このようなメッセージフローの検出方法として、例えば特開2006−011683号公報に記載の方法を利用することができる。
【0141】
図14は、ジョブ種が識別されたメッセージフローの一例を示す図である。なお図14では、各サーバがジョブに関する処理を実行している期間を実線で示し、ジョブに関する処理を実行していない期間を破線で示している。サーバがジョブに関する処理を実行していない期間とは、例えば、下位層のサーバにリクエストメッセージを送信し、そのリクエストメッセージに対するレスポンスメッセージを待っている期間である。
【0142】
図14の例では、Webサーバ200では、HTTPリクエストメッセージ41に応じて、ジョブ種「W1」のジョブ61が実行されている。Webサーバ200は、ジョブ種「W1」のジョブ61の実行途中で、Appサーバ300に対してIIOPリクエストメッセージ42を送信している。
【0143】
Appサーバ300では、IIOPリクエストメッセージ42に応じて、ジョブ種「A1」のジョブ62が実行されている。Appサーバ300は、ジョブ種「A1」のジョブ62の実行途中で、DBサーバ400に対してDBリクエストメッセージ43を送信している。
【0144】
DBサーバ400では、DBリクエストメッセージ43に応じて、ジョブ種「D1」のジョブ63が実行されている。DBサーバ400は、ジョブ種「D1」のジョブ63の実行が終了すると、Appサーバ300に対してDBレスポンスメッセージ44を送信している。
【0145】
以後、Appサーバ300からDBサーバ400へのDBリクエストメッセージ45,47,49の送信と、DBサーバ400からAppサーバ300へのレスポンスメッセージ46,48,50とが繰り返し行われる。DBサーバ400では、DBリクエストメッセージ45,47,49に応じたジョブ64〜66が実行されている。
【0146】
Appサーバ300では、DBレスポンスメッセージ50に応じて、ジョブ種「A1」のジョブ62の実行が再開されている。Appサーバ300は、ジョブ種「A1」のジョブ61の処理が終了すると、Webサーバ200に対してIIOPレスポンスメッセージ51を送信している。Webサーバ200では、IIOPレスポンスメッセージ51に応じて、ジョブ種「W1」のジョブ61の実行が再開されている。Webサーバ200は、ジョブ種「W1」のジョブ61の処理が終了すると、HTTPリクエストメッセージ41を送信した端末装置に対してHTTPレスポンスメッセージ52を送信している。
【0147】
メッセージフロー検出部132は、ジョブ種を識別したメッセージフローに関するメッセージフロー情報を、メッセージフロー情報記憶部133に格納する。
図15は、メッセージフロー情報記憶部のデータ構造の一例を示す図である。メッセージフロー情報記憶部133には、トランザクションごとのメッセージフロー情報133a,133b,133c,・・・が格納されている。
【0148】
メッセージフロー情報133aには、項番を示す項目、時刻を示す項目、セッション番号を示す項目、プロトコルを示す項目、Request/Responseを示す項目、およびジョブ種を示す項目が設けられている。各項目の横方向に並べられた情報同士が互いに関連付けられて、1つのメッセージに関する情報を示す。
【0149】
項番を示す項目には、レコードを識別する番号が設定される。時刻を示す項目には、メッセージに対応する通信パケットをキャプチャした時刻が設定される。セッション番号を示す項目には、メッセージを送信するために用いられたセッションを識別するセッション番号が設定される。プロトコルを示す項目には、メッセージが何れのプロトコルによるものかを示す情報が設定される。Request/Responseを示す項目には、そのメッセージがリクエスト/レスポンスの何れのものであるかを示す情報が設定される。ジョブ種を示す項目には、リクエストメッセージで要求している処理のジョブ種の名称(ジョブ種名)が設定される。 メッセージフロー情報133aには、例えば、項番が“1”、時刻が“01:58:19.987”、セッション番号が“152290”、プロトコルが“HTTP”、Request/Responseが“Request”、ジョブ種“W1”という情報が設定される。
【0150】
図15の例では、時刻には、ミリ秒までの時間単位で設定している。この点、さらに短い時間単位(例えば、マイクロ秒単位)で時刻を取得してもよい。また、セッション番号には図10に示したセッション番号フィールド122cに含まれる情報のうち、リクエスト/レスポンスの組を特定するために必要な最低限の情報を設定している。以下、セッション番号という場合、メッセージフロー情報133aのセッション番号を示す項目に設定された情報を示すものとする。
【0151】
メッセージフロー情報には、各メッセージの通信時刻が設定されている。すなわち、キャプチャしたパケットに基づいて、メッセージフローを構成する各メッセージの通信時刻が測定されている。また、ある階層へ処理要求のメッセージが到着して、その処理に関連して下位層へ処理を要求するメッセージが送信された場合に、それらの間の関連付けは、メッセージフロー内の連続するメッセージに基づいて判断できる。すなわち、プロトコル「IIOP」のリクエストメッセージの後に、プロトコル「DB」のリクエストメッセージがあれば、「IIOP」のリクエストメッセージに関連して「DB」のリクエストメッセージが出力されたことが分かる。また、上位層のリクエストメッセージからレスポンスメッセージまでの時間帯内の下位層の各リクエストメッセージは、その上位層のリクエストメッセージに応じて実行された処理に関連して実行されていることが分かる。
【0152】
このように第2の実施の形態では、ネットワーク上を流れるIPパケットをキャプチャして、そこからメッセージ送受の情報を取得することで、一連の処理を示すメッセージフロー情報を生成している。この方法の利点としては、観測対象のシステムに余計な負荷を与えないので正確な挙動を観測できるということがある。また、1か所のサーバでキャプチャしてその際にタイムスタンプを付与できるのでサーバ間の時計誤差を気にしなくてよいという利点もある。
【0153】
なお第2の実施の形態では、各メッセージ上にそれらを関連付ける情報が付加されてない場合を想定している。そのため、メッセージフロー検出部130によるトランザクションモデルとの適合の有無の判定などが行われている。他方、各メッセージ上にそれらを関連付ける情報が付加されている場合もあり得る。例えば、最上位のサーバ(Webサーバ200)に入力されたリクエストメッセージに応じて実行されるトランザクションの識別情報が、そのトランザクションで通信される各メッセージに付与しているような場合である。このような場合、メッセージフロー検出部130は、同一の識別情報が付与されたメッセージを抽出して、メッセージフローを生成することができる。
【0154】
なお、第2の実施の形態では、特開2006−011683号公報に記載の方法を利用してメッセージフロー情報を作成しているが、メッセージフロー情報の作成手法は特開2006−011683号公報に記載の方法に限定されるものではない。すなわち、個々の業務処理に関する複数階層間を跨った一連のメッセージフローを測定し、その中での各メッセージの正確な送受時刻を取得する手法は何通りか考えられる。
【0155】
他の方法としては、例えば、Web3階層システムを構成する各Webサーバ200、Appサーバ300、およびDBサーバ400でファイルなどに記録したメッセージ送信/受信ログを利用する方法がある。この方法を適用する場合、Webサーバ200、Appサーバ300、およびDBサーバ400が、受信メッセージとその処理に関連した送信メッセージの関連付けを行い、ログ情報としてHDDなどの記録装置に記録する。分析サーバ100は、Webサーバ200、Appサーバ300、およびDBサーバ400から、記録した情報を取得する。この手法では、Webサーバ200、Appサーバ300、およびDBサーバ400が、受信したリクエストメッセージと、そのリクエストメッセージに応じた処理により下位の層のサーバへ出力したリクエストメッセージとを関連付けている。そのため、分析サーバ100では、1つのトランザクションを構成する上位層のメッセージと下位層のメッセージとを容易に関連付けることができ、メッセージフローの作成が容易となる。ただし、この方法を適用する場合、Webサーバ200、Appサーバ300、およびDBサーバ400各サーバの内部時計を、正確に同期させておくことが好ましい。
【0156】
メッセージデータ記憶部122に格納されたメッセージから検出可能な全てのメッセージフローがメッセージフロー情報記憶部133に格納された後、Web三階層システムの階層ごとの性能分析が行われる。
【0157】
図16は、階層別性能分析処理の手順の一例を示すフローチャートである。以下、図16に示す処理をステップ番号に沿って説明する。
[ステップS121]集計部141は、分析対象期間を、十分に細かい粒度で分割する。分析対象期間は、キャプチャデータ記憶部112内の現在処理対象となっている時系列データの生成元となったIPパケットの採取期間である。また分析対象期間を分割することで生成された複数の期間を、集計区間とする。飽和多重度決定部144は、例えば、個々の集計区間の期間を示す情報を、集計区間情報記憶部142に格納する。
【0158】
[ステップS122]集計部141は、各集計区間のスループットと多重度とを算出する。この処理の詳細は後述する(図21参照)。
[ステップS123]飽和多重度決定部144は、飽和多重度を算出する。この処理の詳細は後述する(図27参照)。
【0159】
[ステップS124]分析部145は、性能分析対象となっている階層がボトルネックとなっているか否かを判定する。この処理の詳細は後述する(図28参照)。その後、階層別性能分析処理が終了する。
【0160】
次に、図16に示す各ステップの処理を詳細に説明する。
<集計区間への分割>
分析対象期間の集計区間への分割処理について説明する。集計部141は、分析対象期間を、十分に細かい粒度の集計区間に分割する。
【0161】
なお、第2の実施の形態の手法を実施する場合、細分化した一つの集計区間の長さは十分に短くするのが適切である。なぜならば、多重度はジョブの平均処理時間に近い極短時間で大きく変化する。また、一般的に多重度とスループットの関係は図17のような関係となる。
【0162】
図17は、多重度とスループットとの関係を示す図である。図17では、細粒度で集計区間を分割した場合の、各集計区間の多重度とスループットとを表Aに示している。また各集計区間の多重度とスループットとの関係をグラフBに示している。
【0163】
図17に示すように、集計区間の長さを十分に細かくすると、集計区間それぞれの多重度は、大きく異なる。もし集計区間を長くして、例えば図17の「集計区間1」から「集計区間8」までを1つの集計区間にまとめると、まとめられた集計区間の多重度は、もとの集計区間の多重度の平均となる。集計区間ごとのばらつきが大きい多重度を平均化した結果として、多重度とスループットとの関係を不正確に捉えてしまう結果となる。このことを避けるために、この細分化された集計区間の長さは、集計区間内での多重度変化が小さくなるように、ジョブの平均処理時間に応じて、短く設定する。例えば、集計区間の長さは「100ms」とする。
【0164】
図18は、集計区間への分割例を示す図である。図18の例では、100msの集計区間長で、分析対象期間が分割されている。なお第2の実施の形態では、集計区間長は、例えば、予め集計部141に設定されている。
【0165】
図18に示すように、分析対象期間の分割に伴い、各ジョブの実行期間は、いずれかの集計区間に振り分けられる。これにより、集計区間ごとに、非常に短い時系列データが構成される。
【0166】
図19は、実行期間の集計区間への振り分け例を示す図である。Webサーバ200で実行されたジョブ61は、2回の実行期間61a,61bにおいて、処理が実行されている。1回目の実行期間61aは、「集計区間1」の時間帯に含まれているため、「集計区間1」に振り分けられる。また実行期間61bは、「集計区間2」の時間帯に含まれているため、「集計区間2」に振り分けられる。
【0167】
Appサーバ300で実行されたジョブ62は、5回の実行期間62a,62b,62c,62d,62eにおいて、処理が実行されている。1回目と2回目との実行期間62a,62bは、「集計区間1」の時間帯に含まれているため、「集計区間1」に振り分けられる。3回目〜5回目の実行期間62c,62d,62eは、「集計区間2」の時間帯に含まれているため、「集計区間2」に振り分けられる。
【0168】
DBサーバ400で実行されたジョブ63〜66は、各ジョブが1回ずつの実行期間で実行されている。ジョブ63は、「集計区間1」の時間帯に実行されているため、「集計区間1」に振り分けられる。ジョブ65,66は、「集計区間2」の時間帯に実行されているため、「集計区間2」に振り分けられる。
【0169】
ジョブ64は、「集計区間1」と「集計区間2」とに跨って実行されている。このように、実行期間が複数の集計区間を跨り、複数の集計区間に属する実行期間も存在する。この場合、複数の集計区間に属する実行期間が、各集計区間に属する期間ごとに分割される。例えばジョブ64の全体の実行期間は、「集計区間1」に属する実行期間64aと「集計区間2」に属する実行期間64bとに分割される。そして分割後の各実行期間64a,64bが、各集計区間に振り分けられる。
【0170】
なお図18、図19には、1つの業務処理に応じて行われた一連の処理について示しているが、複数の業務処理が、各階層のサーバにおいて並列で実行される場合もある。
図20は、並列で処理が実行される状況を示す図である。図20の例では、「集計区間1」と「集計区間2」との間に、3つの業務処理が並列で実行されている。ジョブ61〜66によって1つの業務処理が実行され、ジョブ71〜75によって1つの業務処理が実行され、ジョブ81〜83によって1つの業務処理が実行されている。なお、図20において、各ジョブを示す矩形内の文字は、各ジョブのジョブ種を示している。
【0171】
このように複数の業務処理が並列で実行される場合も、図19に示したように、各ジョブの実行期間が、その実行期間を包含する集計区間に振り分けられる。
次にスループットと多重度との算出処理について詳細に説明する。
【0172】
図21は、スループット・多重度算出処理の手順の一例を示すフローチャートである。以下、図21に示す処理をステップ番号に沿って説明する。
[ステップS131]集計部141は、未処理の集計区間を1つ選択する。例えば集計部141は、集計区間情報記憶部142に設定されている集計区間を、先頭のエントリから順に選択する。
【0173】
[ステップS132]集計部141は、選択した集計区間のスループットを計算する。例えば集計部141は、ジョブ種ごとの1ジョブ当たりの正規化したスループット値により、各ジョブに重み付けを行うことで、処理負荷の異なる複数のジョブを処理する場合のスループット算出の正確性を向上させる。集計部141は、計算したスループットを、例えば集計区間情報記憶部142に格納する。
【0174】
[ステップS133]集計部141は、選択した集計区間の多重度を計算する。例えば集計部141は、処理中の階層のサーバで選択した集計区間内に存在しているジョブの、集計区間内での処理時間の合計を求める。そして集計部141は、求めた合計を集計区間長で除算し、除算結果を集計区間の多重度とする。この多重度は、集計区間内の平均的な多重度を表している。集計部141は、計算した多重度を、例えば集計区間情報記憶部142に格納する。
【0175】
[ステップS134]集計部141は、未処理の集計区間があるか否かを判断する。例えば集計部141は、集計区間情報記憶部142に設定されている集計区間の最後のエントリの処理が終了した場合、未処理の集計区間はないと判断する。未処理の集計区間がある場合、集計部141は、処理をステップS131に進める。未処理の集計区間がなければ、集計部141は、スループット・多重度算出処理を終了する。
【0176】
図22は、集計区間情報記憶部のデータ構造の一例を示す図である。集計区間情報記憶部142には、階層ごとの集計区間管理テーブル142a,142b,142cが格納されている。例えば集計区間管理テーブル142aは、DBサーバ400の階層に対応する。
【0177】
集計区間管理テーブル142aには、集計区間、期間、スループット、および多重度の欄が設けられている。集計区間の欄には、集計区間の名称が設定される。期間の欄には、集計区間の期間が設定される。スループットの欄には、集計区間のスループットが設定される。多重度の欄には、集計区間の多重度が設定される。
【0178】
<スループット・多重度計算>
次に、スループットの計算と多重度の計算とについて、詳細に説明する。
<<スループット計算>>
まず、スループット計算処理について詳細に説明する。飽和多重度決定部144は、集計区間ごとに、その集計区間に属するジョブの処理時間に基づいて、スループットを計算する。この際、飽和多重度決定部144は、ジョブ種間の差異を考慮した重み付けを行って、正規化したスループットを計算する。
【0179】
ここで、スループットの正規化の有用性について説明する。第2の実施の形態では、分析対象期間を短い集計区間に細分化する。ここで、正規化を行わずに多重度とスループットの関係を求めようとすると、下記の2つの要素が両者の関係における揺らぎとなって、関連性を失わせる可能性がある。すると、多重度とスループットとの関連性を用いたボトルネック判定の信頼性が低下してしまう。
1.異種ジョブ間でのハードウェア資源消費量の差異
2.同種ジョブの個々のジョブ間でのハードウェア資源消費量の差異
特に1.は差異の絶対量が大きく、また、短い時間区間に区切ると、各区間同士の間でジョブ種の混合割合が偏るので、結果として大きな影響を及ぼすことになる。一方、2.の方は、同種ジョブということで、ある程度は平均化した分布(正規分布など)となることが期待できる。
【0180】
そこで、第2の実施の形態では、低負荷時に測定したジョブ種ごとの平均処理時間を利用して、異種ジョブ間でのハードウェア資源消費量の差異を正規化することによって、1.の問題を解決した正確なスループットを得る。ジョブ種間の差異を考慮した重みの判断指標となる情報は、予め正規化スループット値記憶部143に格納されている。
【0181】
図23は、正規化スループット値記憶部のデータ構造の一例を示す図である。正規化スループット値記憶部143には、正規化スループット値テーブル143aが格納されている。正規化スループット値テーブル143aには、ジョブ種、低負荷時の平均処理時間、および正規化されたスループット値の欄が設けられている。
【0182】
ジョブ種の欄には、Web三階層システムのいずれかのサーバで実行されるジョブのジョブ種名が設定される。
低負荷時の平均処理時間の欄には、対応するジョブ種のジョブを、サーバが低負荷時に実行した場合の平均処理時間が設定される。図23の例では、低負荷時の平均処理時間の欄に、「ms」単位の数値が設定されている。低負荷時の平均処理時間は、例えば、システムの管理者が、予めWeb三階層システムの負荷が少ない状態で計測し、正規化スループット値テーブル143aに設定する。
【0183】
正規化されたスループット値の欄には、各ジョブ種の1ジョブ当たりの正規化されたスループット値が設定される。例えば階層ごとに、代表ジョブ種が1つずつ選択される。図23の例では、Webサーバ200で実行されるジョブ種に関しては、ジョブ種名「W1」のジョブ種が、代表ジョブ種である。Appサーバ300で実行されるジョブ種に関しては、ジョブ種名「A1」のジョブ種が、代表ジョブ種である。DBサーバ400で実行されるジョブ種に関しては、ジョブ種名「D1」のジョブ種が、代表ジョブ種である。各階層の代表ジョブ種に関しては、1ジョブ当たりの正規化されたスループット値は「1.00」である。
【0184】
代表ジョブ種以外のジョブ種に関しては、同じ階層の代表ジョブ種と比較し場合に、低負荷時の平均処理時間が何倍となるかを示す数値が、そのジョブ種の1ジョブ当たりの正規化されたスループット値となる。例えばジョブ種名「W2」のジョブ種は、低負荷時の平均処理時間が、代表ジョブ種(ジョブ種名「W1」)の平均処理時間の0.604倍(13.4ms/22.2ms)である。従って、ジョブ種名「W2」のジョブ種の1ジョブ当たりの正規化されたスループット値は、「0.604」となる。
【0185】
このような1ジョブ当たりの正規化されたスループット値を用いて、集計部141は、細分化した各集計区間について、その集計区間内の平均スループットを計算する。すなわち集計部141は、低負荷時に収集したジョブ種ごとの平均処理時間を利用して、スループットの重み付けを行う。例えば集計部141は、各ジョブの処理(要求を受けてから返信を返すまで)に関し、スループットの基準スコアを「1」とする。そして集計部141は、基準スコアに、低負荷時のジョブ種別ごとの平均処理時間を元に計算された1ジョブ当たりの正規化されたスループット値による重み付けを行い、ジョブごとの1ジョブ当たりのスコアを求める。さらに集計部141は、ジョブ全体の実行期間のうち、各集計区間に属している割合に応じた比率で、1つのジョブのスコアを、そのジョブの実行期間が属する集計区間に分配する。そして集計部141は、分配したスコアを、各集計区間のスループットに加算する。
【0186】
以下、図19に示した集計区間のスループット計算例を示す。なお図19に示したように、各階層のジョブ61〜66のうち、各階層のサーバで処理を行っている期間のみが実行期間となり、他の階層へリクエストメッセージを送信してからレスポンスメッセージを待っている期間は、実行期間から除外される。
【0187】
まずWebサーバ200の階層におけるスループットの計算例を示す。図19の例では、ジョブ61の2つの実行期間61a,61bのうち、1回目の実行期間61aのみが「集計区間1」に含まれ、2回目の実行期間は「集計区間2」に含まれる。実行期間61aの長さ(処理時間)は「14ms」であり、実行期間61bの長さ(処理時間)は「11ms」である。するとジョブ61の合計の処理時間は「25ms」である。またジョブ61のジョブ種は「W1」であり、正規化スループット値テーブル143a(図23参照)では、1ジョブ当たりの正規化されたスループット値は「1.00」である。正規化されたスループット値で示されるスコア「1.00」が、「集計区間1」と「集計区間2」とに含まれる処理時間比率で分配される。すると「集計区間1」のスコアが「0.56」(=1.00×14/25)、「集計区間2」のスコアが「0.44」(=1.00×11/25)となる。得られたスコアが、Webサーバ200の階層における各集計区間のスループットに加算される。
【0188】
次にAppサーバ300の階層におけるスループットの計算例を示す。図19の例では、ジョブ62の5つの実行期間62a,62b,62c,62d,62eのうち、2つの実行期間62a,62bが「集計区間1」に含まれ、3つの実行期間62c,62d,62eが「集計区間2」に含まれる。実行期間62aの長さは「19ms」、実行期間62bの長さは「9ms」、実行期間62cの長さ(処理時間)は「10ms」、実行期間62dの長さは「12ms」、実行期間61eの長さは「21ms」である。するとジョブ62の合計の処理時間は「71ms」である。またジョブ62のジョブ種は「A1」であり、正規化スループット値テーブル143a(図23参照)では、1ジョブ当たりの正規化されたスループット値は「1.00」である。正規化されたスループット値で示されるスコア「1.00」が「集計区間1」と「集計区間2」とに含まれる処理時間比率で分配される。すると「集計区間1」のスコアが「0.394」(=1.00×(19+9)/71)、「集計区間2」のスコアが「0.606」(=1.00×(10+12+21)/71)となる。得られたスコアが、Appサーバ300の階層における各集計区間のスループットに加算される。
【0189】
次にDBサーバ400の階層におけるスループットの計算例を示す。図19の例では、ジョブ63の実行期間は、全体が「集計区間1」に含まれ、処理時間は「9ms」である。またジョブ63のジョブ種は「D1」であり、正規化スループット値テーブル143a(図23参照)では、1ジョブ当たりの正規化されたスループット値は「1.00」である。そこで、正規化されたスループット値で示されるスコア「1.00」が、DBサーバ400の階層における「集計区間1」のスループットに加算される。
【0190】
ジョブ64の実行期間は、図19の例では、前半の実行期間64aが「集計区間1」に含まれ、後半の実行期間64bは「集計区間2」に含まれる。実行期間64aの長さ(処理時間)は「10ms」であり、実行期間64bの長さは「24ms」である。するとジョブ64の合計の処理時間は「34ms」である。またジョブ64のジョブ種は「D2」であり、正規化スループット値テーブル143a(図23参照)では、1ジョブ当たりの正規化されたスループット値は「3.72」である。正規化されたスループット値で示されるスコア「3.72」が、「集計区間1」と「集計区間2」とに含まれる処理時間比率で分配される。すると「集計区間1」のスコアが「1.09」(=3.72×10/34)、「集計区間2」のスコアが「2.63」(=3.72×24/34)となる。得られたスコアが、DBサーバ400の階層における各集計区間のスループットに加算される。
【0191】
ジョブ65の実行期間は、図19の例では、全体が「集計区間2」に含まれ、処理時間は「8ms」である。またジョブ65のジョブ種は「D3」であり、正規化スループット値テーブル143a(図23参照)では、1ジョブ当たりの正規化されたスループット値は「0.796」である。そこで、正規化されたスループット値で示されるスコア「0.796」が、DBサーバ400の階層における「集計区間2」のスループットに加算される。
【0192】
ジョブ66の実行期間は、図19の例では、全体が「集計区間2」に含まれ、処理時間は「7ms」である。またジョブ66のジョブ種は「D4」であり、正規化スループット値テーブル143a(図23参照)では、1ジョブ当たりの正規化されたスループット値は「3.19」である。そこで、正規化されたスループット値で示されるスコア「3.19」が、DBサーバ400の階層における「集計区間2」のスループットに加算される。
【0193】
以上よりDBサーバ400の階層における「集計区間1」のスループットは、ジョブ63に基づくスコアと、ジョブ64の実行期間64aに基づくスコアとの合計となり、「2.09」となる。またDBサーバ400の階層における「集計区間2」のスループットは、ジョブ64の実行期間64bに基づくスコア、および2つのジョブ65,66それぞれに基づくスコアの合計となり、「6.616」となる。
【0194】
図20に示したように、複数の業務処理が並列実行されている場合は、階層ごとに、各集計区間において、各業務処理に関するジョブによるスコアの総和が求められ、得られた総和が、各階層の集計区間ごとのスループットとなる。
【0195】
このようなスループットを集計区間ごとに求めることで、スループットの時系列推移が得られる。
図24は、スループットの時系列推移の一例を示す図である。図24では、DBサーバ400の階層におけるスループットの時系列推移をグラフで表している。図24に示したグラフは、横軸が時刻、縦軸がスループットである。横軸の1目盛が各集計区間に対応する。
【0196】
<<多重度計算>>
次に多重度計算処理について詳細に説明する。第2の実施の形態における多重度は、その集計区間内で、平均すると同時に何件のジョブが同時に実行されていたかを示す値である。この多重度は、次の式で求めることができる。
多重度=集計区間内での全てのジョブの処理時間の合計÷集計区間の長さ
最下位の階層以外の階層における多重度の計算では、「ジョブの処理時間」には、その階層において処理が行われている時間だけを含め、他の階層へ処理を送ってから返信を待っている間の時間は含めない。
【0197】
図19の例を用い、多重度の計算例を示す。Webサーバ200の階層の「集計区間1」の多重度は「0.14」(=14/100)、「集計区間2」の多重度は「0.11」(=11/100)である。Appサーバ300の階層の「集計区間1」の多重度は「0.28」(=(19+9)/100)、「集計区間2」の多重度は「0.43」(=(10+12+21)/100)である。DBサーバ400の階層の「集計区間1」の多重度は「0.19」(=(9+10)/100)、「集計区間2」の多重度は「0.39」(=(24+8+7)/100)である。
【0198】
図20の場合のように、複数の業務処理が並列実行されている場合にも、この計算法は変わらない。すなわち、集計区間に存在する複数の業務処理のジョブを区別することなく、各ジョブの処理時間の総和を計算して、計算された総和を集計区間長で割ればよい。
【0199】
このような多重度を集計区間ごとに求めることで、多重度の時系列推移が得られる。
図25は、多重度の時系列推移の一例を示す図である。図25では、DBサーバ400の階層における多重度の時系列推移をグラフで表している。図25に示したグラフは、横軸が時刻、縦軸が多重度である。横軸の1目盛が各集計区間に対応する。
【0200】
<飽和多重度算出>
次に、飽和多重度算出処理について詳細に説明する。
飽和多重度決定部144は、スループットと多重度との関係から、飽和多重度を動的に求める。例えば飽和多重度決定部144は、各集計区間について計算されたスループットと多重度とから、両者の関係を求め、多重度の上昇に伴うスループットの上昇が止まる飽和多重度の値を求める。
【0201】
多重度の上昇に伴うスループットの上昇が止まる位置があることは、例えば、各集計区間の多重度とスループットとの関係を散布図で表すことで容易に理解できる。
図26は、多重度とスループットとの関係の一例を示す散布図である。図26に示した散布図は、横軸(X軸)に多重度、縦軸にスループットを採っている。そして各集計区間のスループットと多重度とに応じた点を、図中にプロットしている。
【0202】
図26に示した散布図からも分かるように、多重度がある程度の値までは、多重度の上昇に伴ってスループットは上昇するが、それ以降は多重度が上昇してもスループットは上昇しなくなる。飽和多重度決定部144は、この境界となる多重度を飽和多重度として求める。
【0203】
図27は、飽和多重度算出処理の一例を示すフローチャートである。以下、図27に示す処理をステップ番号に沿って説明する。
[ステップS141]飽和多重度決定部144は、多重度の最小値と最大値とを求める。例えば飽和多重度決定部144は、現在処理対象となっている階層の集計区間管理テーブルの多重度の欄から、設定されている値の最小値と最大値とを抽出する。
【0204】
[ステップS142]飽和多重度決定部144は、多重度の最小値と最大値との間を、等間隔に細分化する。細分化して得られた多重度の細分化区間を、多重度区間とする。ここで各多重度区間内の下限値をその多重度区間の多重度の区間開始値とし、多重度区間内の上限値をその多重度区間の多重度の終了値とする。
【0205】
例えば飽和多重度決定部144は、多重度の最小値と最大値の間を、所定数(例えば100)の多重度区間に分割する。なお所定数に分割するのではなく、一定間隔ごと(例えば多重度0.1ごと)に分割してもよい。例えば、最少多重度「0」、最大多重度「50」であれば、多重度「0」から多重度「50」の間を0.5刻みで100分割する。
【0206】
[ステップS143]飽和多重度決定部144は、多重度が少ない方から順に多重度区間を選択する。
[ステップS144]飽和多重度決定部144は、選択した多重度区間に含まれる多重度を有する集計区間の平均多重度と、それらの集計区間の平均スループットとを計算する。
【0207】
[ステップS145]飽和多重度決定部144は、直前に選択した多重度区間(隣接する多重度区間)との間の、多重度増加に伴うスループットの上昇率(傾き)を計算する。スループットの傾きは、例えば直前に選択した多重度区間との比較における平均スループットの変化量を、直前に選択した多重度区間との比較における平均多重度の変化量で除算した値である。
【0208】
i番目に選択された多重度区間の傾きδiの計算を式で表すと、例えば以下のような計算となる。
【0209】
【数1】
【0210】
[ステップS146]飽和多重度決定部144は、ステップS145で計算した傾きが、閾値より小さいか否かを判断する。傾きの閾値としては、例えば平均多重度が最も小さな多重度区間の傾きδ1に、1未満の所定の係数を掛けた値(例えば0.2δ1)とする。飽和多重度決定部144は、傾きが所定の閾値より小さければ、処理をステップS149に進める。また飽和多重度決定部144は、傾きが所定の閾値以上であれば、処理をステップS147に進める。
【0211】
[ステップS147]飽和多重度決定部144は、未処理の多重度区間があるか否かを判断する。飽和多重度決定部144は、未処理の多重度区間があれば、処理をステップS143に進める。また飽和多重度決定部144は、全ての多重度区間の処理が終了していれば、処理をステップS148に進める。
【0212】
[ステップS148]飽和多重度決定部144は、全ての多重度区間において、傾きが閾値以上だった場合、飽和多重度をステップS141で求められた多重度の最大値に設定し、飽和多重度算出処理を終了する。
【0213】
[ステップS149]飽和多重度決定部144は、現在選択している多重度区間の多重度の区間開始値を飽和多重度に決定する。
例えば多重度「0」から多重度「50」の間を0.5刻みで100分割した場合において、1<i≦9の範囲まで傾きが閾値を下回らなかったとする。この場合、10番目の多重度区間の多重度の範囲「4.5〜5.0」の区間開始値「4.5」(=0.5×9)が、飽和多重度に決定される。
【0214】
このように、分割した多重度が小さな多重度区間から順番に、傾きの値が一定の閾値(例えば0.2δ1)を下回らないかどうかが調べられ、最初に下回るiが求められる。そして多重度が小さな方からi番目の多重度区間の多重度の区間開始値が飽和多重度となる。
【0215】
<ボトルネック判定>
次に、飽和多重度に基づくボトルネック判定処理について説明する。分析部145は、飽和多重度を超えていない集計区間の割合に応じて、各階層の処理能力の余力を算出する。そして分析部145は、飽和多重度を超えていない集計区間の割合が所定の値より少ない階層を検出すると、その階層がボトルネックになっていると判断する。
【0216】
すなわち、図26に示した散布図の各ドットは、1つ1つの集計区間に相当する。これらの集計区間の中で、多重度が飽和多重度を下回っていた区間は、その階層の処理能力に余力が残っていたと考えられる。そのような集計区間が、集計区間の総数に占める割合を求め、それを処理能力の余力とする。例えば、180秒分の時系列データを同時に処理する場合は、その中には1800の集計区間が存在する(集計区間長が100msの場合)。ここで1800の集計区間の内の385の集計区間で多重度が飽和多重度を下回っていた場合、21.4%(=385/1800×100)の区間で余力を有していたという計算になる。
【0217】
例えば、第2の実施の形態では、分析部145は、飽和多重度を超えていない集計区間が第1の閾値を下回った場合に、その階層の処理能力の限界を超えた完全飽和状態であると判断する。そして、分析部145は、完全飽和状態となった階層をボトルネック原因と判定して報告する。
【0218】
また分析部145は、飽和多重度を超えていない集計区間の割合が、予め設定した第1の閾値より高い第2の閾値を下回った場合に、その階層は部分的に処理能力の限界を超えている半飽和状態であると判断する。これは、複数の階層が同時に半飽和状態に陥って、多階層システム全体としてはボトルネック状態となっている可能性があるためである。
【0219】
以下に、ボトルネック判定処理の手順について説明する。
図28は、ボトルネック判定処理の手順の一例を示すフローチャートである。以下、図28に示す処理をステップ番号に沿って説明する。
【0220】
[ステップS151]分析部145は、集計区間を1つ選択する。例えば分析部145は、処理対象となっている階層に対応する集計区間管理テーブル(図22参照)の上位から順に、集計区間を選択する。
【0221】
[ステップS152]分析部145は、選択した集計区間の多重度が、飽和多重度以下か否かを判断する。分析部145は、飽和多重度以下であれば、処理をステップS153に進める。また分析部145は、飽和多重度より大きければ、処理をステップS154に進める。
【0222】
[ステップS153]分析部145は、未飽和区間数をカウントアップする。なお未飽和区間数は、ボトルネック判定処理の開始時に「0」に初期化されている。
[ステップS154]分析部145は、未処理の集計区間があるか否かを判断する。分析部145は、未処理の集計区間があれば、処理をステップS151に進める。分析部145は、未処理の集計区間がなければ、処理をステップS155に進める。
【0223】
[ステップS155]分析部145は、集計区間の総数に対する未飽和区間の割合が第1の閾値未満か否かを判断する。第1の閾値は、予め分析部145に設定されている。例えば分析部145は、未飽和区間数を集計区間の総数で除算し、未飽和区間の割合を求める。そして分析部145は、未飽和区間の割合と第1の閾値を比較し、未飽和区間の割合が第1の閾値未満か否かを判断する。分析部145は、未飽和区間の割合が第1の閾値未満であれば、処理をステップS156に進める。また分析部145は、未飽和区間の割合が第1の閾値以上であれば、処理をステップS157に進める。
【0224】
[ステップS156]分析部145は、現在の処理対象となっている階層が、ボトルネック要因であると判定する。分析部145は、例えば判定結果をモニタ11などに出力する。その後、ボトルネック判定処理が終了する。
【0225】
[ステップS157]分析部145は、集計区間の総数に対する未飽和区間の割合が第2の閾値未満か否かを判断する。第2の閾値は、第1の閾値より大きな値であり、予め分析部145に設定されている。分析部145は、未飽和区間の割合が第2の閾値未満であれば、処理をステップS158に進める。また分析部145は、未飽和区間の割合が第2の閾値以上であれば、ボトルネック判定処理を終了する。
【0226】
[ステップS158]分析部145は、現在の処理対象となっている階層が、複合的なボトルネック要因の候補であると判定する。複合的なボトルネック要因とは、他の階層との複合的要因によって発生しているボトルネックである。分析部145は、例えば判定結果をモニタ11などに出力する。その後、ボトルネック判定処理が終了する。
【0227】
このようにして、処理能力が残存していた集計区間(未飽和の集計区間)の割合に応じて、その階層が、多階層システムのボトルネックになっているかどうかを判定することができる。
【0228】
以下、図29〜図32を参照し、各階層のサーバの余力と、未飽和区間の割合との関係について説明する。
図29は、階層が完全未飽和状態の一例を示す散布図である。階層が完全未飽和状態であるとは、負荷が非常に低くて、どの集計区間においても多重度が飽和多重度を超えていない状態である。図29に示したように多重度が低い集計区間しかない場合には飽和多重度が求まらないことがある。すなわち図27に示した処理において、全ての多重度区間において、傾きの大きさが閾値以上になることがある。このように、全ての多重度区間において、傾きの大きさが閾値以上となった場合、完全未飽和状態と判定できる。この場合、例えば分析部145は、分析対象の階層が完全未飽和状態であることを示す情報を出力する。
【0229】
図30は、階層が未飽和状態の一例を示す散布図である。階層が未飽和状態であるとは、多重度が飽和多重度以下の集計区間の割合が、第2の閾値以上の状態である。例えば第1の閾値が「0.2」(20%)、第2の閾値が「0.7」(70%)の場合、多重度が飽和多重度以下の集計区間の割合が70%以上の階層は、未飽和状態と判定される。この場合、例えば分析部145は、分析対象の階層が未飽和状態であることを示す情報を出力する。
【0230】
図31は、階層が半飽和状態の一例を示す散布図である。階層が半飽和状態であるとは、多重度が飽和多重度以下の集計区間の割合が、第1の閾値以上、第2の閾値未満の状態である。半飽和状態の階層は、部分的に処理能力の限界を超えているものと考えられる。これは、複数の階層が同時に半飽和状態に陥って、多階層システム全体としてはボトルネック状態となっている可能性があるためである。例えば第1の閾値が「0.2」(20%)、第2の閾値が「0.7」(70%)の場合、多重度が飽和多重度以下の集計区間の割合が20%以上、且つ70%未満の階層は、半飽和状態と判定される。この場合、例えば分析部145は、分析対象の階層が半飽和状態(部分的ボトルネック)であることを示す情報を出力する。
【0231】
図32は、階層が飽和状態の一例を示す散布図である。階層が飽和状態であるとは、多重度が飽和多重度以下の集計区間の割合が、第1の閾値未満の状態である。飽和状態の階層は、多階層システムにおけるボトルネックになっていると考えられる。例えば第1の閾値が「0.2」(20%)の場合、多重度が飽和多重度以下の集計区間の割合が20%未満の階層は、飽和状態と判定される。この場合、例えば分析部145は、分析対象の階層が飽和状態(ボトルネック)であることを示す情報を出力する。
【0232】
以上説明したように、第2の実施の形態では、精密なメッセージ送受時刻の記録から、各階層における処理の多重度とスループットを算出し、その関係を動的に求め、そこからボトルネック判定を行う。これにより、ボトルネックの判定を適切に行うことができる。
【0233】
すなわち、第2の実施の形態では、最初に、分析対象期間が短い時間間隔の集計区間に細分化され、それぞれの集計区間から各階層における処理多重度とスループットが計算される。こうして得られた集計区間ごとの多重度とスループットとの組から両者の関係が求められ、処理多重度が増加しているのにスループットが増加しなくなる多重度の値(飽和多重度と呼ぶ)を動的に求められる。そして、細分化された各集計区間の中で、多重度がその飽和多重度を超えていた区間の割合を求めることによって、各階層が余力を有しているかどうかが判定される。
【0234】
このような判定は、各階層で動くサーバは、そのハードウェアやOSやソフトウェア実装の制限によって、同時に実行できるジョブ数(並列度)が限られており、並列度が一定の値に達すると、それ以上はスループットが上昇しなくなるという現象に基づいている。
【0235】
また第2の実施の形態では、多重度とスループットの両者の関係でボトルネック発生を判定するので、ボトルネックの発生原因が何であるかに関係なく、ボトルネックが発生していることを検出できる。すなわち、ソフトウェアの多重度制限以外の原因でボトルネックが発生している場合あっても、特定の階層でボトルネックが発生していることを検出できる。
【0236】
多階層システム中のある階層のスループットが限界を迎える飽和多重度に影響を及ぼす原因は様々である。例えば飽和多重度は、ソフトウェア実装やジョブ種ごとの処理内容によって、使用するハードウェア資源の種類や量が異なることや、各レベル(OSやソフトウェア内部)で行われるキューイングの影響を受ける。また、ジョブ種の混合率の変化に伴って、運用中に飽和多重度が動的に変わることも考えられる。このように、飽和多重度に影響を及ぼす要因を、外部からのIPパケットのキャプチャを観測によって、事前に知ることが非常に困難である。第2の実施の形態では、多重度とスループットとの関係からボトルネックの有無を判定するため、飽和多重度に影響を及ぼすサーバの内部要因に関する情報を用いずに、ボトルネックの判定を可能としている。
【0237】
例えば、個々のシステムリソースは枯渇していないのに、システム全体としては入力仕事量を増やしても性能(出力仕事量)が伸びなくなっている状態についても、その要因となっている階層(サーバ)を特定することが可能である。このような現象は、1つの階層の中において、複数の要因が複合してボトルネックを引き起こしている場合に発生する。複合的な要因には、ハードウェア・OS・ソフトウェア・ユーザアプリケーションなど全てを含むため、全ての階層において要因となるリソースを個別に分析して、さらに関係を分析すると、関係が複雑になりすぎ、正確な判断が難しい。第2の実施の形態では、各階層の多重度とスループットとの関係から、ボトルネックの要因を内在している階層を特定できるため、ボトルネックの発生要因となっているリソースを特定する作業の負担が軽減される。
【0238】
また第2の実施の形態では、非常に短い時間の集計区間における多重度とスループットとに基づいて、各階層の余力を判定するため、極めて短時間に発生するボトルネックであっても検出可能である。例えば、図31の例であれば、サーバ単体での継続したボトルネックとはなっていないものの、飽和多重度を超えた多重度の集計区間が存在していることが分かる。このような集計区間は、瞬間的にボトルネックを生じさせている可能性がある。その結果、例えば、複数の階層間で、極短時間でボトルネック位置が推移し、システム全体としては入力仕事量を増やしても性能が伸びなくなっている状態において、その複数階層間でのボトルネック位置推移と、各階層の影響度合いを検出できる。
【0239】
〔第3の実施の形態〕
次に第3の実施の形態について説明する。第3の実施の形態は、集計区間のスループットの算出において、間接的な外部資源待ち時間を、処理時間から除外するものである。なお、第3の実施の形態を実現するシステム構成は第2の実施の形態と同様である。そこで、図4や図6に示した第2の実施の形態の各要素を用いて第3の実施の形態の機能を説明する。
【0240】
多階層システムにおいて、多重度とスループットの関連性から、システム性能の飽和度合いを測ろうとすると、この関連性を壊す要因が存在する。そのような要因の1つとして、ソフトウェアの実装によっては、階層間のメッセージ送受におけるレスポンスメッセージ待ちという直接的な待ち時間以外に、間接的に階層外部の資源を待っている時間が存在することがある。
【0241】
図33は、多重度とスループットの関連性を壊す要因の一例を示す図である。例えば図33の場合は、Appサーバ300上で動くアプリケーションがDBサーバ400と通信するためDBコネクションを内部で一定量確保(プール)しておき、そのDBコネクションを使い回すという実装がなされていた場合に起こるケースである。なお、このような実装方法は、DBコネクションプールという一般的な実装方法である。
【0242】
例えば、プールしてある上限までDBコネクションを使い切ってしまった場合、次の処理が行われる。Appサーバ300においてDBコネクションを新たに必要とするスレッドは、他のDBコネクションを使用しているスレッドが処理を終えてDBコネクションをプールへ解放するのを待つ。もし他のスレッドがDBサーバからの応答を待っていて処理が進まない場合は、これは間接的にDBサーバ400の応答を待っていることになる。特に、DBサーバ400がボトルネックとなった場合においては、DBサーバ400の応答時間が指数関数的に増加するので、Appサーバ300において空きDBコネクションを待つ時間は極端に増加する(図33の網掛け部分)。
【0243】
Appサーバ300における待ち時間は、外部資源を待っている時間なので、Appサーバ300のスループットや多重度の計算においては、本来はAppサーバ300の処理時間からは省かれるべき時間である。しかし、外部観測においては、そのようなアプリケーション内部での、間接的な外部資源の待ち時間を測定する手段がない。
【0244】
同様のことは、Webサーバ200やAppサーバ300の空きスレッド待ちでも発生する。一般的に、Webサーバ200やAppサーバ300では、同時に使用できるスレッド数の上限を定めていて、使用されているスレッド数が上限に達すると、それ以降に到着したリクエストは空きスレッドができるのを待つことになる。下位の階層からレスポンスが遅延によりスレッドが空くのが遅れると、空きスレッドの待ち時間には、間接的にはさらに下位の階層のレスポンスを待っている時間が含まれることになる。特に下位の階層でボトルネックが発生しているときには、空きスレッドの待ち時間が非常に大きな待ち時間となる。
【0245】
このような間接的な外部資源待ち時間を含めてスループットと多重度とを計算すると、多重度を非常に大きな値にしてしまい、多重度とスループットの関連性を壊してしまう。そこで、第3の実施の形態では、間接的な外部資源待ち時間による悪影響を取り除くため、間接的な外部資源待ち時間が発生すると予め分かっている実行期間については、常にその実行期間を削除して、多重度とスループットを計算する。間接的な外部資源待ち時間が発生すると予め分かっている実行期間は、例えば、最下位の階層以外の階層における同一ジョブ内の最初の実行期間である。図33の例では、網掛けで示されたAppサーバ300における最初の実行期間全体を、多重度とスループットとの計算に使用する情報から削除する。もちろん、この方法では、その区間に含まれている、取り除く必要のない、その階層での処理時間も同時に取り除かれてしまい、その長さの分だけ誤差が発生する。それでも多重度とスループットの両方が低下するだけなので、本性能分析手法全体としては、影響は無視できる。
【0246】
第3の実施の形態は、第2の実施の形態のスループット計算処理(図21のステップS132)と、多重度計算処理(図21のステップS133)との処理を変更することで実現できる。変更内容は以下の通りである。
【0247】
<スループット計算>
集計部141は、スループットを算出する際に、各ジョブの最初の実行期間の長さを処理時間から除算する。例えば、図19に示した例であれば、Webサーバ200の「集計区間1」のスループットの計算において、ジョブ61の実行期間61aは、ジョブ61の実行期間から除外される。同様に、Appサーバ300の「集計区間1」のスループットの計算において、ジョブ62の実行期間62aは、ジョブ62の実行期間から除外される。
【0248】
なお、1つのジョブの実行が複数の集計区間に跨る場合は、それぞれの集計区間の中における処理時間の比率に応じて、先のスコアを各集計区間へ配分するが、この際にも、ジョブの先頭の実行期間は除外してスループットの配分が計算される。
【0249】
<多重度計算>
集計部141は、多重度を算出する際に、各ジョブの最初の実行期間の長さを、多重度算出時の処理時間から除外する。
【0250】
このように第3の実施の形態では、間接的な外部資源待ち時間を含む実行期間を、スループットと多重度との計算に用いないようにしたことで、間接的な外部資源待ちの影響を除去することができる。
【0251】
これによって、間接的な外部資源待ちの時間が、その階層上での処理時間として誤って算入されることを防ぐことができ、その影響で多重度とスループットの関係が不正確になることを防止することができる。特に、システム全体の処理性能が飽和しかかった状態では、このような間接的な外部資源待ち(ボトルネック階層の処理待ち)時間が急激に大きくなり、本来の処理時間よりも遥かに大きくなることは珍しくない。この間接的な外部資源待ち時間は、スループットは小さくする方向に働くのに対し、多重度に関してはその値を急激に高めるように働く。そのため、間接的な外部資源待ちの時間の影響が残存していると、スループットと多重度との関係が不正確となる。
【0252】
図34は、間接的な外部資源待ち時間を除外しない場合の各集計区間のスループットと多重度との一例を示す散布図である。なお図34の例は、間接的な外部資源待ち時間が発生したAppサーバ300の階層のスループットと多重度とを計算したものである。図34の例では、高い多重度の集計区間が多数存在することが分かる。
【0253】
図34のスループットと多重度との計算の元となった時系列データを用い、間接的な外部資源待ち時間を除外してスループットと多重度とを再計算すると、図35のようになる。
【0254】
図35は、間接的な外部資源待ち時間を除外した場合の各集計区間のスループットと多重度との一例を示す散布図である。図35の例では、図34と比較して、多重度が非常に低くなっていることが分かる。このように、間接的な外部資源待ち時間を除外することで、各集計区間の多重度は少なくなる。
【0255】
第3の実施の形態のように、間接的な外部資源待ちの時間の影響を抑止すれば、間接的な外部資源待ち時間が存在する状況においても、その待ち時間によりスループットや多重度の正確性が低下することを抑止できる。すなわち、性能分析の正確性を向上させることができる。
【0256】
〔第4の実施の形態〕
次に第4の実施の形態について説明する。第4の実施の形態は、ジョブの処理数に変えて、出力メッセージ数を用いてスループットを計算するものである。なお、第4の実施の形態を実現するシステム構成は第2の実施の形態と同様である。そこで、図6に示した第2の実施の形態の各要素を用いて第4の実施の形態の機能を説明する。
【0257】
Appサーバ300などのサーバでは、Java(登録商標) VM(virtual machine)がFullガーベージコレクション(以下「Full−GC」と呼ぶ)を起こすことがある。ガーベージコレクションは、プログラムが動的に確保したヒープ(動的に確保可能なメモリ領域)上のメモリ領域のうち、不要になった領域を自動的に解放する処理である。Full−GCの場合、Full−GC以外の全ての処理が、瞬間的に停止する。ジョブの実行が開始されてから終了するまでの間に、Full−GCによりジョブが停止する期間が含まれていると、ジョブの挙動を正確に検出することができないことがある。なぜならば、Appサーバ300上でFull−GCのためにジョブが瞬間停止させられると、その時間はAppサーバ300外からの外部観測では、あたかもそのAppサーバ300上での処理が継続しているかのように観測されてしまう。その結果、第2の実施の形態の方法では、実際にはジョブの停止期間であるにも拘わらず、その停止期間を実行期間と判断して、スループットや多重度が計算される。
【0258】
図36は、Full−GCによる停止期間が発生した場合の一連の業務処理を示す図である。図36の例では、Webサーバ200のジョブ91からのリクエストメッセージに応じてAppサーバ300でジョブ92が実行されている。Appサーバ300のジョブ92は、DBサーバ400に対してリクエストメッセージを4回送信している。DBサーバ400では、Appサーバ300からのリクエストメッセージに応じて、4つのジョブ93〜96が実行されている。Webサーバ200が実行したジョブ91には、2つの実行期間91a,91bが含まれる。Appサーバ300が実行したジョブ92には、5つの実行期間92a,92b,92c,92d,92eが含まれる。
【0259】
ここで、Appサーバ300では、実行期間92cにおいて、Full−GCが発生したものとする。Full−GCが行われると、ジョブ92の処理は停止するため、実行期間92cは、実際にAppサーバ300がジョブ92の処理に費やした時間よりも長い処理時間となる。
【0260】
図36に示した様な挙動は、多階層システム全体として考えると、Full−GCが発生した一瞬だけ、Appサーバ300の階層がボトルネックになっていると見做すことができる。第4の実施の形態では、そのような瞬間的なボトルネック発生を検出可能とする。そのために第4の実施の形態では、スループットを、その階層が出力するメッセージ数によって換算する。この出力メッセージには、下位の階層に送るリクエストも上位の階層へ返すレスポンスも含まれる。この出力メッセージ数を、ジョブ種間の差異を考慮して、各ジョブ種の低負荷時の処理時間に比例し、各ジョブ種のジョブ1つ当たりの平均出力メッセージ数に反比例するように正規化する。
【0261】
スループットの計算方法を置き換えたことで、1ジョブ当たりの正規化スループット値も、第2の実施の形態と異なる値となる。
図37は、第4の実施の形態における正規化スループット値記憶部のデータ構造の一例を示す図である。正規化スループット値記憶部143には、正規化スループット値テーブル143bが格納されている。正規化スループット値テーブル143bには、ジョブ種、低負荷時の平均処理時間、平均出力メッセージ数、および正規化されたスループット値の欄が設けられている。
【0262】
ジョブ種の欄には、Web三階層システムのいずれかのサーバで実行されるジョブのジョブ種名が設定される。
低負荷時の平均処理時間の欄には、対応するジョブ種のジョブを、サーバが低負荷時に実行した場合の平均処理時間が設定される。図37の例では、低負荷時の平均処理時間の欄に、「ms」単位の数値が設定されている。低負荷時の平均処理時間は、例えば、システムの管理者が、予めWeb三階層システムの負荷が少ない状態で計測し、正規化スループット値テーブル143bに設定する。
【0263】
平均出力メッセージ数の欄には、対応するジョブ種のジョブが出力するメッセージ数の平均値である。このメッセージ数には、リクエストメッセージとレスポンスメッセージとの両方がカウントされる。
【0264】
正規化されたスループット値の欄には、各ジョブ種の1メッセージ当たりの処理時間を正規化したスループット値が設定される。例えば階層ごとに、代表ジョブ種が1つずつ選択される。図37の例では、Webサーバ200で実行されるジョブ種に関しては、ジョブ種名「W1」のジョブ種が、代表ジョブ種である。Appサーバ300で実行されるジョブ種に関しては、ジョブ種名「A1」のジョブ種が、代表ジョブ種である。DBサーバ400で実行されるジョブ種に関しては、ジョブ種名「D1」のジョブ種が、代表ジョブ種である。各階層の代表ジョブ種に関しては、1メッセージ当たりの正規化されたスループット値は、「1.00」を平均出力メッセージ数で除算した値である。例えばWebサーバ200の代表ジョブ種であるジョブ種「W1」は、平均出力メッセージ数が「2」であるため、正規化されたスループット値は、「0.5」(=1/2)となる。
【0265】
代表ジョブ種以外のジョブ種に関しては、低負荷時における代表ジョブ種との平均処理時間の比率を、さらに各ジョブ種の平均出力メッセージ数で割った値が、各ジョブ種のジョブが発行するメッセージ1回あたりの正規化されたスループット値となる。例えばWebサーバ200の階層のジョブ種「W2」は、低負荷時の平均処理時間が、代表ジョブ種(ジョブ種名「W1」)の平均処理時間の0.604倍(13.4ms/22.2ms)である。この比率「0.604」を、ジョブ種「W2」の平均出力メッセージ数「2.00」で除算した値「0.302」が、ジョブ種名「W2」のジョブ種の1メッセージ当たりの正規化されたスループット値となる。
【0266】
第4の実施の形態では、第2の実施の形態のスループット計算処理(図21のステップS132)に代えて、図37に示したジョブ種ごとの1メッセージ当たりの正規化されたスループット値を用いて、集計区間ごとのスループットが計算される。
【0267】
図36に示した業務処理に基づいてスループットを計算すると以下のようになる。
Webサーバ200の階層の場合は、「集計区間1」のスループットはジョブ種「W1」のジョブ91が発行したメッセージ1回分の値「0.500」である。「集計区間2」のスループットは「0」である。「集計区間3」のスループットは、ジョブ種「W1」のジョブ91が発行したメッセージ1回分の値「0.500」である。
【0268】
Appサーバ300の階層の場合は、「集計区間1」のスループットは、ジョブ種「A1」が発行したメッセージ2回分の値「0.412」(=0.206×2)である。「集計区間2」のスループットは、発行したメッセージが一つもないので「0」となる。「集計区間3」のスループットは、ジョブ種「A1」のジョブ92が発行したメッセージ3回分の値「0.618」(=0.206×3)である。この3回の内の2回は下位のDBサーバ400に対して送信したリクエストメッセージで、残りの1回は上位のWebサーバ200に返信したレスポンスメッセージである。
【0269】
DBサーバ400の階層の「集計区間1」のスループットは、ジョブ種「D1」のジョブ93が発行したメッセージ1回分の値「1.00」である。「集計区間2」のスループットは、ジョブ種「D2」のジョブ94が発行したメッセージ1回分の値「3.72」である。「集計区間3」のスループットは、ジョブ種「D3」の2つのジョブ95,96が発行したメッセージ2回分の値「1.59」(=0.796×2)である。
【0270】
なお、複数の業務処理が並列実行されている場合は、第2の実施の形態と同様に、階層ごとに、上記のようにして計算されたスループットの集計区間ごとの総和が計算される。そして、計算された総和が、各集計区間のスループットになる。
【0271】
このようにスループットを計算することによって、「集計区間2」におけるジョブ92の実行期間92cのように、実質的な処理とは無関係に時間が長くなっている区間にスループット値が割り当てられることを抑止できる。すなわち、瞬間的な挙動停止があると、停止期間はメッセージ出力が行われないため、スループット値の換算も「0」となる。これは、ジョブの処理がサーバで実際に実行されている時間のみを、正しくスループットとして換算できることを意味する。
【0272】
その結果として、Full−GCの発生などにより瞬間的にボトルネックとなっている集計区間を、正確に判別できるようになる。以下、図38と図39とを参照し、1ジョブ当たりの正規化スループット値に基づいてスループットを計算した場合と、1メッセージ当たりの正規化スループット値に基づいてスループットを計算した場合との違いを説明する。
【0273】
図38は、1ジョブ当たりの正規化スループット値に基づいてスループットを計算した場合の散布図である。図38の例は、Appサーバ300においてFull−GCが発生した期間を分析対象期間として、第2の実施の形態の手法でスループットを計算したものである。図38のような多重度とスループットとの関係では、Full−GCによる瞬間的なボトルネックの発生が認識できない。
【0274】
図39は、1メッセージ当たりの正規化スループット値に基づいてスループットを計算した場合の散布図である。図39の例は、図38のスループット計算時と同じ時系列データを用いて、第4の実施の形態の手法でスループットを計算したものである。
【0275】
このように第4の実施の形態でスループットを計算すると、瞬間的な挙動停止が直接的にスループットに反映される。そのためFull−GCが発生してスループットが完全に0になっていたり大きく落ち込んでいたりする集計区間が多数あることがグラフ上で明確に表されている。図39では、楕円99内の集計区間が、Full−GCなどによって引き起こされた異常な瞬間スループット低下が発生した集計区間である。
【0276】
このような瞬間スループット低下が発生した集計区間は、例えば分析部145が、多重度が飽和多重度を超えていながら、スループットが所定値以下の集計区間を集計区間情報記憶部142から検索することで、検出することができる。また分析部145が、図39に示したような散布図をモニタ11に表示し、管理者に瞬間スループット低下の発生を認識させることもできる。
【0277】
なお図39に示した例では全体的にスループットのバラつきが大きくなっているが、これは、Full−GC以外にもマイナーなガーベージコレクションが頻繁に発生しており、それがスループットを瞬間的に細かく上下させているためであると考える。
【0278】
また、例えば、ジョブ種が一種類の場合などには、スループットの正規化を行わなくてもよい。その場合、例えば、集計区間内に出力したメッセージ数を、スループットとする。また、ジョブ全体で出力されるメッセージ数のうち、集計区間内に出力したメッセージ数を、スループットとすることもできる。
【0279】
〔第5の実施の形態〕
次に第5の実施の形態について説明する。第5の実施の形態は、データのばらつきの影響を抑止した手法で、飽和多重度を求めるものである。なお、第5の実施の形態を実現するシステム構成は第2の実施の形態と同様である。そこで、図6に示した第2の実施の形態の各要素を用いて第5の実施の形態の機能を説明する。
【0280】
図27に示した第2の実施の形態の飽和多重度算出手法では、データに細かなバラつきがある場合にそれに影響されて、傾きが早い時点で一時的に閾値を下回り、飽和多重度を小さな値に誤判定してしまう可能性がある。そこで第5の実施の形態では、飽和多重度をより正確に求めることができる手法で、飽和多重度を算出する。
【0281】
第5の実施の形態で採用した手法は、統計的な信頼区間を用いる。信頼区間とは、ある数がどのような数値の範囲にあるかを確率的に示すものである。多階層システムの性能分析においては、ある階層のサーバにおける多重度の値が低い時は、多重度とスループットは正比例に近い関係で、両者の傾きの値の分散は小さい。他方、その階層のサーバの処理能力が限界(ボトルネック)に近づいた時点で、両者の関係が急激に崩れ、分散が大きくなる。このように分散が大きくなると、傾きの値の統計的信頼区間が広がるという特徴がある。第5の実施の形態は、信頼区間のこのような特徴を利用することによって、データの細かなバラつきに影響されずに、飽和多重度を求めることを可能とする。
【0282】
図40は、第5の実施の形態における飽和多重度算出処理の一例を示すフローチャートである。以下、図40に示す処理をステップ番号に沿って説明する。なお図40におけるステップS201〜ステップS205の処理は、それぞれ図27に示した第2の実施の形態におけるステップS141〜ステップS145の処理と同じである。そこで、ステップS206以降の処理について説明する。なお、ステップS202の処理では、多重度の最小値「0」と最大値「50」との間が、0.5刻みで100分割されているものとする。
【0283】
[ステップS206]飽和多重度決定部144は、傾きの分布の統計的な信頼区間を計算する。例えば飽和多重度決定部144は、隣接する多重度区間の間で、両者の平均多重度と平均スループットの変化量から、変化量の傾きδiを、図27のステップS145と同様の式(1)で求める。
【0284】
さらに飽和多重度決定部144は、分割した多重度区間の小さな方から順にnk(nkは、1<nk≦100の範囲の整数)個の区間について、先に求めた傾きを使って、その統計上の信頼区間を以下の式で計算する。
【0285】
【数2】
【0286】
ここで、1.96は95%信頼区間の定数である。
[ステップS207]飽和多重度決定部144は、信頼区間の下限が所定の閾値より低いか否かを判断する。信頼区間の下限に関する閾値としては、例えば平均多重度が最も小さな多重度区間の傾きδ1に、1未満の所定の係数を掛けた値(例えば0.2δ1)とする。飽和多重度決定部144は、信頼区間の下限が閾値より低ければ、処理をステップS210に進める。また飽和多重度決定部144は、信頼区間の下限が閾値以上であれば、処理をステップS208に進める。
【0287】
[ステップS208]飽和多重度決定部144は、未処理の多重度区間があるか否かを判断する。飽和多重度決定部144は、未処理の多重度区間があれば、処理をステップS203に進める。また飽和多重度決定部144は、未処理の多重度区間がなければ、処理をステップS209に進める。
【0288】
[ステップS209]飽和多重度決定部144は、全ての多重度区間において、信頼区間の下限が閾値以上だった場合、飽和多重度をステップS201で求められた多重度の最大値に設定し、飽和多重度算出処理を終了する。
【0289】
[ステップS210]飽和多重度決定部144は、現在選択している多重度区間の多重度の区間開始値を飽和多重度に決定する。
このような処理により、式(2)で求めた信頼区間の下限が、予め定めておいた閾値を最初に下回るnkが求められ、そのときの多重度区間の区間開始値が飽和多重度となる。例えば、多重度「0」から多重度「50」の間を0.5刻みで100分割した場合において、1<nk≦9の範囲まで信頼区間の下限が閾値を下回らず、nk=10のときに初めて信頼区間の下限が閾値より低くなったものとする。この場合、10番目の多重度区間の多重度の範囲「4.5〜5.0」の区間開始値「4.5」(=0.5×9)が、飽和多重度に決定される。
【0290】
このように、第5の実施の形態では、分割した多重度区間の小さな方から順に、先に求めた傾きを加えていきながら、その統計上の信頼区間が計算され、その信頼区間の下限が、予め定めておいた閾値を下回った時点で、そのときの多重度が飽和多重度とされる。これにより、傾きの局所的なバラつきに影響されずに、多重度とスループットの関係が変化する飽和多重度を機械的に求めることが可能となる。
【0291】
例えば、第2の実施の形態における飽和多重度算出処理(図27参照)では、傾きをそのまま多重度が小さい方から比較していき、傾きが変化する多重度を求めている。この場合、同種ジョブ間でも個々のジョブ間でのハードウェア資源消費量のバラつきが存在するので、求めた傾きが上下に振れてしまって、傾きが変化する多重度の位置を誤検出してしまう可能性がある。他方、図40に示した第5の実施の形態の飽和多重度算出処理では、傾きの値の統計上の信頼区間を算出していき、その下限が閾値を超えるかどうかという判定基準によって飽和多重度を決定する。その結果、局所的な傾きのバラつきに影響されることなく、多重度とスループットの関係が変化する飽和多重度を求めることができる。
【0292】
〔第6の実施の形態〕
次に第6の実施の形態について説明する。第6の実施の形態は、各階層の残存処理能力を算出するものである。残存処理能力を算出することで、例えば各階層の最大処理能力の見積もり(キャパシティプランニング)が可能となる。なお、第6の実施の形態を実現するシステム構成は第2の実施の形態と同様である。そこで、図6に示した第2の実施の形態の各要素を用いて第6の実施の形態の機能を説明する。
【0293】
例えば図28に示した第2の実施の形態のボトルネック判定処理では、多重度が飽和多重度以下の集計区間(未飽和区間)の割合が算出されている。未飽和区間は、処理能力の余力が残っている集計区間である。第6の実施の形態では、さらにその階層の処理能力の余力(限界処理能力に対する残存処理能力の割合)を求める。
【0294】
第6の実施の形態における集計区間情報記憶部142は、各集計区間が未飽和区間に該当するか否かのフラグを記憶することができる。
図41は、第6の実施の形態の集計区間情報記憶部のデータ構造の一例を示す図である。集計区間情報記憶部142には、階層ごとの集計区間管理テーブル142d,142e,142fが格納されている。例えば集計区間管理テーブル142dは、DBサーバ400の階層に対応する。
【0295】
集計区間管理テーブル142dには、集計区間、期間、スループット、多重度、および未飽和区間フラグの欄が設けられている。集計区間の欄には、集計区間の名称が設定される。期間の欄には、集計区間の期間が設定される。スループットの欄には、集計区間のスループットが設定される。多重度の欄には、集計区間の多重度が設定される。未飽和区間フラグの欄には、集計区間が未飽和区間に該当するか否かを示すフラグ(未飽和区間フラグ)が設定される。例えば、集計区間が未飽和区間であれば、未飽和区間フラグの値に「1」が設定される。また集計区間が未飽和区間でなければ、未飽和区間フラグの値に「0」が設定される。なお未飽和区間フラグの初期値は、未飽和区間ではないことを示す値「0」であるものとする。
【0296】
このような集計区間管理テーブル142d,142e,142fを用いて、分析部145は、各階層のサーバの余力を算出する。分析部145は、例えば図16に示した第2の実施の形態のボトルネック判定処理(ステップS124)に代えて、余力計算処理を実行する。なお、分析部145は、図16に示した第2の実施の形態のボトルネック判定処理(ステップS124)と余力計算処理との両方を実行することもできる。
【0297】
図42は、余力計算処理の手順の一例を示すフローチャートである。以下、図42に示す処理をステップ番号に沿って説明する。
[ステップS301]分析部145は、処理対象となっている階層の集計区間を1つ選択する。例えば分析部145は、集計区間情報記憶部142に格納されている集計区間管理テーブル142d,142e,142fのうち、現在処理対象となっている階層に対応する集計区間管理テーブルの上位の集計区間から順に選択する。
【0298】
[ステップS302]分析部145は、選択した集計区間の多重度が飽和多重度以下か否かを判断する。例えば分析部145は、集計区間管理テーブル内の選択した集計区間のエントリにおける多重度と、飽和多重度決定部144で決定された多重度とを比較して、選択した集計区間の多重度が飽和多重度以下か否かを判断する。分析部145は、選択した集計区間の多重度が飽和多重度以下であれば、処理をステップS303に進める。また分析部145は、選択した集計区間の多重度が飽和多重度より大きければ、処理をステップS304に進める。
【0299】
[ステップS303]分析部145は、選択した集計区間の未飽和フラグを、未飽和区間に設定する。例えば分析部145は、処理対象の階層の集計区間管理テーブル内の選択した集計区間のエントリにおける未飽和フラグに「1」を設定する。
【0300】
[ステップS304]分析部145は、未処理の集計区間があるか否かを判断する。分析部145は、未処理の集計区間があれば処理をステップS301に進める。また分析部145は、未処理の集計区間がなければ処理をステップS305に進める。
【0301】
[ステップS305]分析部145は、最大スループットを決定する。最大スループットは、例えば、飽和多重度から開始される多重度区間内に含まれる集計区間のスループットの最大値である。
【0302】
[ステップS306]分析部145は、以下の式(3)により余力を算出する。
【0303】
【数3】
【0304】
式(3)において、n(0以上の整数)は、多重度が飽和多重度を下回っている集計区間(未飽和区間)の数である。tpmaxは、飽和多重度のときに記録した最大スループットである。tpkは、未飽和区間と判定された集計区間を並べたときのk番目(kは1以上n以下の整数)の集計区間におけるスループットである。TWnumallは、分析対象期間に含まれる集計区間の総数である。
【0305】
式(3)は、未飽和区間のスループットと最大スループットとの差分が、最大スループットに占める割合の平均値に、全ての集計区間に対する未飽和区間の区間数の割合を掛け合わせたものである。この計算の結果、処理対象となっている階層の残存処理能力が算出される。
【0306】
図43は、余力計算処理を説明する図である。図43には、説明をわかりやすくするため、集計区間の総数が11の場合の例を示している。図43の例では、飽和多重度以下の多重度を持つ集計区間(未飽和区間)の数は5であり、最大スループットは2800である。よって、上記の式(3)は次のようになる。
双方向矢印で示された差分の総和/(2800×5)×5/11
ここで重要なのは、余力の計算において、飽和多重度よりも多重度が高い集計区間は、スループットが最大スループットより少なくても、残存処理能力に加えないことである。換言すると、飽和多重度を境界として、その前後で領域を分けて、飽和多重度以下の場合のみ、最大スループットとの差分を残存処理能力として計算している。例えば図43の多重度10以上の各集計区間のスループットは、最大スループットより少ない。しかしこの集計区間は、高多重度による過負荷のためにスループットが低下しているものと考えられる。過負荷によるスループットの低下が生じている集計区間には残存処理能力はないため、残存処理能力としては加えられていない。
【0307】
なお、全ての集計区間について、最大スループットと各集計区間のスループットの差分を求めて、その平均値を計算する方法を取ると、飽和多重度を過ぎて過負荷のオーバヘッドによるスループット低下が起きている場合まで、残存処理能力に加算されてしまう。第6の実施の形態では、このような過負荷のオーバヘッドによりスループットが低下している集計区間の残存処理能力を「0」にすることで、余力計算の正確性を向上させている。
【0308】
しかも、第6の実施の形態によって、処理性能が完全には飽和していない半飽和状態の階層においても、あとどれだけの処理能力を残しているかが見積もれるようになる。これによって、システム全体の処理能力が完全飽和する前に対策を打つことが可能になる。また、飽和状態の階層をスケールアウト(マシン台数の増加)して性能強化した時に、2番目に弱い階層が、あとどれだけ負荷量を増加した時に次にボトルネックとなるかを見積もることも可能となる。
【0309】
〔第7の実施の形態〕
次に第7の実施の形態について説明する。第7の実施の形態は、集計区間の長さの最適値を自動的に求めるものである。なお、第7の実施の形態を実現するシステム構成は第2の実施の形態と同様である。そこで、図6に示した第2の実施の形態の各要素を用いて第7の実施の形態の機能を説明する。
【0310】
第2の実施の形態では「異種ジョブ間でのハードウェア資源消費量の差異」は正規化しているが、「同種ジョブでも、各ジョブ間でのハードウェア資源消費量の差異」によって発生する揺らぎは、平均化されることを期待している。平均化のためには、集計区間に含まれるジョブの数は多い方が良いので、集計区間は長い方が有利になる。その一方で、集計区間が長くなると、その中での多重度推移が大きくなり、多重度とスループットの関係を正確に測れなくなる。そこで第7の実施の形態では、同一種ジョブ間でのハードウェア資源消費量の差異が許容できる範囲に収まるように、以下の方法で適切な長さの集計区間を決定する。
【0311】
第7の実施の形態では、多重度が低い区間では、多重度とスループットが正比例に近い関係を示すことを利用する。ただし、集計区間を短く設定しすぎた場合は、同種ジョブ内でのハードウェア資源消費量の差異によって発生する揺らぎが平均化されず、多重度とスループットの関係を乱すことになる。そのことを利用して、以下の手順で、個々のジョブ間の差異が平均化されるのに十分な集計区間の長さを求める。なお集計区間長の決定処理は、例えば図16に示した第2の実施の形態における階層別性能分析処理における、ステップS121の前に行われる。
【0312】
図44は、集計区間長決定処理の手順を示すフローチャートである。以下、図44に示す処理をステップ番号に沿って説明する。
[ステップS401]集計部141は、集計区間長の初期値を設定する。設定する初期値は、想定される集計区間長よりも非常に小さな値とする。例えば仮集計区間長として10msを設定する。
【0313】
[ステップS402]集計部141は、分析対象期間を仮集計区間長で分割する。これにより、複数の集計区間が生成される。
[ステップS403]集計部141は、ステップS404〜ステップS407の処理が未処理の集計区間のうちの1つを選択する。
【0314】
[ステップS404]集計部141は、選択した集計区間の多重度を計算する。
[ステップS405]集計部141は、選択した集計区間の多重度が閾値より低いか否かを判断する。閾値としては、例えば0.5や1.0といった値が予め集計部141に設定されている。集計部141は、多重度が閾値より低ければ、処理をステップS406に進める。また集計部141は、多重度が閾値以上であれば、処理をステップS403に進める。
【0315】
[ステップS406]集計部141は、選択した集計区間のスループットを計算する。
[ステップS407]集計部141は、多重度が閾値より低いとi番目(iは、1以上の整数)に判断された集計区間について、「スループット÷多重度」の逆正接となる角度θiを、以下の式で求める。
θi=tan-1(tpi/ldi)
[ステップS408]集計部141は、未処理の集計区間があるか否かを判断する。集計部141は、未処理の集計区間がある場合、処理をステップS403に進める。また集計部141は、全ての集計区間に対してステップS404〜ステップS407の処理が終了していれば、処理をステップS409に進める。
【0316】
[ステップS409]集計部141は、多重度が閾値より低い集計区間が十分にあるか否かを判断する。例えば集計部141は、集計区間の総数に対する、多重度が閾値より低い集計区間の割合が、予め設定された所定値以上であれば、多重度が閾値より低い集計区間が十分にあると判断する。集計部141は、多重度が閾値より低い集計区間が十分にあれば、処理をステップS411に進める。また集計部141は、多重度が閾値より低い集計区間が十分にはなければ、処理をステップS410に進める。
【0317】
[ステップS410]集計部141は、多重度が閾値より低い集計区間が十分にない場合、集計区間長を決定するには負荷が過大であり、集計区間長を決定できないと判断し、集計区間長決定処理を終了する。
【0318】
なお集計区間長が決定できなかった場合、集計部141は、以後の処理(図16のステップS121)では、例えば予め設定されていた値(例えば100ms)を集計区間長とする。また集計区間長が決定できなかった場合、集計部141は、以後の処理において、同一階層の他の解析対象区間に対する集計区間長決定処理で求められた集計区間長を使用することもできる。
【0319】
[ステップS411]集計部141は、変動係数CVを算出する。変動係数CVは、相対的なばらつきを表す数値である。変動係数CVは、ステップS407で得られた角度θiの標準偏差を、平均値で割ることによって得られる。式で表すと以下の式となる。
【0320】
【数4】
【0321】
ここで、mはステップS406に処理が進んだ集計区間の数である。
[ステップS412]集計部141は、変動係数が所定の閾値より大きいか否かを判断する。所定の閾値としては、例えば0.1が設定される。集計部141は、変動係数が所定の閾値より大きければ、処理をステップS413に進める。また集計部141は、変動係数が所定の閾値以下であれば、処理をステップS414に進める。
【0322】
[ステップS413]集計部141は、仮集計区間長を一定割合長くする。例えば集計部141は、現在の仮集計区間長に10msを加算した値を、新たな仮集計区間長とする。その後、集計部141は、処理をステップS402に進め、新たな仮集計区間長の場合の変動係数を計算する。
【0323】
[ステップS414]集計部141は、変動係数が閾値以下になった場合、現在の仮集計区間長を、集計区間長に決定する。
このようにして、最適な集計区間長を決定することができる。この手法は、多重度が低い時(例えば常に1以下)には、多重度(ジョブ量)の増加に伴ってスループットは単調に増加するという考えに基づいている。多重度が低い時に限って、その両者の関係を測定し、それが一定の分布の範囲に収まっていれば、集計区間長は短すぎず、同一種ジョブ間でのハードウェア資源消費量の差異は平均化されていると判断する。逆に、多重度とスループットの関係の分散が大きい時には、同一種ジョブ間でのハードウェア資源消費量の差異の影響が出ていると判断し、集計区間長を大きくする。
【0324】
第7の実施の形態によって、収集されたデータから集計区間の長さを自動的に決定できるようになり、集計区間を事前に調整する手間が省ける。また、不適切な集計区間の設定によって、誤った性能分析結果を得ることも避けられる。
【0325】
〔第8の実施の形態〕
次に第8の実施の形態について説明する。第8の実施の形態は、最適化のための低負荷時の平均処理時間を、分析対象期間に取得された時系列データの中から取得するものである。なお、第8の実施の形態を実現するシステム構成は第2の実施の形態と同様である。そこで、図6に示した第2の実施の形態の各要素を用いて第8の実施の形態の機能を説明する。
【0326】
第2の実施の形態におけるスループットの正規化では、低負荷時に予め採取したデータから算出した平均処理時間を使用している(図23参照)。第8の実施の形態は、この平均処理時間を、性能分析に使用するのと同一の時系列データから採取する。
【0327】
図45は、低負荷時の平均処理時間算出処理の一例を示すフローチャートである。この処理は、例えば、図9に示した第2の実施の形態のステップS113の処理の後に実行される。以下、図45に示す処理をステップ番号に沿って説明する。
【0328】
[ステップS501]集計部141は、分析対象期間を集計区間長で、複数の集計区間に分割する。
[ステップS502]集計部141は、ステップS503〜S505の処理が未処理の集計区間を1つ選択する。
【0329】
[ステップS503]集計部141は、選択した集計区間の多重度を計算する。例えば集計部141は、処理中の階層のサーバで選択した集計区間内に存在しているジョブの、集計区間内での処理時間の合計を求める。そして集計部141は、求めた合計を集計区間長で除算し、除算結果を集計区間の多重度とする。
【0330】
[ステップS504]集計部141は、選択した集計区間の多重度が、所定の閾値より低いか否かを判断する。所定の閾値としては、例えば0.5や1.0という値が予め設定される。集計部141は、多重度が閾値より低い場合、処理をステップS505に進める。また集計部141は、多重度が閾値以上の場合、処理をステップS506に進める。
【0331】
[ステップS505]集計部141は、選択した集計区間を、低負荷区間のリストに登録する。低負荷区間のリストは、例えばRAM103内に保持される。
[ステップS506]集計部141は、ステップS503〜S505の処理が未処理の集計区間があるか否かを判断する。集計部141は、未処理の集計区間があれば、処理をステップS502に進める。また集計部141は、未処理の集計区間がなければ、処理をステップS507に進める。
【0332】
[ステップS507]集計部141は、低負荷区間のリストに含まれる集計区間内で実行されたジョブを用いて、ジョブ種ごとの平均処理時間を計算する。集計部141は、計算したジョブ種ごとの平均処理時間を、正規化スループット値記憶部143に格納する。
【0333】
[ステップS508]集計部141は、ジョブ種ごとの平均処理時間を用いて、各ジョブ種の1ジョブ当たりの正規化されたスループット値を計算する。1ジョブ当たりの正規化されたスループット値の計算手法は、第2の実施の形態で説明した通りである。集計部141は、計算したジョブごとの正規化されたスループット値を、正規化スループット値記憶部143に格納する。
【0334】
なお第4の実施の形態のように、出力されるメッセージ数でスループットを計算する場合もある。この場合、ステップS508の処理では、集計部141は、1ジョブ当たりの正規化されたスループット値の計算に代えて、各ジョブ種の1メッセージ当たりの正規化されたスループット値を計算する。1メッセージ当たりの正規化されたスループット値の計算手法は、第4の実施の形態で説明した通りである。
【0335】
このようにして、分析対象期間に採取された時系列データから、ジョブ種ごとの平均処理時間を算出することができる。
図46は、多重度が閾値以下の集計区間の抽出例を示す図である。図46の例では、5秒分の時系列データの50の集計区間(集計区間長は0.1秒)の中で、多重度が1.0以下の集計区間が23個含まれている。そして、多重度が1.0以下の23個の集計区間に含まれているジョブだけから、ジョブ種ごとの平均処理時間が計算される。多重度が低いこれらの区間は、ジョブ同士の衝突が少なく、理想的な処理時間に近い値が収集できる。
【0336】
ここで、多重度の閾値を0.5に設定すると、得られる集計区間の数は14に下がる。この閾値は低く設定した方が、ジョブ同士の衝突が少なく、算出される平均処理時間の精度は高くなる。他方、閾値は低く設定しすぎると、得られるデータ量が少なくなり、平均処理時間を計算できないジョブ種が生じる可能性がある。
【0337】
第8の実施の形態の手法は、一般的に多重度は増減が激しいものなので、ある程度の長さの時系列データを収集すれば、その中には多重度の低い部分も含まれていることが多いという考えに基づいている。また、多重度が低い部分は、ジョブ同士の衝突が起きる確率が低いので、理想に近い平均処理時間が得られるという考えにも基づいている。
【0338】
このように分析対象期間の時系列データからジョブ種ごとの平均処理時間を算出することによって、低負荷時のデータを別途収集する必要がなくなるので、管理者の手間が省ける。しかも、同一の時系列データから全ての情報を取得し、事前に取得する情報を必要としないので、負荷の特性(例えばジョブの平均処理時間など)が動的に変化した場合にも、適切な平均処理時間に基づく分析ができる。すなわち、正規化用の平均応答時間を測定した時の負荷と実運用時の負荷との負荷傾向の違いによって引き起こされる性能分析の不正確さを避けることができる。
【0339】
〔第9の実施の形態〕
次に第9の実施の形態について説明する。第9の実施の形態は、瞬間スループット低下を検出するものである。なお、第9の実施の形態を実現するシステム構成は第2の実施の形態と同様である。そこで、図6に示した第2の実施の形態の各要素を用いて第9の実施の形態の機能を説明する。
【0340】
Appサーバ300上でJava(登録商標)VMがFull−GCを起こした場合には、非常に短い時間の間、Java(登録商標)VMの動作が止まり、Appサーバ300の階層のスループットが一瞬だけ急激に低下することがある。このような現象が発生していることは、以下の手順で検出することが可能である。なお以下の瞬間スループット低下検出処理は、例えば図16に示した第2の実施の形態のボトルネック判定処理(ステップS124)に代えて、分析部145により実行される。なお、分析部145は、図16に示した第2の実施の形態のボトルネック判定処理(ステップS124)と瞬間スループット低下検出処理との両方を実行することもできる。
【0341】
図47は、瞬間スループット低下検出処理の手順を示すフローチャートである。また以下、図47に示す処理をステップ番号に沿って説明する。
[ステップS601]分析部145は、集計区間を1つ選択する。例えば分析部145は、処理対象となっている階層に対応する集計区間管理テーブル(図22参照)の上位から順に、集計区間を選択する。
【0342】
[ステップS602]分析部145は、集計区間の多重度の最小値と最大値とを求める。
[ステップS603]分析部145は、ステップS602の処理が未処理の集計区間があるか否かを判断する。分析部145は、未処理の集計区間があれば、処理をステップS601に進める。また分析部145は、未処理に集計区間がなければ、処理をステップS604に進める。
【0343】
[ステップS604]分析部145は、多重度の最小値と最大値との間を等間隔に分割する。例えば分析部145は、多重度の最小値と最大値の間を、一定数(例えば100)もしくは一定間隔ごと(例えば多重度0.1ごと)に分割する。例えば図26に示す散布図に示されるような多重度が得られた場合、0と50の間を0.5刻みで100分割する(説明を簡便にするために50を超えている多重度は無視している)。分割によって、複数の多重度区間が生成される。
【0344】
[ステップS605]分析部145は、分割によって生成された多重度区間のうち、ステップS606〜S607の処理が未処理の多重度区間を1つ選択する。
[ステップS606]分析部145は、スループットの統計上の信頼区間を算出する。例えば分析部145は、選択した多重度区間の範囲に属する多重度を持つ全ての集計区間から、スループットの平均値と標準偏差を計算し、以下の式(5)の信頼区間を得る。ここでは、例として信頼度を95%として信頼区間を求める。
【0345】
【数5】
【0346】
式(5)中で、1.96は95%信頼区間の定数である。
[ステップS607]分析部145は、スループットが信頼区間の下限未満の集計区間を計数する。
【0347】
[ステップS608]分析部145は、ステップS606〜S607の処理が未処理の多重度区間があるか否かを判断する。分析部145は、未処理の多重度区間があれば、処理をステップS605に進める。また分析部145は、未処理の多重度区間がなければ、処理をステップS609に進める。
【0348】
[ステップS609]分析部145は、集計区間全体に対する、ステップS607で計数されたスループットが信頼区間の下限未満であった集計区間の割合を算出する。例えば分析部145は、95%信頼区間を求めた場合、スループットの95%信頼区間を下回るスループットを持っていた集計区間の割合を求める。
【0349】
[ステップS610]分析部145は、ステップS609で算出した割合が、閾値を超えているか否かを判断する。このときの閾値は、集計区間のスループットが信頼区間の下限を下回る統計的な確率よりも大きな値が、予め設定される。例えば95%信頼区間の場合は、下限を下回る統計的確率が2.5%あるので、それよりも大きな値(例えば5%)が、閾値に設定される。分析部145は、割合が閾値を超えている場合、処理をステップS611に進める。また分析部145は、割合が閾値を超えていない場合、処理をステップS612に進める。
【0350】
[ステップS611]分析部145は、異常な瞬間スループットの低下が発生していると判断する。分析部145は、例えば判断結果をモニタ11に表示する。その後、分析部145は、瞬間スループット低下検出処理を終了する。
【0351】
[ステップS612]分析部145は、異常な瞬間スループットの低下が発生していないと判断する。分析部145は、例えば判断結果をモニタ11に表示する。その後、分析部145は、瞬間スループット低下検出処理を終了する。
【0352】
このようにして、信頼区間を下回るスループットを持つ集計区間の、全体に占める割合が、予め決めた閾値を超えた場合は、その階層において異常な瞬間スループット低下が発生していると判断される。例えばAppサーバ300上のJava(登録商標)VMがFull−GCを起こした場合などのように、多重度に関係なく瞬間的なスループット低下を起こした場合に、演算処理によって、異常な瞬間スループット低下の発生を検出することが可能となる。
【0353】
図48は、第9の実施の形態により異常な瞬間スループット低下が検出される散布図の一例である。図48に示すように、Java(登録商標)VMのFull−GCなどによって引き起こされた異常な瞬間スループット低下の発生が、容易に検出できる。
【0354】
なお、第9の実施の形態は、第4の実施の形態と組み合わせることで、効果が顕著となる。例えば、図38、図39で示したように、第4の実施の形態を用いると瞬間的なスループット低下が顕著に表れる。このように顕在化させた瞬間スループットの低下を、第9の実施の形態の手法によって、機械的処理で検出可能となる。
【0355】
〔その他の実施形態〕
第2の実施の形態では、ネットワークからキャプチャしたIPパケットに基づいてメッセージを再現しているが、この手法はプロトコルメッセージを再現する手法の1つに過ぎず、他の手法でメッセージを再現することも可能である。例えば、多階層システムに含まれる各サーバで、実行したジョブのログを記録しておき、各サーバに記録されたログに基づいてメッセージを再現することも可能である。
【0356】
ただし、IPパケットをキャプチャしてメッセージを再現すれば、コンピュータ間の時計誤差の問題の発生が抑止されるという利点がある。すなわち、多階層システムにおいて、各サーバの時刻を正確に一致させるのは難しく、若干の誤差が生じてしまうことが多い。しかし、メッセージフローを再現するには、異なるサーバから送信されたメッセージ間の前後関係を正確に判別できることが重要である。複数のサーバの時刻間にずれがあると、各サーバでデータを採取した時刻にずれが生じ、メッセージフローの再現性が低下する。各階層のサーバでログを記録する手法の場合、異なるサーバのログを比較する際に、各ログの時刻が不正確であることで、ログ間の前後関係の正確な判定が困難となる。他方、IPパケットを1つの装置でキャプチャすれば、パケットが転送された時刻の前後関係を正確に判断できる。その結果、メッセージを正確に再現することが可能となる。
【0357】
また、IPパケットをキャプチャしてメッセージを再現する手法には、多階層システムに含まれるサーバにおいてデータを保存したり、保存したデータを分析装置に転送したりする処理が不要である利点もある。例えば多階層システムに含まれる各サーバで取得したログからメッセージを再現する手法では、各サーバがログを記憶し、さらに記憶したログを分析装置に転送することとなる。IPパケットをキャプチャしてメッセージを再現する手法であれば、各サーバでログを記憶せずにすみ、ネットワーク上に新たなパケット転送を生じさせることもない。
【0358】
なお、上記の各実施の形態に示した処理機能は、コンピュータによって実現することができる。その場合、情報処理装置1または分析サーバ100が有する機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、フレキシブルディスク(FD)、磁気テープなどがある。光ディスクには、DVD、DVD−RAM、CD−ROM/RWなどがある。光磁気記録媒体には、MOなどがある。
【0359】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【0360】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【0361】
また、上記の処理機能の少なくとも一部を、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現することもできる。
【0362】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。ただし、スループットを算出する具体的な手法については、第2の実施の形態と第4の実施の形態とのいずれか一方の手法を採用することができる。また、飽和多重度の決定手法については、第2の実施の形態と第5の実施の形態とのいずれかの手法を採用することができる。
【0363】
以上の実施の形態に開示された技術には、以下の付記に示す技術が含まれる。
(付記1) コンピュータに、
分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段から取得し、該取得した情報に基づいて、前記分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間と、集計区間内で実行された処理それぞれの進行量を合計した合計進行量とを計算し、
集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定し、
合計処理時間が前記閾値以上の集計区間を検出する、
処理を実行させるプログラム。
【0364】
(付記2) 集計区間で実行された処理の進行量は、該処理を依頼した処理要求に応じて実行される処理全体のうちの、該集計区間で実行された割合であることを特徴とする付記1記載のプログラム。
【0365】
(付記3) 集計区間で実行された処理の進行量は、該処理を依頼した処理要求に応じて実行される処理全体のうちの、該集計区間で実行された割合に、各処理種別に属する処理の低負荷時の処理時間に基づく重み付けを行った値であることを特徴とする付記1記載のプログラム。
【0366】
(付記4) 集計区間の総数に対する、前記閾値以上の合計処理時間の集計区間の割合が所定数以上の場合、前記分析対象期間において前記分析対象装置の処理が処理能力の限界に達していると判断することを特徴とする付記1乃至3のいずれかに記載のプログラム。
【0367】
(付記5) 他の装置への処理要求の送信を伴う処理については、処理の最初の実行期間を除外して、合計処理時間と合計進行量とを計算することを特徴とする付記1乃至4のいずれかに記載のプログラム。
【0368】
(付記6) 集計区間で実行された処理の進行量は、該集計区間に出力されたメッセージ数に応じた値であることを特徴とする付記1記載のプログラム。
(付記7) 集計区間で実行された処理の進行量は、該処理の全体で出力されるメッセージ数のうち、該集計区間に出力されたメッセージ数の割合に、各処理種別に属する処理の低負荷時の処理時間に基づく重み付けを行った値であることを特徴とする付記6記載のプログラム。
【0369】
(付記8) 集計区間それぞれの合計処理時間の最小値から最大値までの範囲を細分化して得られる細分化区間ごとに、細分化区間内の合計処理時間を有する集計区間の合計処理時間を平均した平均処理時間と、細分化区間内の合計処理時間を有する集計区間の合計進行量を平均した平均処理進行量とを計算し、隣接する細分化区間における平均処理時間の増加量に対する平均処理進行量の変化量を示す傾きを計算し、隣接する細分化区間の傾きに基づいて、前記閾値を決定することを特徴とする付記1乃至7のいずれかに記載のプログラム。
【0370】
(付記9) 集計区間それぞれの合計処理時間の最小値から最大値までの範囲を細分化して得られる細分化区間ごとに、細分化区間内の合計処理時間を有する集計区間から合計処理時間と合計進行量それぞれの平均値を計算し、範囲に含む合計処理時間の短い細分化区間から順に、合計処理時間と合計進行量それぞれの平均値から計算される傾きを一つずつ加えていきながら、傾きの統計上の信頼区間を求めていき、該信頼区間の下限が所定値を下回った細分化区間の合計処理時間を、前記閾値とすることを特徴とする付記1乃至7のいずれかに記載のプログラム。
【0371】
(付記10) 前記閾値未満の合計処理時間の集計区間それぞれの合計進行量と最大合計処理進行量との差分の総和を、前記分析対象装置の余力と判断することを特徴とする付記1乃至9のいずれかに記載のプログラム。
【0372】
(付記11) 分析対象期間を集計区間に分割する際には、合計処理時間が所定値より低い集計区間それぞれにおける合計処理時間と合計進行量との関係を示す数値のばらつきが所定値より低くなる範囲内の最も短い時間を、集計区間の長さとすることを特徴とする付記1乃至10のいずれかに記載のプログラム。
【0373】
(付記12) 合計処理時間が所定値以下の集計区間を抽出し、抽出した集計区間内で実行された処理の、処理種別ごとの平均処理時間を計算し、処理種別の平均処理時間に応じた値を、各処理種別に属する処理の重みとすることを特徴とする付記3または7のいずれかに記載のプログラム。
【0374】
(付記13) 集計区間それぞれの合計処理時間の最小値から最大値までの範囲を細分化して得られる細分化区間ごとに、細分化区間内の合計処理時間を有する集計区間から合計進行量の分布の統計上の信頼区間を求め、信頼区間の下限値以下の合計進行量を有する集計区間の、集計区間全体に対する割合を求め、該割合が一定の閾値を超えている場合に、前記分析対象装置において前記分析対象期間内で異常な瞬間性能低下が発生していると判断することを特徴とする付記1乃至12のいずれかに記載のプログラム。
【0375】
(付記14) コンピュータが、
分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段から取得し、該取得した情報に基づいて、前記分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間と、集計区間内で実行された処理それぞれの進行量を合計した合計進行量とを計算し、
集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定し、
合計処理時間が前記閾値以上の集計区間を検出する、
処理を実行する分析方法。
【0376】
(付記15) 分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段から取得し、該取得した情報に基づいて、前記分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間と、集計区間内で実行された処理それぞれの進行量を合計した合計進行量とを計算する計算手段と、
集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定する決定手段と、
合計処理時間が前記閾値以上の集計区間を検出する検出手段と、
を有する情報処理装置。
【符号の説明】
【0377】
1 情報処理装置
1a 監視手段
1b 記憶手段
1c 計算手段
1d 決定手段
1e 検出手段
2 ネットワーク
3 端末装置
4 Webサーバ
5 Appサーバ
6 DBサーバ
【技術分野】
【0001】
本発明は、コンピュータシステムの性能を分析するプログラム、分析方法、および情報処理装置に関する。
【背景技術】
【0002】
従来、複数のコンピュータが階層的に処理を分担するコンピュータシステム(多階層システムという)が利用されている。以下、多階層システムを構成するコンピュータを「サーバ」と呼ぶ。多階層システムとして、例えばシステム利用のためのインタフェースを提供するWebサーバ、システム上の業務処理を実行するApp(Application)サーバおよびデータを管理するDB(Database)サーバを有する三階層システムが知られている。各サーバは、ユーザからの処理要求に対して連携して処理を実行し、その処理要求に応答する。このように、各サーバに処理を分担させることで、システムの負担を分散させると共に、各階層のコンピュータの量を適切に調整することによって、信頼性や応答性を向上できる。
【0003】
このようなWeb三階層システムに代表される多階層システムにおいて、エンドユーザにおける応答時間の増大が発生した際には、問題が発生しているサーバが属する階層を特定することが、障害対応の第一歩として非常に重要である。そのために、各階層のサーバにおける処理時間を測定し、その推移を監視することによって問題の有無を判定する手法が広く一般に採用されている。
【0004】
例えば、トランザクションモデルを生成し、スイッチを介して送受信されたメッセージからトランザクションモデルに沿って進行するメッセージの受け渡しを検出する技術が考えられている。この技術により、任意のトランザクションを構成するメッセージの集合を特定し、そのトランザクションの解析が可能となる。例えば、ユーザのリクエストからレスポンスまでの各アプリケーションの処理を追跡することができる。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2006−11683号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかし、従来の方法では、分析対象であるサーバが処理に要した時間を把握することはできるものの、サーバの処理能力に余力があるかどうかについてはわからなかった。
1つの側面では、本発明は、分析対象装置の処理能力の余力の有無を判断することができるプログラム、分析方法、および情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【0007】
1つの案では、コンピュータに、分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段から取得し、該取得した情報に基づいて、前記分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間と、集計区間内で実行された処理それぞれの進行量を合計した合計進行量とを計算し、集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定し、合計処理時間が前記閾値以上の集計区間を検出する、処理を実行させるプログラムが提供される。
【発明の効果】
【0008】
分析対象装置の処理能力の余力の有無を判断することができるようになる。
【図面の簡単な説明】
【0009】
【図1】第1の実施の形態に係るシステムの構成の一例を示す図である。
【図2】第1の実施の形態の分析処理の手順の一例を示すフローチャートである。
【図3】第1の実施の形態による余力判定例を示す図である。
【図4】第2の実施の形態の業務システムの全体構成を示す図である。
【図5】第2の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。
【図6】第2の実施の形態に係る分析サーバの機能の一例を示すブロック図である。
【図7】キャプチャ処理の手順の一例を示すフローチャートである。
【図8】キャプチャデータ記憶部のデータ構造の一例を示す図である。
【図9】性能分析処理の手順の一例を示すフローチャートである。
【図10】メッセージデータ記憶部のデータ構造の一例を示す図である。
【図11】抽象化ルール記憶部のデータ構造の一例を示す図である。
【図12】HTTPのプロトコルのジョブ種の例を示す図である。
【図13】DBのプロトコルのジョブ種の例を示す図である。
【図14】ジョブ種が識別されたメッセージフローの一例を示す図である。
【図15】メッセージフロー情報記憶部のデータ構造の一例を示す図である。
【図16】階層別性能分析処理の手順の一例を示すフローチャートである。
【図17】多重度とスループットとの関係を示す図である。
【図18】集計区間への分割例を示す図である。
【図19】実行期間の集計区間への振り分け例を示す図である。
【図20】並列で処理が実行される状況を示す図である。
【図21】スループット・多重度算出処理の手順の一例を示すフローチャートである。
【図22】集計区間情報記憶部のデータ構造の一例を示す図である。
【図23】正規化スループット値記憶部のデータ構造の一例を示す図である。
【図24】スループットの時系列推移の一例を示す図である。
【図25】多重度の時系列推移の一例を示す図である。
【図26】多重度とスループットとの関係の一例を示す散布図である。
【図27】飽和多重度算出処理の一例を示すフローチャートである。
【図28】ボトルネック判定処理の手順の一例を示すフローチャートである。
【図29】階層が完全未飽和状態の一例を示す散布図である。
【図30】階層が未飽和状態の一例を示す散布図である。
【図31】階層が半飽和状態の一例を示す散布図である。
【図32】階層が飽和状態の一例を示す散布図である。
【図33】多重度とスループットの関連性を壊す要因の一例を示す図である。
【図34】間接的な外部資源待ち時間を除外しない場合の各集計区間のスループットと多重度との一例を示す散布図である。
【図35】間接的な外部資源待ち時間を除外した場合の各集計区間のスループットと多重度との一例を示す散布図である。
【図36】Full−GCによる停止期間が発生した場合の一連の業務処理を示す図である。
【図37】第4の実施の形態における正規化スループット値記憶部のデータ構造の一例を示す図である。
【図38】1ジョブ当たりの正規化スループット値に基づいてスループットを計算した場合の散布図である。
【図39】1メッセージ当たりの正規化スループット値に基づいてスループットを計算した場合の散布図である。
【図40】第5の実施の形態における飽和多重度算出処理の一例を示すフローチャートである。
【図41】第6の実施の形態の集計区間情報記憶部のデータ構造の一例を示す図である。
【図42】余力計算処理の手順の一例を示すフローチャートである。
【図43】余力計算処理を説明する図である。
【図44】集計区間長決定処理の手順の一例を示すフローチャートである。
【図45】低負荷時の平均処理時間算出処理の一例を示すフローチャートである。
【図46】多重度が閾値以下の集計区間の抽出例を示す図である。
【図47】瞬間スループット低下検出処理の手順の一例を示すフローチャートである。
【図48】第9の実施の形態により異常な瞬間スループット低下が検出される散布図の一例である。
【発明を実施するための形態】
【0010】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第1の実施の形態〕
第1の実施の形態は、単位期間における処理の合計処理時間の平均と、その単位期間における処理の合計進行量との関連を求め、合計処理時間が上昇しても合計進行量が上昇しなくなっている場合に、処理性能が限界に達していると判定するものである。
【0011】
図1は、第1の実施の形態に係るシステムの構成の一例を示す図である。第1の実施の形態では、情報処理装置1が、例えばWeb三階層システム中の各サーバを分析対象装置とし、ネットワーク2を介してサーバの性能分析を行う。Web三階層システムは、端末装置3からの要求に応じて、複数のサーバが連携して処理を実行するコンピュータシステムである。Web三階層システムは、例えばWebサーバ4、Appサーバ5、DBサーバ6で構成される。
【0012】
情報処理装置1は、例えば監視手段1a、記憶手段1b、計算手段1c、決定手段1d、および検出手段1eを有する。
監視手段1aは、分析対象期間内のWebサーバ4、Appサーバ5、DBサーバ6の動作を監視し、各サーバの処理の実行期間を示す情報を取得する。そして監視手段1aは、取得した情報を記憶手段1bに格納する。
【0013】
記憶手段1bは、分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶する。
計算手段1cは、分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段1bから取得する。次に計算手段1cは、取得した情報に基づいて、分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの進行量を合計した合計進行量を計算する。さらに計算手段1cは、取得した情報に基づいて、分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間を計算する。
【0014】
決定手段1dは、集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定する。
【0015】
検出手段1eは、合計処理時間が閾値以上の集計区間を検出する。
このような構成のシステムにおいて、以下のような処理が行われる。
図2は、第1の実施の形態の分析処理の手順の一例を示すフローチャートである。以下、図2に示す処理をステップ番号に沿って説明する。
【0016】
[ステップS1]監視手段1aは、分析対象期間内のWebサーバ4、Appサーバ5、DBサーバ6の動作を監視する。例えば監視手段1aは、Webサーバ4、Appサーバ5、DBサーバ6に入出力されるメッセージをネットワーク2からキャプチャする。監視手段1aは、監視内容に基づいて、Webサーバ4、Appサーバ5、DBサーバ6から、処理の実行状況に関する情報を、監視結果として取得する。そして監視手段1aは、監視結果を記憶手段1bに格納する。
【0017】
[ステップS2]計算手段1cは、記憶手段1bに格納されている情報に基づいて、分析対象装置であるサーバごとに、合計進行量を計算する。例えば計算手段1cは、分析対象期間を細分化して、集計区間を生成する。次に計算手段1cは、生成した集計区間ごとに、各サーバにおいて集計区間内で実行された処理それぞれの進行量を計算する。そして計算手段1cは、サーバごとに、各集計区間の進行量を合計し、合計進行量とする。
【0018】
[ステップS3]計算手段1cは、記憶手段1bに格納されている情報に基づいて、分析対象装置であるサーバごとに、合計処理時間を計算する。例えば計算手段1cは、分析対象期間を細分化して、集計区間を生成する。次に計算手段1cは、生成した集計区間ごとに、各サーバにおいて集計区間内で実行された処理それぞれの実行に費やされた時間を計算する。そして計算手段1cは、サーバごとに、各集計区間の実行に費やされた時間を合計し、合計処理時間とする。なお各サーバでは、複数の処理を並列実行する場合がある。そのため、合計処理時間は、集計区間の長さ(時間幅)より大きくなる場合もある。
【0019】
[ステップS4]決定手段1dは、集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定する。
【0020】
[ステップS5]検出手段1eは、合計処理時間が閾値以上の集計区間を検出する。
このようにして検出された集計区間は、合計処理時間が増加しても、処理の進行が増加しなくなっている時間帯である。すなわち、性能の余力がなくなっている時間帯である。合計処理時間が閾値以上の集計区間が多数検出されたサーバは、余力がなくなりつつあることが分かる。また合計処理時間が閾値以上の集計区間がほとんど検出されていないサーバは、性能の余力が十分にあることが分かる。
【0021】
図3は、第1の実施の形態による余力判定例を示す図である。図3の例では、各サーバにおいて、処理要求が入力されてから応答を返すまでに、処理要求に応じて実行された処理全体で、処理の進行を示す単位量を「1」としている。複数の集計区間を跨って実行された処理は、処理の単位量を処理時間に応じて、各集計区間に比例配分される。
【0022】
Webサーバ4では、1つの処理要求に応じて、「集計区間1」と「集計区間2」とで2回に分けて処理7が行われている。「集計区間1」における処理時間は「14ms」であり、「集計区間2」における処理時間は「11ms」である。そこで進行の単位量「1」を2つの集計区間に比例配分すると、「集計区間1」の進行量が「0.56」、「集計区間2」の進行量が「0.44」となる。図3の例では、「集計区間1」と「集計区間2」との間に1つの処理要求に応じた処理7のみが実行されているため、合計進行量も、「集計区間1」が「0.56」、「集計区間2」が「0.44」となる。
【0023】
Appサーバ5では、1つの処理要求に応じて、「集計区間1」と「集計区間2」とで5回に分けて処理8が行われている。「集計区間1」における処理時間は、「19ms」と「9ms」であり、合計「28ms」である。「集計区間2」における処理時間は「10ms」と「12ms」と「21ms」であり、合計「43ms」である。そこで進行の単位量「1」を2つの集計区間に比例配分すると、「集計区間1」の進行量が「0.394」、「集計区間2」の進行量が「0.606」となる。図3の例では、「集計区間1」と「集計区間2」との間に1つの処理要求に応じた処理8のみが実行されているため、合計進行量も、「集計区間1」が「0.394」、「集計区間2」が「0.606」となる。
【0024】
DBサーバ6では、4つの処理要求に応じて、「集計区間1」と「集計区間2」とで、処理要求ごとに1回ずつ、計4回の処理9a,9b,9c,9dが行われている。2つめの処理要求に応じた処理9bは、「集計区間1」と「集計区間2」とに跨って実行されている。このように2つの集計区間に跨って実行された処理9bに関しては、処理進行の単位量「1」が、処理時間に応じて比例配分される。処理9bの「集計区間1」における処理時間は「10ms」であり、「集計区間2」における処理時間は「24ms」であり、合計「34ms」である。そこで処理9bに関する進行の単位量「1」を2つの集計区間に比例配分すると、「集計区間1」の進行量が「0.29」、「集計区間2」の進行量が「0.71」となる。図3の例では、「集計区間1」において処理9aが完結しており、その処理9aの進行の単位量「1」と処理9bの進行量「0.29」の合計値「1.29」が、「集計区間1」の合計進行量となる。また「集計区間2」において処理9c,9dが完結しており、その処理9c,9dそれぞれの進行の単位量「1」と処理9bの進行量「0.71」の合計値「2.71」が、「集計区間2」の合計進行量となる。
【0025】
サーバごとの各集計区間の合計処理時間は、集計区間内で処理の実行に要した時間の合計である。Webサーバ4では、「集計区間1」の合計処理時間は「14ms」、「集計区間2」の合計処理時間は「11ms」である。Appサーバ5では、「集計区間1」の合計処理時間は「28ms」、「集計区間2」の合計処理時間は「43ms」である。DBサーバ6では、「集計区間1」の合計処理時間は「19ms」、「集計区間2」の合計処理時間は「39ms」である。
【0026】
このようにして集計された情報に基づいて、サーバごとに、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる閾値が計算される。なお、所定値としては、例えば、合計処理時間が少ない時間帯の合計処理時間の増加量に対する合計進行量の増加量の割合に、所定の係数(1より小さい値)を掛けた値とする。
【0027】
このようにして求められた閾値よりも合計処理時間が長い集計区間が、複数のサーバそれぞれに関して検出される。例えば図3の例では、Webサーバ4とDBサーバ6とについては、合計処理時間が閾値以上となっている集計区間の、全体の集計区間に対する割合は半分以下であり、少ない。他方、Appサーバ5については、ほとんどの集計区間において、合計処理時間が閾値以上となっている。そうすると、Appサーバ5において処理能力の余力がなくなっており、Web三階層システムにおけるボトルネックとなっていることが分かる。
【0028】
ここで言うボトルネックとは、システム全体としての処理性能の上昇を阻害している要因のことである。またボトルネックの検出とは、複数のコンピュータが階層的に処理を分担するシステム(多階層システム)の内のどの階層に問題があって、システム全体としての性能が頭打ちになっているのかを求めることである。
【0029】
このように、第1の実施の形態によれば、各サーバの処理能力の余力の有無を検出することができる。これにより、多階層システムにおいて、ボトルネックとなっているサーバを容易に特定できる。
【0030】
ところで、従来は、多階層システムにおけるボトルネックとなっているサーバの検出は、難しかった。以下、多階層システムにおいて、システム全体の処理性能が限界を迎えた場合の、ボトルネックとなっているコンピュータの検出の困難性について説明する。
【0031】
多階層システムの運用中に発生したボトルネックの検出に利用可能と考えられる技術を大別すると、下記の5通りに分類される。
・第1の手法:システムリソースの利用状況を監視する。
・第2の手法:アプリケーション内部の詳細な動作状況を監視する。
・第3の手法:コンピュータ上でアプリケーションの外部挙動(応答時間や各階層での滞在時間)を監視する。
・第4の手法:ネットワーク上でアプリケーションの外部挙動(応答時間や各階層での滞在時間)を監視する。
・第5の手法:システム運用前に予め負荷テストを行い、負荷量とスループットの関係を学習し、その知識を利用して運用中のボトルネックを特定する。
【0032】
次に、各手法について詳細に説明する。
<第1の手法>
第1の手法に該当する技術は、例えば多階層システムに含まれるコンピュータ上に特定のプロセス(エージェントと呼ばれることが多い)を用意しておき、そのプロセスが様々な測定値を収集する手法である。取得する測定値の例としては、マシン全体でのCPU利用率やメモリ使用量などの、マシン単位でのシステムリソース利用状況がある。また取得する測定値の別の例としては、プロセスごとのCPU利用率やファイルオープン数などの、プロセス単位の情報がある。
【0033】
第1の手法では、分析対象の各コンピュータ上で収集されたデータは、一旦そのコンピュータ上の記録装置へ書き出しておいて、後で分析を行うコンピュータで回収される。または分析対象のコンピュータがネットワーク経由で直接、分析を行うコンピュータに送信する。これによって、多階層システムに含まれるコンピュータ以外の特定のコンピュータに集められる。そしてデータが集められたコンピュータにおいて、多階層システム内の全コンピュータのデータを突き合わせて分析することによって、ボトルネックを検出することになる。
【0034】
<第2の手法>
第2の手法に該当する技術としては、例えばアプリケーションソフトウェアの機能を利用したり、アプリケーションソフトウェアに改造を加えたりして、アプリケーションソフトウェア内部の情報を取得する手法である。取得する情報は、例えばデータベース(DB)ソフトウェアにおけるDB問い合わせ処理時間、同時接続ユーザ数、各内部メソッドの開始・終了時刻などである。これらの情報は、エージェントのような別プロセスから当該ソフトウェアに問い合わせて得られる場合もあるし、当該アプリケーションソフトウェア自身がログなどの形式で出力する場合もある。
【0035】
第2の手法においても、第1の手法と同様に、各コンピュータ上で収集されたデータは、一旦そのコンピュータ上の記録装置へ書き出しておいて、後でそのコンピュータとは別の特定のコンピュータに集められる。そしてデータが集められたコンピュータにおいて、データが分析され、ボトルネックが検出される。
【0036】
<第3の手法>
第3の手法における外部挙動を監視する技術としては、応答時間を測定する手法が一般的である。応答時間は、多階層システムのあらゆる階層において測ることが考えられる。
【0037】
第3の手法では、例えば各コンピュータ上のアプリケーションソフトウェアの機能を利用したり、アプリケーションソフトウェアに改造を加えたりすることによって、アプリケーションソフトウェアが他コンピュータとメッセージ送受を行ったことを記録する。そしてアプリケーションソフトウェアは、その中から各処理要求の受信時刻と処理結果の返信時刻を抜き出して応答時間を求める手法である。
【0038】
第3の手法においても、第1の手法と同様に、各コンピュータ上で収集されたデータは、一旦そのコンピュータ上の記録装置へ書き出しておいて、後でそのコンピュータとは別の特定のコンピュータに集められる。そしてデータが集められたコンピュータにおいて、データが分析され、ボトルネックが検出される。
【0039】
<第4の手法>
第4の手法における外部挙動を監視する技術も、第3の手法と同様、応答時間を、多階層システムの各階層において測定する手法が一般的である。第3の手法と第4の手法との違いは、応答時間の測定方法にある。
【0040】
第4の手法では、例えば多階層システムに含まれるコンピュータには手を加えず、ネットワーク上を流れる通信パケットを、多階層システムに含まれないコンピュータで取得する。そして、通信パケットを取得したコンピュータが、取得した通信パケットから、多階層システムに含まれるコンピュータ間のメッセージ送受を解析し、それらの送受時刻から応答時間を求める。
【0041】
第4の手法には、他の全ての手法と違って、各コンピュータ内には一切手を加えないので各コンピュータ本来の挙動に一切影響を与えないという利点がある。以下に、第4の手法をさらに詳細に説明する。コンピュータネットワーク上から通信パケットを取得する方法として、ネットワークスイッチの持つポートミラーリング機能を利用する方法がある。ポートミラーリング機能は、ネットワークスイッチ上の特定のポートを流れるIP(Internet Protocol)パケットをコピーし、そのコピーを指定したポートに転送する。そのポートの先に接続したコンピュータにおいて、転送されてきたIPパケットをキャプチャして記録することができる。
【0042】
こうして取得したデータは、コンピュータ間でサーバプログラム同士がやり取りするメッセージの形式ではなく、細分化されたIPパケットという形式である。ここからメッセージ上の情報を取得するには、まず細分化されたIPパケット同士を組み立て、さらにはそのパケットをメッセージのプロトコル種別に従って解析することとなる。メッセージを解析することによって、各処理の要求と、その要求に対する返信のペア(メッセージペア)を見つけだすことができる。メッセージペアが検出できれば、メッセージペアの時刻情報の差分を取れば応答時間を求めることができる。
【0043】
さらには、各メッセージの情報から、処理要求の内容に関する情報も取得することができる。例えば、HTTP(HyperText Transfer Protocol)要求の場合は、取得を要求しているURL(Uniform Resource Locator)であるとか、DB要求の場合はSQL(Structured Query Language)文などの情報である。これらの内容と応答時間とから、どのような業務処理にどれくらいの応答時間を要しているか判断することができる。この応答時間の平均値の推移を監視することによって、特定の階層でだけ応答時間が増加すれば、それはその階層下の処理に何らかの問題が発生していると考え、ボトルネック検出の手掛かりとすることができる。また、業務処理内容ごとに集計すれば、特定の業務処理の応答時間だけが低下した場合に、その業務処理に関連している部分にボトルネックが存在すると考えることもできる。
【0044】
<第5の手法>
第5の手法は、事前の負荷テストによってデータ収集を行うことを前提とする。事前の負荷テストでは、例えば多階層システムに含まれないコンピュータ(負荷生成器)から多階層システムに対して運用時を模した負荷を掛ける。例えば、負荷生成器から多階層システムに、同時アクセスユーザ数を変えながら、多数のパターンの要求を入力する。そして、処理結果を観測するコンピュータにおいて、同時アクセスユーザ数ごとの多階層システムのスループットを測定する。処理結果を観測するコンピュータでは、システムに掛かる同時アクセスユーザ数とスループットの関係から、スループットが上限に達する同時アクセスユーザ数を判定し、判定した同時アクセスユーザ数を限界同時アクセスユーザ数とする。このような事前処理を行った後、その監視対象の多階層システムの運用時に同時アクセスユーザ数を監視しておき、先に得た限界同時アクセスユーザ数に達すると、システムの性能が限界に達したと判定する。
【0045】
以上のような第1から第5の手法のいずれかを用いて多階層システムのボトルネックを検出した場合、以下のような課題が残ってしまう。
<第1の手法の課題>
特定のシステムリソースを消費し尽くしていない状況で発生したボトルネックは検出できない。
【0046】
システムリソースの利用状況の監視では、ボトルネックを検出できない場合がある。これは、以下のような理由により、特定のリソースが枯渇していなくても、そのコンピュータがボトルネックとなることがあるからである。
1.ソフトウェア設定やユーザアプリ内部において、並列度を制限している場合
2.複数リソースが複合してボトルネックとなっている場合
なお第2の手法を使用して、アプリケーション内部の詳細な動作状況を監視する場合、1.の問題は解決できる可能性があるが、それも適切なデータを取得できた場合に限られる。アプリケーション内部でボトルネック要因になると考えられる要素は、一般的に非常に多く存在する。そのため、それらの全てについて網羅的に詳細な記録を取り続けることは、データの記録装置への書き出しに要する時間とシステム負荷を考えると、現実的には困難である。
【0047】
<第1〜第3の手法に共通の課題>
第1〜第3の手法には、極短時間で変化するボトルネックが検出できないという問題がある。
【0048】
各コンピュータ上でデータを測定する手法には、以下の2つの要因があって、極短い時間間隔ごとの詳細な分析を行うことが難しいという問題がある。
極短い時間間隔ごとの詳細なデータはデータ量が大きくなり、コンピュータ上の記録装置に一旦格納して後から取り出す場合においても、直接ネットワーク経由で外部へ送り出す場合においても、そのコンピュータに掛かる負担が大きくなる。そのため、データの収集処理が、コンピュータ上で動作しているアプリケーションの挙動に大きく影響を及ぼしてしまう。その結果として、そのアプリケーションの本来の挙動とは大きく異なる挙動を観測してしまうことになる。
【0049】
コンピュータ間で時計の誤差があり、これはNTP(Network Time Protocol)等の時計同期システムを使用したとしても、数ミリ秒単位の誤差は免れない。これでは、複数コンピュータから収集したデータを付き合わせて分析する際に、タイムスタンプ間に誤差が生じていて、正しく突き合わせを実行することができず、極短い時間間隔での精密な分析はできなくなる。
【0050】
極短い時間間隔ごとの詳細な分析を行えない結果として、例えば、一つのコンピュータ上で、測定期間より短い一瞬一瞬だけの短時間に発生しているボトルネックは、測定期間内で平均化されてしまい、その後の分析で検出できないことになる。また、複数の階層間で測定期間より短い極短時間の内にボトルネック要因が推移している場合は、同様に検出できない。
【0051】
<第4の手法の課題>
アプリケーションの外部挙動を監視する第4の手法には、以下の課題がある。
応答時間/処理時間などの外部観測ではボトルネックを見誤る場合がある。このようなことは、外部観測では外面の挙動しか観測しておらず、そのような挙動が発生する原因となる内部処理については何も情報を得ていないために発生する。
【0052】
例えば、発生しがちなケースとして次のようなことがある。ある層がボトルネックになった際に、その層に送られてくる処理要求の数が処理可能な数を超えて際限なく増加していく場合は、その階層における応答時間が大きく悪化する。しかし、その階層へ送られてくる処理要求の数が適切にコントロールされている場合は、その階層へはそれ以上処理要求が送られて来なくなる。それによって、応答時間の低下は小さく留まる。その代わりに、その層へ処理要求を送る上位の階層では、下位の階層へ処理を送るまでの待ち時間が指数関数的に増加する。外部観測で処理時間の推移を監視していると、その待ち時間の増加と純粋な処理時間の増加の区別が付かないために、あたかもその待ち時間が増加した階層にボトルネックが存在するかのように誤認してしまう。
【0053】
<第5の手法の課題>
システム運用前に予め負荷テストを行い、負荷量とスループットの関係を学習し、その知識を利用して運用中のボトルネックを特定する第5の手法には、以下の課題がある。
【0054】
第5の手法を多階層システムに適用する場合、多階層システムの最上段に掛かる多重度(同時アクセスユーザ数)と、その時のスループットは測定できても、階層ごとの多重度・スループットの関係は測定できないという問題がある。また、このような手法では、システムに掛かる多重度を変化させるために負荷生成器の発生する負荷量を変化させながら、何回も測定し直す必要がある。さらには、多階層システムの場合は、各階層のコンピュータの台数を動的に変更すること(スケールアウト)があり、その考えられる全ての構成について、このような事前測定を行っておくのは困難である。さらに、多階層システムにおいて各階層に掛かる負荷は、そのシステム上で動く複数種類の処理の混合割合やその実行タイミングによっても変わってくる。その全ての組み合わせを事前にテストして完全なデータを揃えておくことは、非常に困難で現実的ではない。
【0055】
また、同様の手法を最上段以外の階層に直接適用して、負荷生成器から中間階層へ直接負荷を掛けて、多重度とスループットの関係を測定しようとすると、実環境に即した負荷をどのようにして生成するかという非常に困難な問題が発生する。現在の多階層システムは挙動が非常に複雑で、各階層が上位層からある処理を受けた際に下位層へどのようなタイミングでどのような負荷を発行するかは、アプリケーションのプログラム内容だけでなく、ハードウェア構成やOS実装を含む種々の要因が複雑に絡んで決まる。そのため、負荷の生成要因を正確に理解して再現することは非常に困難であり、現実的ではない。
【0056】
よって、第5の手法は、システム運用前のテスト手法としては利用できるが、実運用中に発生した性能問題の原因分析(ボトルネック特定)には利用できない。
以上のように、第1〜第5の手法では、いずれも課題があり、多階層システムのボトルネックを適切に検出するのが難しかった。
【0057】
第1の実施の形態に示した手法では、精密なメッセージ送受時刻の記録などの情報から、各階層における処理の合計進行量と合計処理時間を算出し、その関係を動的に求め、そこからボトルネック判定を行うことを可能とする。これにより、各階層のサーバが処理性能の限界まで使用されているのかどうかを正確に把握することができ、上記課題も解消可能である。
【0058】
例えば、第1の実施の形態では、各サーバのシステムリソースの消費状況の情報ではなく、各サーバの処理の実行期間を示す情報に基づいてボトルネックを検出できる。そのため、上記第1の手法の「特定のシステムリソースを消費し尽くしていない状況で発生したボトルネックは検出できない」という課題は解消している。
【0059】
また第1の実施の形態では、分析対象期間を細分化した集計区間単位で、合計処理時間が閾値以上か否かを判断する。そのため上記第1〜第3の手法における「極短時間で変化するボトルネックが検出できない」という課題も解決されている。
【0060】
また第1の実施の形態では、合計処理時間と合計進行量という2つの測定値からボトルネックを判定している。一方で、上記第4の手法は、それら2つの測定値からも算出可能な応答時間/処理時間という単一の測定値からボトルネックの検出を行っている。第4の手法の課題「応答時間/処理時間などの外部観測ではボトルネックを見誤る場合がある」の原因の大きな要素は、単なる下位の階層のサーバからの応答待ち時間の増加をボトルネックと見誤る可能性があることである。第1の実施の形態では、合計処理時間と合計進行量という2つの測定値から二次元の関係を利用してボトルネック判定を行っているため、単なる下位の階層のサーバからの応答待ち時間の増加をボトルネックと見誤る可能性が、抑止されている。
【0061】
また第1の実施の形態では、各階層のサーバごとにボトルネックの発生の有無を検出できる。そのため、上記第5の手法の課題「階層ごとの多重度・スループットの関係は測定できない」について解消している。
【0062】
なお、図1に示した監視手段1a、計算手段1c、決定手段1d、および検出手段1eは、情報処理装置1が有するCPU(Central Processing Unit)により実現することができる。また、記憶手段1bは、情報処理装置1が有するRAM(Random Access Memory)やハードディスクドライブ(HDD:Hard Disk Drive)などにより実現することができる。
【0063】
また、図1に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。
〔第2の実施の形態〕
次に第2の実施の形態について説明する。第2の実施の形態は、ネットワーク上でのアプリケーションの外部挙動を観測するアプローチを採用する。第2の実施の形態では、スイッチングハブのポートミラーリング機能を使ってネットワークを流れるIPパケットをキャプチャし、そこからプロトコルメッセージを再現することによって情報を得る。ここで、プロトコルメッセージは、所定のプロトコルに準拠した情報である。以下、プロトコルメッセージを、単に「メッセージ」と呼ぶ。
【0064】
なお、コンピュータの単位時間当たりの処理能力は、スループットと呼ばれる。そこで、第2の実施の形態では、第1の実施の形態に示した合計進行量に相当する値を、スループットと呼ぶこととする。
【0065】
また第2の実施の形態では、第1の実施の形態における合計処理時間を、集計区間の長さで除算することで、集計区間内の処理の多重度の平均値を求め、集計区間内の多重度とする。各集計区間の長さは同じである。そのため、第1の実施の形態で示した性能分析における合計処理時間に代えて多重度を用いても、分析結果に影響はない。そこで第2の実施の形態では、集計区間の多重度を用いて、装置の性能の余力などの分析を行うものとする。
【0066】
また第2の実施の形態では、複数階層システムとしてWeb3階層システムを例として説明する。Web3階層システムとは、Webサーバ、アプリケーションサーバ(以降、Appサーバ)、データベースサーバ(以降、DBサーバ)からなる複数階層コンピュータシステムである。エンドユーザのコンピュータ上のブラウザが出力する処理要求は、WebサーバがHTTPに従ったメッセージで受ける。処理要求が静的コンテンツの取得であれば、Webサーバが、保持しているコンテンツを直接エンドユーザのコンピュータへ返信する。他方、処理要求がプログラムによって生成される動的コンテンツの取得の場合、Webサーバは、処理をAppサーバへ依頼する。処理の依頼を受けたAppサーバは、Java(登録商標)などで記述されたプログラムによってその処理要求を実行する。Appサーバは、処理の過程において使用されるデータを、それを保持するDBサーバに対して処理要求を発行して取得する。
【0067】
図4は、第2の実施の形態の業務システムの全体構成を示す図である。この業務システムは、分析サーバ100、Webサーバ200、Appサーバ300およびDBサーバ400を有する。分析サーバ100、Webサーバ200、Appサーバ300およびDBサーバ400は、スイッチ装置10を介して相互に接続されている。また、スイッチ装置10は、ネットワーク20を介して端末装置21,22,23に接続されている。
【0068】
端末装置21,22,23は、スイッチ装置10およびネットワーク20を介してWebサーバ200にアクセス可能である。端末装置21,22,23のユーザは、Webサーバ200が提供するGUI(Graphical User Interface)を端末装置21,22,23から操作して業務システムを利用できる。ネットワーク20は、例えばイントラネットである。
【0069】
なお、ネットワーク20がインターネットである場合も考えられる。その場合、スイッチ装置10はファイアウォールとして機能させることもできる。また、Webサーバ200の属するネットワークセグメントは、例えばDMZ(Demilitarized Zone)として扱われる。
【0070】
分析サーバ100は、Webサーバ200、Appサーバ300およびDBサーバ400の稼働状況を管理する。分析サーバ100は、そのための情報をスイッチ装置10から取得することができる。すなわち、スイッチ装置10は、ポートミラーリング機能を有しており、Webサーバ200、Appサーバ300およびDBサーバ400の間で送受信される通信パケットを分析サーバ100にも送信する。ポートミラーリング機能とは、スイッチ装置10上の設定したポートを流れるIPパケットをコピーして、指定した別のポートへ転送する機能である。この転送先として指定されたポートの先に、IPパケット記録や解析を行う分析サーバ100が配置される。
【0071】
分析サーバ100は、スイッチ装置10から送信される通信パケットを受信して、記憶する(パケットキャプチャ)。なお、分析サーバ100で単にパケットキャプチャを行う用途であれば、スイッチ装置10をリピータハブで代用することもできる。分析サーバ100は、この転送されてくるIPパケットを受信可能なネットワークインタフェースを有している。そして分析サーバ100は、転送されてきたIPパケット格納用の十分に大きなハードディスクを有している。さらに、分析サーバ100は、IPパケットをキャプチャするのに十分なCPU性能を保有していることが望ましい。転送されてきたIPパケットは、分析サーバ100上でキャプチャされ、その後にメッセージを抽出するための処理が実施される。
【0072】
Webサーバ200は、端末装置21,22,23で実行されるWebブラウザから業務システムに対する処理要求(メッセージ)を受け付ける。ここで、Webサーバ200と端末装置21,22,23とのメッセージ交換は、HTTPによって行われるものとする。ただし、他のプロトコルが用いられてもよい。
【0073】
以下では、端末装置21,22,23からWebサーバ200へ送信する処理要求をHTTPリクエストと呼ぶこととする。また、それに対する応答をHTTPレスポンスと呼ぶこととする。なお、リクエスト/レスポンスともに処理要求の一例である。
【0074】
Webサーバ200は、端末装置21,22,23から受信したHTTPリクエストに基づいて、静的コンテンツに関しては自装置でHTTPレスポンスを生成し、端末装置21,22,23に送信する。なお、動的コンテンツに関しては、Appサーバ300に依頼すべき処理の処理要求(メッセージ)を生成して、Appサーバ300に送信する。
【0075】
ここで、Webサーバ200とAppサーバ300とのメッセージ交換は、IIOP(Internet Inter-ORB(Object Request Broker) Protocol)によって行われるものとする。ただし、他のプロトコルが用いられてもよい。
【0076】
以下では、Webサーバ200からAppサーバ300へ送信する処理要求をIIOPリクエストと呼ぶこととする。また、それに対する応答をIIOPレスポンスと呼ぶこととする。
【0077】
Webサーバ200は、IIOPリクエストに対するIIOPレスポンスを受信すると、その内容に基づいてHTTPレスポンスを生成して、端末装置21,22,23に送信する。
【0078】
Appサーバ300は、Webサーバ200から受信したIIOPリクエストに基づいてDBサーバ400に依頼すべき処理のクエリを生成し、DBサーバ400に送信する。
ここで、Appサーバ300が生成するクエリは、例えばSQL文によって表記され、DBサーバに固有のプロトコルでDBサーバへと送信される。以下では、Appサーバ300がDBサーバ400に送信するクエリをDBリクエストと呼ぶこととする。また、それに対する応答をDBレスポンスと呼ぶこととする。
【0079】
Appサーバ300は、DBリクエストに対するDBレスポンスを受信すると、その内容に基づいてIIOPレスポンスを生成してWebサーバ200に送信する。
DBサーバ400は、Appサーバ300から受信したDBリクエストに含まれるSQL文を実行してDBの参照や更新等の処理を実行する。DBサーバ400は、その処理結果に基づいてDBレスポンスを生成し、Appサーバ300に送信する。
【0080】
なお、業務システムにおいてWebサーバ200、Appサーバ300およびDBサーバ400と各層(Web層、App層およびDB層)一台ずつの構成を例示したが、各層にそれぞれ複数台のサーバを設けてもよい。各層に複数のサーバがある場合、各層において負荷分散処理が行われる。
【0081】
階層間を跨って送受信されるメッセージを取得する手法には何通りか考えられるが、第2の実施の形態では、ネットワーク上を流れるIPパケットから情報を取得するものとする。この場合、ポートミラーリング機能を有するスイッチ装置10が用いられる。
【0082】
また、以下では各サーバという場合、Webサーバ200、Appサーバ300およびDBサーバ400を示すものとする。さらに、Webサーバ200は、Appサーバ300およびDBサーバ400よりも上位層のサーバであるとする。また、Appサーバ300は、DBサーバ400よりも上位層のサーバであるとする。このような階層関係を定義する情報は、分析サーバ100に予め格納される。
【0083】
図5は、第2の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。分析サーバ100は、CPU101、ROM(Read Only Memory)102、RAM103、HDD104、グラフィック処理装置105、入力インタフェース106、記録媒体読取装置107および通信インタフェース108を有する。
【0084】
CPU101は、分析サーバ100全体を制御する。
ROM102は、分析サーバ100上のBIOS(Basic Input / Output System)のプログラムなどを記憶する。
【0085】
RAM103は、CPU101に実行させるOS(Operating System)のプログラムやアプリケーションのプログラムの少なくとも一部を一時的に記憶する。また、RAM103は、CPU101による処理に必要な各種データを記憶する。
【0086】
HDD104は、OSのプログラム、アプリケーションのプログラムを記憶する。また、HDD104はCPU101による処理に必要な各種データを記憶する。なお、HDD104に代えて(または、HDD104と併せて)、SSD(Solid State Drive)など他の種類の記憶装置を用いてもよい。
【0087】
グラフィック処理装置105は、モニタ11と接続される。グラフィック処理装置105は、CPU101からの命令に従って画像をモニタ11の画面に表示させる。
入力インタフェース106は、キーボード12とマウス13と接続される。入力インタフェース106は、キーボード12やマウス13から送られてくる信号をCPU101に送信する。
【0088】
記録媒体読取装置107は、記録媒体14に記憶されたデータを読み取る読取装置である。例えば、分析サーバ100が有すべき機能は、その機能の処理内容を記述したプログラムをコンピュータに実行させることで実現できる。そのようなプログラムは、コンピュータ読み取り可能な記録媒体14に記録して配布することができる。また、スイッチ装置10あるいはネットワーク20に接続されたプログラム配信サーバ(図示せず)にそのプログラムを格納してもよい。この場合、分析サーバ100は、スイッチ装置10あるいはネットワーク20を介してプログラム配信サーバからプログラムをダウンロードすることができる。
【0089】
記録媒体14としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリを使用できる。磁気記録装置には、HDD、フレキシブルディスク(FD:Flexible Disk)、磁気テープなどがある。光ディスクには、CD(Compact Disc)、CD−R(Recordable)/RW(ReWritable)、DVD(Digital Versatile Disc)、DVD−R/RW/RAMなどがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。半導体メモリには、USB(Universal Serial Bus)メモリなどのフラッシュメモリがある。
【0090】
通信インタフェース108は、TP(Twisted Pair)ケーブルや光ケーブル等によってスイッチ装置10と接続される。通信インタフェース108は、スイッチ装置10を介して他の情報処理装置とデータ通信する。また、通信インタフェース108は、各サーバの間で送受信される通信パケットをスイッチ装置10から受信する。
【0091】
以上のようなハードウェア構成によって、第2の実施の形態の処理機能を実現することができる。なお、図5には分析サーバ100のハードウェア構成を示したが、Webサーバ200,Appサーバ300、DBサーバ400、および複数の端末装置21〜23も、分析サーバ100と同様のハードウェア構成で実現することができる。なお、第1の実施の形態に示した情報処理装置1も、図5に示したコンピュータと同様のハードウェアにより実現することができる。
【0092】
図6は、第2の実施の形態に係る分析サーバの機能の一例を示すブロック図である。分析サーバ100は、キャプチャ部111、キャプチャデータ記憶部112、メッセージ解析部121、メッセージデータ記憶部122、抽象化ルール記憶部131、メッセージフロー検出部132、メッセージフロー情報記憶部133、集計部141、集計区間情報記憶部142、正規化スループット値記憶部143、飽和多重度決定部144、および分析部145を有する。
【0093】
キャプチャ部111は、スイッチ装置10を介して送受信される通信パケットをスイッチ装置10のミラーポートから受信する。キャプチャ部111は、受信した通信パケットを、キャプチャデータ記憶部112に格納する。この際、キャプチャ部111は、例えば、格納する通信パケットに対して、現在の時刻を示す情報(タイムスタンプ)を付与し、時刻情報が付与された通信パケット情報をキャプチャデータ記憶部112に格納する。
【0094】
キャプチャデータ記憶部112は、キャプチャ部111がキャプチャした通信パケットを記憶する。例えば分析サーバ100のRAM103またはHDD104の記憶領域の一部が、キャプチャデータ記憶部112として使用される。
【0095】
メッセージ解析部121は、受信したパケットを解析し、Webサーバ200、Appサーバ300、DBサーバ400および端末装置21,22,23において通信されたメッセージを再構成する。そしてメッセージ解析部121は、再構成したメッセージを、メッセージデータ記憶部122に格納する。
【0096】
メッセージデータ記憶部122は、再構成されたメッセージを記憶する。例えばRAM103またはHDD104の記憶領域の一部がメッセージデータ記憶部122として使用される。
【0097】
抽象化ルール記憶部131は、リクエストメッセージの内容を抽象化するルール(抽象化ルール)を記憶する。例えば、抽象化ルール記憶部131には、同じ種類(ジョブ種)の処理(ジョブ)を依頼するリクエストメッセージを、同じ内容に抽象化するルールが記憶される。抽象化ルールに基づいて各リクエストメッセージを抽象化することで、抽象化後の内容が共通のリクエストメッセージを、同じジョブ種に関するリクエストメッセージと判断することが可能となる。抽象化ルール記憶部131としては、例えばRAM103またはHDD104の記憶領域の一部が使用される。
【0098】
メッセージフロー検出部132は、メッセージデータ記憶部122に格納されたメッセージによって実行される処理(ジョブ)の種別を、抽象化ルール記憶部131に格納された抽象化ルールに基づいて判断する。例えばメッセージフロー検出部132は、リクエストメッセージを抽象化ルールに従って抽象化し、同じ内容に抽象化されたリクエストメッセージを、同種のジョブに関するリクエストメッセージと判断する。
【0099】
またメッセージフロー検出部132は、抽象化処理後のメッセージから、Webサーバ200、Appサーバ300、およびDBサーバ400で実行されたトランザクション(一連の処理)のメッセージを検出する。例えば、メッセージフロー検出部132は、予めトランザクションモデルを有しており、トランザクションモデルに合致するメッセージの組み合わせ(メッセージフロー)を、メッセージデータ記憶部122から抽出する。
【0100】
さらにメッセージフロー検出部132は、メッセージデータ記憶部122から抽出したメッセージフローを、メッセージフロー情報としてメッセージフロー情報記憶部133に格納する。格納されるメッセージフロー情報のリクエストメッセージには、そのリクエストメッセージに応じて実行されるジョブの種類(ジョブ種)が設定される。
【0101】
メッセージフロー情報記憶部133は、メッセージフロー情報を記憶する。例えばRAM103またはHDD104の記憶領域の一部が、メッセージフロー情報記憶部133として使用される。
【0102】
集計部141は、分析対象期間を細かい粒度(短い時間間隔)で分割し、複数の集計区間を生成する。そして、集計部141は、メッセージフロー情報記憶部133に格納された情報を、集計区間ごとに集計する。例えば、集計部141は、メッセージフロー情報記憶部133に格納された情報に基づいて、階層ごとに、分析対象の期間を細かい粒度で分割して得られる集計区間それぞれのスループットと多重度とを計算する。集計部141は、計算したスループットと多重度とを、集計区間情報記憶部142に格納する。
【0103】
集計区間情報記憶部142は、集計区間それぞれにおける、階層ごとのスループットと多重度との組を記憶する。例えばRAM103またはHDD104の記憶領域の一部が、集計区間情報記憶部142として使用される。
【0104】
正規化スループット値記憶部143は、ジョブ種ごとの、1ジョブ当たりの正規化されたスループット値を記憶する。例えばRAM103またはHDD104の記憶領域の一部が、正規化スループット値記憶部143として使用される。
【0105】
飽和多重度決定部144は、飽和多重度を決定する。飽和多重度は、多重度の増加に伴ってスループットが増加する範囲と、多重度が増加しているのにスループットが増加しないか、微少な増加しかしない範囲との境界の多重度である。すなわち、それ以上多重度を上げてもスループットの十分な上昇が見込めない多重度が、飽和多重度である。
【0106】
分析部145は、多階層システムに含まれるサーバのうち、処理のボトルネックとなっているサーバを判定する。例えば分析部145は、飽和多重度よりも多重度が多い期間の割合が、所定値を超えた階層のサーバについて、ボトルネックになっていると判断する。そして、分析部145は判断結果を出力する。例えば分析部145は、ボトルネックとなっているサーバを示すメッセージをモニタ11に表示する。
【0107】
なお、図6に示した各機能間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。
また、図6のキャプチャ部111、キャプチャデータ記憶部112、メッセージ解析部121、メッセージデータ記憶部122、抽象化ルール記憶部131、およびメッセージフロー検出部132は、図1に示した監視手段1aを実現する機能の一例である。図6のメッセージフロー情報記憶部133は、図1に示した記憶手段1bの一例である。図6の集計部141は、図1に示した計算手段1cの一例である。図6の飽和多重度決定部144は、図1の決定手段1dの一例である。図6の分析部145は、図1の検出手段1eの一例である。
【0108】
次に、図6に示した各機能が行う処理について、詳細に説明する。
まず、キャプチャ部111が実行するパケットのキャプチャ処理について説明する。
図7は、キャプチャ処理の手順の一例を示すフローチャートである。なお図7では、UML(Unified Modeling Language)のアクティビティ図で用いられる同期バー31,32を用いて、並列処理を表している。同期バー31は、特にフォークと呼ばれ、1つの処理が2つ以上の並列処理に分割されることを示す。同期バー32は、特にジョインと呼ばれ、2つ以上の処理の流れを1つに統合することを示す。
【0109】
以下、図7に示す処理をステップ番号に沿って説明する。
[ステップS101]キャプチャ部111は、スイッチ装置10のミラーポートから出力されたIPパケットをキャプチャする。キャプチャ部111は、例えばキャプチャしたIPパケットを、一時的にRAM103に格納する。この際、キャプチャ部111は、受信したIPパケットに受信時刻を付与する。
【0110】
[ステップS102]キャプチャ部111は、キャプチャの開始、またはキャプチャデータの前回のファイル出力から、所定のファイル出力周期が経過したか否かを判断する。ファイル出力周期は、例えば180秒といった値が予めキャプチャ部111に設定されている。キャプチャ部111は、ファイル出力周期が経過した場合、処理をステップS103に進める。またキャプチャ部111は、ファイル出力周期が経過していなければ、処理をステップS101に進め、IPパケットのキャプチャを継続する。
【0111】
[ステップS103]キャプチャ部111は、RAM103などに一時的に保管してあるキャプチャデータを、ファイル112aに出力する。例えばキャプチャ部111は、新規のファイルを作成し、作成したファイル112aにキャプチャデータを出力する。そしてキャプチャ部111は、キャプチャデータを含むファイルをキャプチャデータ記憶部112に格納する。
【0112】
[ステップS104]キャプチャ部111は、停止コマンドが入力されたか否かを判断する。停止コマンドは、例えば管理者が、キーボード12やマウス13を操作して分析サーバ100に入力する。キャプチャ部111は、停止コマンドが入力された場合、キャプチャ処理を終了する。またキャプチャ部111は、停止コマンドが入力されていなければ、処理をステップS101に進める。
【0113】
このようにして、ファイル出力周期ごとにキャプチャしたデータを含むファイル112aが生成され、順次キャプチャデータ記憶部112に格納される。
[ステップS105]メッセージ解析部121は、キャプチャデータ記憶部112から、性能分析処理を行っていない、未処理のファイル112aがあるか否かを判断する。未処理のファイルは、キャプチャ部111により、ファイル出力周期で定期的にキャプチャデータ記憶部112に順次格納されている。従って、メッセージ解析部121は、ファイル出力周期で、未処理のファイルを検出できる。
【0114】
[ステップS106]メッセージ解析部121は、キャプチャデータ記憶部112内の未処理のファイル112aからキャプチャデータを読み込む。
[ステップS107]分析サーバ100内の各機能が連携して性能分析を行う。この処理の詳細は後述する。
【0115】
[ステップS108]メッセージ解析部121は、停止コマンドが入力されたか否かを判断する。停止コマンドは、例えば管理者が、キーボード12やマウス13を操作して分析サーバ100に入力する。メッセージ解析部121は、停止コマンドが入力された場合、分析処理を終了する。またメッセージ解析部121は、停止コマンドが入力されていなければ、処理をステップS105に進める。
【0116】
このように、キャプチャされたデータは、一定時間分(例えば180秒間)だけ貯められて、一定時間間隔で、その一定時間分のデータを使用して性能分析処理が行われる。このとき、データの収集処理(ステップS101〜S104)と性能分析処理(ステップS107)は切り離して非同期で行ってもよい。ただし、ボトルネック発生をリアルタイムに監視するためには、図7に示すようにデータの収集処理(ステップS101〜S104)と性能分析処理(ステップS107)を同期して動作させ、収集されたデータをすぐに処理するのが理想的である。
【0117】
図8は、キャプチャデータ記憶部のデータ構造の一例を示す図である。キャプチャデータ記憶部112には、複数のファイル112a,112b,112c,・・・が格納されている。
【0118】
ファイル112aには、複数のIPパケット112d−1〜112d−7が含まれている。またIPパケット112d−1〜112d−7それぞれには、受信時刻112e−1〜112e−7が付与されている。他のファイル112b,112c,・・・も、ファイル112aと同様に、受信時刻が付与されたIPパケットを含んでいる。
【0119】
次に、性能分析処理について詳細に説明する。
図9は、性能分析処理の手順を示すフローチャートである。以下、図9に示す処理をステップ番号に沿って説明する。
【0120】
[ステップS111]メッセージ解析部121は、取得したファイルに含まれるIPパケットに基づいて、メッセージを再構築する。メッセージ解析部121は、再構築したメッセージを、メッセージデータ記憶部122に時系列に格納する。
【0121】
[ステップS112]メッセージフロー検出部132は、メッセージデータ記憶部122に格納されたメッセージから、一つの業務処理リクエストに応じて多階層システム内で発行された一連のメッセージ送受関係を示すメッセージフローを検出する。
【0122】
第2の実施の形態では、メッセージは階層ごとに異なるプロトコルが使われている。端末装置21〜23からの一つのリクエストに関連して、多階層システム内の各階層で発行される異なるプロトコルのメッセージ間には、それらを関連付けるための情報が含まれていない場合が多い。そこで第2の実施の形態では、これらの異なるプロトコル間のメッセージを、既知のモデルと照合することで関連付ける。例えばメッセージフロー検出部132は、予め用意されたメッセージフローのモデルと、メッセージデータ記憶部122に格納されたメッセージとを比較し、モデルに合致するメッセージの組み合わせを作成する。そしてメッセージフロー検出部132は、作成されたメッセージの組み合わせをメッセージフローとする。
【0123】
[ステップS113]メッセージフロー検出部132は、検出したメッセージフローに含まれるリクエストメッセージに応じて、各階層のサーバで実行される処理のジョブ種を判定する。例えばメッセージフロー検出部132は、抽象化ルール記憶部131に格納されている抽象化ルールに従って、リクエストメッセージを抽象化する。そしてメッセージフロー検出部132は、抽象化後の内容が同じリクエストメッセージ同士をまとめて、1つのジョブ種とする。検出されたジョブ種には、識別名(ジョブ種名)が付与される。
【0124】
そしてメッセージフロー検出部132は、リクエストメッセージにジョブ種名が付与されたメッセージフローを、メッセージフロー情報記憶部133に格納する。
[ステップS114]飽和多重度決定部144は、未処理の階層を選択する。例えば飽和多重度決定部144には、多階層システムを構成する各階層のサーバに入力するリクエストメッセージのプロトコル名が予め設定されている。Web3階層であれば、例えばプロトコル名「HTTP」、「IIOP」、「DB」の各プロトコル名が飽和多重度決定部144に設定されている。飽和多重度決定部144は、設定されているプロトコル名に対応する階層を順に選択する。
【0125】
[ステップS115]飽和多重度決定部144と分析部145とが連携し、選択したプロトコル名に対応する階層の性能分析処理を行う。この処理の詳細は後述する(図16参照)。
【0126】
[ステップS116]飽和多重度決定部144は、全ての階層について階層別の性能分析処理を実行したか否かを判断する。例えば飽和多重度決定部144は、予め設定されているプロトコル名で示される全ての階層が選択済みであれば、未処理の階層なしと判断する。未処理の階層がある場合、飽和多重度決定部144は、処理をステップS114に進める。未処理の階層がなければ、飽和多重度決定部144は、性能分析処理を終了する。
【0127】
このように、性能分析処理では、まずメッセージが再構築され、メッセージデータ記憶部122に格納される。
図10は、メッセージデータ記憶部のデータ構造の一例を示す図である。メッセージデータ記憶部122には、復元された複数のメッセージが、時系列に格納されている。このように時系列に並べられたメッセージが、時系列データである。図10では、各メッセージの左に、メッセージデータ記憶部122内での行番号を示している。なお、メッセージデータ記憶部122には、各階層間の処理要求および応答に関連するメッセージ以外のメッセージに関しては図示を省略している。
【0128】
各行に示されるメッセージには、日付フィールド122a、時刻フィールド122b、セッション番号フィールド122c、送信元アドレスフィールド122d、送信先アドレスフィールド122e、コマンド種別フィールド122fおよびメッセージフィールド122gが含まれる。
【0129】
日付フィールド122aは、メッセージをキャプチャした日付を示すフィールドである。
時刻フィールド122bは、メッセージをキャプチャした時刻を示すフィールドである。
【0130】
セッション番号フィールド122cは、業務システムにおけるメッセージの送受信に用いるリソースを管理するためのセッション番号を示すフィールドである。
送信元アドレスフィールド122dは、メッセージの送信元のコンピュータのIPアドレスおよびポート番号を示すフィールドである。
【0131】
送信先アドレスフィールド122eは、メッセージの送信先のコンピュータのIPアドレスおよびポート番号を示すフィールドである。
コマンド種別フィールド122fは、コマンドのリクエスト/レスポンス属性やプロトコル(HTTP、IIOPおよびDBクエリ用等)の種別を示すフィールドである。
【0132】
メッセージフィールド122gは、コマンド種別フィールド122fに示されたリクエスト等のメッセージ内容を示すフィールドである。
このようなメッセージデータ記憶部122内のメッセージを参照することで、何れのサーバに対して、どのようなメッセージが送信されたかを検出することができる。
【0133】
ここで、メッセージデータ記憶部122内のメッセージ中のその他のIPアドレスと各装置との対応関係は次の通りである。
“194.23.5.226”は、Webサーバ200のIPアドレスを示す。“194.23.7.168”は、Appサーバ300のIPアドレスを示す。“194.23.8.198”は、DBサーバのIPアドレスを示す。“194.185.39.24”は、端末装置22のIPアドレスを示す。
【0134】
なお、日付フィールド122aおよび時刻フィールド122bの情報として、メッセージ解析部110が通信パケットをキャプチャしたタイミングにおけるタイムスタンプを設定するものとしたが、設定方法はこれに限らない。例えば、通信パケット中に各サーバにおけるパケットの生成時刻や送信時刻の情報が含まれている場合には、その日時を日付フィールド122aおよび時刻フィールド122bの情報としてもよい。その場合、各サーバで精度良く時刻同期が行われていることが望ましい。
【0135】
メッセージが再構築されると、メッセージフロー検出部132は、検出されたメッセージフロー内のリクエストメッセージに関し、そのリクエストメッセージによって実行されるジョブのジョブ種を識別する。ここでいうジョブ種は、同様の処理内容のリクエストをグループ化したものである。メッセージフロー検出部132は、ジョブ種を識別する場合、抽象化ルール記憶部131に設定された抽象化ルールに基づいて、リクエストメッセージを抽象化する。
【0136】
図11は、抽象化ルール記憶部のデータ構造の一例を示す図である。抽象化ルール記憶部131には、プロトコルごとの抽象化ルールが格納されている。
例えばプロトコルがHTTPのメッセージの場合は、メッセージフロー検出部132は、コマンド名と、URL内のローカルアドレス部分に、残すべきと指定されたCGI(Common Gateway Interface)パラメータを連結したもので、ジョブ種を区別する。コマンド名は、GETやPOST等である。URL内のローカルアドレス部分は、URLから“プロトコル名://ホスト名:ポート番号”の部分を削除したものである。そしてHTTP用の抽象化ルール131aには、残すべきCGIパラメータが定義されている。例えば、図11の例では、「type」、「comment_table」の各パラメータを残し、他のパラメータは削除することが示されている。
【0137】
またDBプロトコルのメッセージの場合は、メッセージフロー検出部132は、使用するDBプロトコル固有のコマンド名とSQL文とを、正規表現で記述したルールで置換する。そしてメッセージフロー検出部132は、置換によって抽象化されたメッセージによりジョブ種を区別する。DBプロトコル用の抽象化ルール131bには、正規表現を用いた置換規則が定義されている。図11の例では、Perlと同じ記法による置換規則が定義されている。例えば1行目の置換規則「s/INSERT INTO ([^ \(]+).*/INSERT INTO $1 VALUES (..)/」の先頭の「s」は、置換処理であることを示している。最初の「/」と2つめの「/」で囲われた文字列「INSERT INTO ([^ \(]+).*」が、置換元の文字列である。また2つめの「/」と3つめの「/」で囲われた文字列「INSERT INTO $1 VALUES (..)」が、置換後の文字列である。置換元の文字列の「(」と「)」とで囲われた文字列は、変数として記憶される。1行目の置換規則の「(」、「)」で囲われた文字列「[^ \(]+」は、「(」以外の文字の1回以上の繰り返しが、正規表現で示されている。「(」と「)」とで囲われた文字列は、左から順に記憶される。n番目に記憶された文字列には、「$n」(nは、1以上の整数)という変数名が与えられる。変数に記憶された文字列は、置換後の文字列内に、変数名で指定された位置に挿入される。
【0138】
このような抽象化ルールに従ってリクエストメッセージが抽象化される。そして、抽象化された後の内容が同じリクエストメッセージ同士が、同じジョブ種となる。
図12は、HTTPのプロトコルのジョブ種の例を示す図である。図12の例では、HTTPのプロトコルに関するジョブ種名に対応付けて、コマンド名と、抽象化されたジョブ内容とが示されている。例えば、ジョブ種名「W1」のジョブ種は、コマンド名「GET」であり、ジョブ内容が「/RUBBOS/SERVLET/EDU.RICE.RUBBOS.SERVLETS.STORIESOFTHEDAY」である。
【0139】
図13は、DBのプロトコルのジョブ種の例を示す図である。図13の例では、DBのプロトコルに関するジョブ種名に対応付けて、コマンド名と、抽象化されたジョブ内容とが示されている。例えば、ジョブ種名「D1」のジョブ種は、コマンド名「EXECREADREQ」であり、ジョブ内容が「SELECT .. FROM STORIES, USERS WHERE ..」である。
【0140】
メッセージの抽象化が終了すると、メッセージフロー検出部132によりメッセージ同士の関連付けが行われ、関連付けられたメッセージを時系列に並べたメッセージフローが検出される。メッセージフローは、各階層のプロトコル間のメッセージにおいて、同一のトランザクションによって発行された関連するメッセージ同士を紐付けたものである。例えば上位層のプロトコルによって、その下の階層のサーバに送られたメッセージと、その処理に伴って生成された下位層のプロトコルのメッセージとの間が紐付けされる。このようなメッセージ間の紐付けを全ての階層のプロトコル間で行うことによって、最上位層から最下位層までの間で、一連のトランザクションを構成する全てのメッセージ送受の関係が再現される。このようなメッセージフローの検出方法として、例えば特開2006−011683号公報に記載の方法を利用することができる。
【0141】
図14は、ジョブ種が識別されたメッセージフローの一例を示す図である。なお図14では、各サーバがジョブに関する処理を実行している期間を実線で示し、ジョブに関する処理を実行していない期間を破線で示している。サーバがジョブに関する処理を実行していない期間とは、例えば、下位層のサーバにリクエストメッセージを送信し、そのリクエストメッセージに対するレスポンスメッセージを待っている期間である。
【0142】
図14の例では、Webサーバ200では、HTTPリクエストメッセージ41に応じて、ジョブ種「W1」のジョブ61が実行されている。Webサーバ200は、ジョブ種「W1」のジョブ61の実行途中で、Appサーバ300に対してIIOPリクエストメッセージ42を送信している。
【0143】
Appサーバ300では、IIOPリクエストメッセージ42に応じて、ジョブ種「A1」のジョブ62が実行されている。Appサーバ300は、ジョブ種「A1」のジョブ62の実行途中で、DBサーバ400に対してDBリクエストメッセージ43を送信している。
【0144】
DBサーバ400では、DBリクエストメッセージ43に応じて、ジョブ種「D1」のジョブ63が実行されている。DBサーバ400は、ジョブ種「D1」のジョブ63の実行が終了すると、Appサーバ300に対してDBレスポンスメッセージ44を送信している。
【0145】
以後、Appサーバ300からDBサーバ400へのDBリクエストメッセージ45,47,49の送信と、DBサーバ400からAppサーバ300へのレスポンスメッセージ46,48,50とが繰り返し行われる。DBサーバ400では、DBリクエストメッセージ45,47,49に応じたジョブ64〜66が実行されている。
【0146】
Appサーバ300では、DBレスポンスメッセージ50に応じて、ジョブ種「A1」のジョブ62の実行が再開されている。Appサーバ300は、ジョブ種「A1」のジョブ61の処理が終了すると、Webサーバ200に対してIIOPレスポンスメッセージ51を送信している。Webサーバ200では、IIOPレスポンスメッセージ51に応じて、ジョブ種「W1」のジョブ61の実行が再開されている。Webサーバ200は、ジョブ種「W1」のジョブ61の処理が終了すると、HTTPリクエストメッセージ41を送信した端末装置に対してHTTPレスポンスメッセージ52を送信している。
【0147】
メッセージフロー検出部132は、ジョブ種を識別したメッセージフローに関するメッセージフロー情報を、メッセージフロー情報記憶部133に格納する。
図15は、メッセージフロー情報記憶部のデータ構造の一例を示す図である。メッセージフロー情報記憶部133には、トランザクションごとのメッセージフロー情報133a,133b,133c,・・・が格納されている。
【0148】
メッセージフロー情報133aには、項番を示す項目、時刻を示す項目、セッション番号を示す項目、プロトコルを示す項目、Request/Responseを示す項目、およびジョブ種を示す項目が設けられている。各項目の横方向に並べられた情報同士が互いに関連付けられて、1つのメッセージに関する情報を示す。
【0149】
項番を示す項目には、レコードを識別する番号が設定される。時刻を示す項目には、メッセージに対応する通信パケットをキャプチャした時刻が設定される。セッション番号を示す項目には、メッセージを送信するために用いられたセッションを識別するセッション番号が設定される。プロトコルを示す項目には、メッセージが何れのプロトコルによるものかを示す情報が設定される。Request/Responseを示す項目には、そのメッセージがリクエスト/レスポンスの何れのものであるかを示す情報が設定される。ジョブ種を示す項目には、リクエストメッセージで要求している処理のジョブ種の名称(ジョブ種名)が設定される。 メッセージフロー情報133aには、例えば、項番が“1”、時刻が“01:58:19.987”、セッション番号が“152290”、プロトコルが“HTTP”、Request/Responseが“Request”、ジョブ種“W1”という情報が設定される。
【0150】
図15の例では、時刻には、ミリ秒までの時間単位で設定している。この点、さらに短い時間単位(例えば、マイクロ秒単位)で時刻を取得してもよい。また、セッション番号には図10に示したセッション番号フィールド122cに含まれる情報のうち、リクエスト/レスポンスの組を特定するために必要な最低限の情報を設定している。以下、セッション番号という場合、メッセージフロー情報133aのセッション番号を示す項目に設定された情報を示すものとする。
【0151】
メッセージフロー情報には、各メッセージの通信時刻が設定されている。すなわち、キャプチャしたパケットに基づいて、メッセージフローを構成する各メッセージの通信時刻が測定されている。また、ある階層へ処理要求のメッセージが到着して、その処理に関連して下位層へ処理を要求するメッセージが送信された場合に、それらの間の関連付けは、メッセージフロー内の連続するメッセージに基づいて判断できる。すなわち、プロトコル「IIOP」のリクエストメッセージの後に、プロトコル「DB」のリクエストメッセージがあれば、「IIOP」のリクエストメッセージに関連して「DB」のリクエストメッセージが出力されたことが分かる。また、上位層のリクエストメッセージからレスポンスメッセージまでの時間帯内の下位層の各リクエストメッセージは、その上位層のリクエストメッセージに応じて実行された処理に関連して実行されていることが分かる。
【0152】
このように第2の実施の形態では、ネットワーク上を流れるIPパケットをキャプチャして、そこからメッセージ送受の情報を取得することで、一連の処理を示すメッセージフロー情報を生成している。この方法の利点としては、観測対象のシステムに余計な負荷を与えないので正確な挙動を観測できるということがある。また、1か所のサーバでキャプチャしてその際にタイムスタンプを付与できるのでサーバ間の時計誤差を気にしなくてよいという利点もある。
【0153】
なお第2の実施の形態では、各メッセージ上にそれらを関連付ける情報が付加されてない場合を想定している。そのため、メッセージフロー検出部130によるトランザクションモデルとの適合の有無の判定などが行われている。他方、各メッセージ上にそれらを関連付ける情報が付加されている場合もあり得る。例えば、最上位のサーバ(Webサーバ200)に入力されたリクエストメッセージに応じて実行されるトランザクションの識別情報が、そのトランザクションで通信される各メッセージに付与しているような場合である。このような場合、メッセージフロー検出部130は、同一の識別情報が付与されたメッセージを抽出して、メッセージフローを生成することができる。
【0154】
なお、第2の実施の形態では、特開2006−011683号公報に記載の方法を利用してメッセージフロー情報を作成しているが、メッセージフロー情報の作成手法は特開2006−011683号公報に記載の方法に限定されるものではない。すなわち、個々の業務処理に関する複数階層間を跨った一連のメッセージフローを測定し、その中での各メッセージの正確な送受時刻を取得する手法は何通りか考えられる。
【0155】
他の方法としては、例えば、Web3階層システムを構成する各Webサーバ200、Appサーバ300、およびDBサーバ400でファイルなどに記録したメッセージ送信/受信ログを利用する方法がある。この方法を適用する場合、Webサーバ200、Appサーバ300、およびDBサーバ400が、受信メッセージとその処理に関連した送信メッセージの関連付けを行い、ログ情報としてHDDなどの記録装置に記録する。分析サーバ100は、Webサーバ200、Appサーバ300、およびDBサーバ400から、記録した情報を取得する。この手法では、Webサーバ200、Appサーバ300、およびDBサーバ400が、受信したリクエストメッセージと、そのリクエストメッセージに応じた処理により下位の層のサーバへ出力したリクエストメッセージとを関連付けている。そのため、分析サーバ100では、1つのトランザクションを構成する上位層のメッセージと下位層のメッセージとを容易に関連付けることができ、メッセージフローの作成が容易となる。ただし、この方法を適用する場合、Webサーバ200、Appサーバ300、およびDBサーバ400各サーバの内部時計を、正確に同期させておくことが好ましい。
【0156】
メッセージデータ記憶部122に格納されたメッセージから検出可能な全てのメッセージフローがメッセージフロー情報記憶部133に格納された後、Web三階層システムの階層ごとの性能分析が行われる。
【0157】
図16は、階層別性能分析処理の手順の一例を示すフローチャートである。以下、図16に示す処理をステップ番号に沿って説明する。
[ステップS121]集計部141は、分析対象期間を、十分に細かい粒度で分割する。分析対象期間は、キャプチャデータ記憶部112内の現在処理対象となっている時系列データの生成元となったIPパケットの採取期間である。また分析対象期間を分割することで生成された複数の期間を、集計区間とする。飽和多重度決定部144は、例えば、個々の集計区間の期間を示す情報を、集計区間情報記憶部142に格納する。
【0158】
[ステップS122]集計部141は、各集計区間のスループットと多重度とを算出する。この処理の詳細は後述する(図21参照)。
[ステップS123]飽和多重度決定部144は、飽和多重度を算出する。この処理の詳細は後述する(図27参照)。
【0159】
[ステップS124]分析部145は、性能分析対象となっている階層がボトルネックとなっているか否かを判定する。この処理の詳細は後述する(図28参照)。その後、階層別性能分析処理が終了する。
【0160】
次に、図16に示す各ステップの処理を詳細に説明する。
<集計区間への分割>
分析対象期間の集計区間への分割処理について説明する。集計部141は、分析対象期間を、十分に細かい粒度の集計区間に分割する。
【0161】
なお、第2の実施の形態の手法を実施する場合、細分化した一つの集計区間の長さは十分に短くするのが適切である。なぜならば、多重度はジョブの平均処理時間に近い極短時間で大きく変化する。また、一般的に多重度とスループットの関係は図17のような関係となる。
【0162】
図17は、多重度とスループットとの関係を示す図である。図17では、細粒度で集計区間を分割した場合の、各集計区間の多重度とスループットとを表Aに示している。また各集計区間の多重度とスループットとの関係をグラフBに示している。
【0163】
図17に示すように、集計区間の長さを十分に細かくすると、集計区間それぞれの多重度は、大きく異なる。もし集計区間を長くして、例えば図17の「集計区間1」から「集計区間8」までを1つの集計区間にまとめると、まとめられた集計区間の多重度は、もとの集計区間の多重度の平均となる。集計区間ごとのばらつきが大きい多重度を平均化した結果として、多重度とスループットとの関係を不正確に捉えてしまう結果となる。このことを避けるために、この細分化された集計区間の長さは、集計区間内での多重度変化が小さくなるように、ジョブの平均処理時間に応じて、短く設定する。例えば、集計区間の長さは「100ms」とする。
【0164】
図18は、集計区間への分割例を示す図である。図18の例では、100msの集計区間長で、分析対象期間が分割されている。なお第2の実施の形態では、集計区間長は、例えば、予め集計部141に設定されている。
【0165】
図18に示すように、分析対象期間の分割に伴い、各ジョブの実行期間は、いずれかの集計区間に振り分けられる。これにより、集計区間ごとに、非常に短い時系列データが構成される。
【0166】
図19は、実行期間の集計区間への振り分け例を示す図である。Webサーバ200で実行されたジョブ61は、2回の実行期間61a,61bにおいて、処理が実行されている。1回目の実行期間61aは、「集計区間1」の時間帯に含まれているため、「集計区間1」に振り分けられる。また実行期間61bは、「集計区間2」の時間帯に含まれているため、「集計区間2」に振り分けられる。
【0167】
Appサーバ300で実行されたジョブ62は、5回の実行期間62a,62b,62c,62d,62eにおいて、処理が実行されている。1回目と2回目との実行期間62a,62bは、「集計区間1」の時間帯に含まれているため、「集計区間1」に振り分けられる。3回目〜5回目の実行期間62c,62d,62eは、「集計区間2」の時間帯に含まれているため、「集計区間2」に振り分けられる。
【0168】
DBサーバ400で実行されたジョブ63〜66は、各ジョブが1回ずつの実行期間で実行されている。ジョブ63は、「集計区間1」の時間帯に実行されているため、「集計区間1」に振り分けられる。ジョブ65,66は、「集計区間2」の時間帯に実行されているため、「集計区間2」に振り分けられる。
【0169】
ジョブ64は、「集計区間1」と「集計区間2」とに跨って実行されている。このように、実行期間が複数の集計区間を跨り、複数の集計区間に属する実行期間も存在する。この場合、複数の集計区間に属する実行期間が、各集計区間に属する期間ごとに分割される。例えばジョブ64の全体の実行期間は、「集計区間1」に属する実行期間64aと「集計区間2」に属する実行期間64bとに分割される。そして分割後の各実行期間64a,64bが、各集計区間に振り分けられる。
【0170】
なお図18、図19には、1つの業務処理に応じて行われた一連の処理について示しているが、複数の業務処理が、各階層のサーバにおいて並列で実行される場合もある。
図20は、並列で処理が実行される状況を示す図である。図20の例では、「集計区間1」と「集計区間2」との間に、3つの業務処理が並列で実行されている。ジョブ61〜66によって1つの業務処理が実行され、ジョブ71〜75によって1つの業務処理が実行され、ジョブ81〜83によって1つの業務処理が実行されている。なお、図20において、各ジョブを示す矩形内の文字は、各ジョブのジョブ種を示している。
【0171】
このように複数の業務処理が並列で実行される場合も、図19に示したように、各ジョブの実行期間が、その実行期間を包含する集計区間に振り分けられる。
次にスループットと多重度との算出処理について詳細に説明する。
【0172】
図21は、スループット・多重度算出処理の手順の一例を示すフローチャートである。以下、図21に示す処理をステップ番号に沿って説明する。
[ステップS131]集計部141は、未処理の集計区間を1つ選択する。例えば集計部141は、集計区間情報記憶部142に設定されている集計区間を、先頭のエントリから順に選択する。
【0173】
[ステップS132]集計部141は、選択した集計区間のスループットを計算する。例えば集計部141は、ジョブ種ごとの1ジョブ当たりの正規化したスループット値により、各ジョブに重み付けを行うことで、処理負荷の異なる複数のジョブを処理する場合のスループット算出の正確性を向上させる。集計部141は、計算したスループットを、例えば集計区間情報記憶部142に格納する。
【0174】
[ステップS133]集計部141は、選択した集計区間の多重度を計算する。例えば集計部141は、処理中の階層のサーバで選択した集計区間内に存在しているジョブの、集計区間内での処理時間の合計を求める。そして集計部141は、求めた合計を集計区間長で除算し、除算結果を集計区間の多重度とする。この多重度は、集計区間内の平均的な多重度を表している。集計部141は、計算した多重度を、例えば集計区間情報記憶部142に格納する。
【0175】
[ステップS134]集計部141は、未処理の集計区間があるか否かを判断する。例えば集計部141は、集計区間情報記憶部142に設定されている集計区間の最後のエントリの処理が終了した場合、未処理の集計区間はないと判断する。未処理の集計区間がある場合、集計部141は、処理をステップS131に進める。未処理の集計区間がなければ、集計部141は、スループット・多重度算出処理を終了する。
【0176】
図22は、集計区間情報記憶部のデータ構造の一例を示す図である。集計区間情報記憶部142には、階層ごとの集計区間管理テーブル142a,142b,142cが格納されている。例えば集計区間管理テーブル142aは、DBサーバ400の階層に対応する。
【0177】
集計区間管理テーブル142aには、集計区間、期間、スループット、および多重度の欄が設けられている。集計区間の欄には、集計区間の名称が設定される。期間の欄には、集計区間の期間が設定される。スループットの欄には、集計区間のスループットが設定される。多重度の欄には、集計区間の多重度が設定される。
【0178】
<スループット・多重度計算>
次に、スループットの計算と多重度の計算とについて、詳細に説明する。
<<スループット計算>>
まず、スループット計算処理について詳細に説明する。飽和多重度決定部144は、集計区間ごとに、その集計区間に属するジョブの処理時間に基づいて、スループットを計算する。この際、飽和多重度決定部144は、ジョブ種間の差異を考慮した重み付けを行って、正規化したスループットを計算する。
【0179】
ここで、スループットの正規化の有用性について説明する。第2の実施の形態では、分析対象期間を短い集計区間に細分化する。ここで、正規化を行わずに多重度とスループットの関係を求めようとすると、下記の2つの要素が両者の関係における揺らぎとなって、関連性を失わせる可能性がある。すると、多重度とスループットとの関連性を用いたボトルネック判定の信頼性が低下してしまう。
1.異種ジョブ間でのハードウェア資源消費量の差異
2.同種ジョブの個々のジョブ間でのハードウェア資源消費量の差異
特に1.は差異の絶対量が大きく、また、短い時間区間に区切ると、各区間同士の間でジョブ種の混合割合が偏るので、結果として大きな影響を及ぼすことになる。一方、2.の方は、同種ジョブということで、ある程度は平均化した分布(正規分布など)となることが期待できる。
【0180】
そこで、第2の実施の形態では、低負荷時に測定したジョブ種ごとの平均処理時間を利用して、異種ジョブ間でのハードウェア資源消費量の差異を正規化することによって、1.の問題を解決した正確なスループットを得る。ジョブ種間の差異を考慮した重みの判断指標となる情報は、予め正規化スループット値記憶部143に格納されている。
【0181】
図23は、正規化スループット値記憶部のデータ構造の一例を示す図である。正規化スループット値記憶部143には、正規化スループット値テーブル143aが格納されている。正規化スループット値テーブル143aには、ジョブ種、低負荷時の平均処理時間、および正規化されたスループット値の欄が設けられている。
【0182】
ジョブ種の欄には、Web三階層システムのいずれかのサーバで実行されるジョブのジョブ種名が設定される。
低負荷時の平均処理時間の欄には、対応するジョブ種のジョブを、サーバが低負荷時に実行した場合の平均処理時間が設定される。図23の例では、低負荷時の平均処理時間の欄に、「ms」単位の数値が設定されている。低負荷時の平均処理時間は、例えば、システムの管理者が、予めWeb三階層システムの負荷が少ない状態で計測し、正規化スループット値テーブル143aに設定する。
【0183】
正規化されたスループット値の欄には、各ジョブ種の1ジョブ当たりの正規化されたスループット値が設定される。例えば階層ごとに、代表ジョブ種が1つずつ選択される。図23の例では、Webサーバ200で実行されるジョブ種に関しては、ジョブ種名「W1」のジョブ種が、代表ジョブ種である。Appサーバ300で実行されるジョブ種に関しては、ジョブ種名「A1」のジョブ種が、代表ジョブ種である。DBサーバ400で実行されるジョブ種に関しては、ジョブ種名「D1」のジョブ種が、代表ジョブ種である。各階層の代表ジョブ種に関しては、1ジョブ当たりの正規化されたスループット値は「1.00」である。
【0184】
代表ジョブ種以外のジョブ種に関しては、同じ階層の代表ジョブ種と比較し場合に、低負荷時の平均処理時間が何倍となるかを示す数値が、そのジョブ種の1ジョブ当たりの正規化されたスループット値となる。例えばジョブ種名「W2」のジョブ種は、低負荷時の平均処理時間が、代表ジョブ種(ジョブ種名「W1」)の平均処理時間の0.604倍(13.4ms/22.2ms)である。従って、ジョブ種名「W2」のジョブ種の1ジョブ当たりの正規化されたスループット値は、「0.604」となる。
【0185】
このような1ジョブ当たりの正規化されたスループット値を用いて、集計部141は、細分化した各集計区間について、その集計区間内の平均スループットを計算する。すなわち集計部141は、低負荷時に収集したジョブ種ごとの平均処理時間を利用して、スループットの重み付けを行う。例えば集計部141は、各ジョブの処理(要求を受けてから返信を返すまで)に関し、スループットの基準スコアを「1」とする。そして集計部141は、基準スコアに、低負荷時のジョブ種別ごとの平均処理時間を元に計算された1ジョブ当たりの正規化されたスループット値による重み付けを行い、ジョブごとの1ジョブ当たりのスコアを求める。さらに集計部141は、ジョブ全体の実行期間のうち、各集計区間に属している割合に応じた比率で、1つのジョブのスコアを、そのジョブの実行期間が属する集計区間に分配する。そして集計部141は、分配したスコアを、各集計区間のスループットに加算する。
【0186】
以下、図19に示した集計区間のスループット計算例を示す。なお図19に示したように、各階層のジョブ61〜66のうち、各階層のサーバで処理を行っている期間のみが実行期間となり、他の階層へリクエストメッセージを送信してからレスポンスメッセージを待っている期間は、実行期間から除外される。
【0187】
まずWebサーバ200の階層におけるスループットの計算例を示す。図19の例では、ジョブ61の2つの実行期間61a,61bのうち、1回目の実行期間61aのみが「集計区間1」に含まれ、2回目の実行期間は「集計区間2」に含まれる。実行期間61aの長さ(処理時間)は「14ms」であり、実行期間61bの長さ(処理時間)は「11ms」である。するとジョブ61の合計の処理時間は「25ms」である。またジョブ61のジョブ種は「W1」であり、正規化スループット値テーブル143a(図23参照)では、1ジョブ当たりの正規化されたスループット値は「1.00」である。正規化されたスループット値で示されるスコア「1.00」が、「集計区間1」と「集計区間2」とに含まれる処理時間比率で分配される。すると「集計区間1」のスコアが「0.56」(=1.00×14/25)、「集計区間2」のスコアが「0.44」(=1.00×11/25)となる。得られたスコアが、Webサーバ200の階層における各集計区間のスループットに加算される。
【0188】
次にAppサーバ300の階層におけるスループットの計算例を示す。図19の例では、ジョブ62の5つの実行期間62a,62b,62c,62d,62eのうち、2つの実行期間62a,62bが「集計区間1」に含まれ、3つの実行期間62c,62d,62eが「集計区間2」に含まれる。実行期間62aの長さは「19ms」、実行期間62bの長さは「9ms」、実行期間62cの長さ(処理時間)は「10ms」、実行期間62dの長さは「12ms」、実行期間61eの長さは「21ms」である。するとジョブ62の合計の処理時間は「71ms」である。またジョブ62のジョブ種は「A1」であり、正規化スループット値テーブル143a(図23参照)では、1ジョブ当たりの正規化されたスループット値は「1.00」である。正規化されたスループット値で示されるスコア「1.00」が「集計区間1」と「集計区間2」とに含まれる処理時間比率で分配される。すると「集計区間1」のスコアが「0.394」(=1.00×(19+9)/71)、「集計区間2」のスコアが「0.606」(=1.00×(10+12+21)/71)となる。得られたスコアが、Appサーバ300の階層における各集計区間のスループットに加算される。
【0189】
次にDBサーバ400の階層におけるスループットの計算例を示す。図19の例では、ジョブ63の実行期間は、全体が「集計区間1」に含まれ、処理時間は「9ms」である。またジョブ63のジョブ種は「D1」であり、正規化スループット値テーブル143a(図23参照)では、1ジョブ当たりの正規化されたスループット値は「1.00」である。そこで、正規化されたスループット値で示されるスコア「1.00」が、DBサーバ400の階層における「集計区間1」のスループットに加算される。
【0190】
ジョブ64の実行期間は、図19の例では、前半の実行期間64aが「集計区間1」に含まれ、後半の実行期間64bは「集計区間2」に含まれる。実行期間64aの長さ(処理時間)は「10ms」であり、実行期間64bの長さは「24ms」である。するとジョブ64の合計の処理時間は「34ms」である。またジョブ64のジョブ種は「D2」であり、正規化スループット値テーブル143a(図23参照)では、1ジョブ当たりの正規化されたスループット値は「3.72」である。正規化されたスループット値で示されるスコア「3.72」が、「集計区間1」と「集計区間2」とに含まれる処理時間比率で分配される。すると「集計区間1」のスコアが「1.09」(=3.72×10/34)、「集計区間2」のスコアが「2.63」(=3.72×24/34)となる。得られたスコアが、DBサーバ400の階層における各集計区間のスループットに加算される。
【0191】
ジョブ65の実行期間は、図19の例では、全体が「集計区間2」に含まれ、処理時間は「8ms」である。またジョブ65のジョブ種は「D3」であり、正規化スループット値テーブル143a(図23参照)では、1ジョブ当たりの正規化されたスループット値は「0.796」である。そこで、正規化されたスループット値で示されるスコア「0.796」が、DBサーバ400の階層における「集計区間2」のスループットに加算される。
【0192】
ジョブ66の実行期間は、図19の例では、全体が「集計区間2」に含まれ、処理時間は「7ms」である。またジョブ66のジョブ種は「D4」であり、正規化スループット値テーブル143a(図23参照)では、1ジョブ当たりの正規化されたスループット値は「3.19」である。そこで、正規化されたスループット値で示されるスコア「3.19」が、DBサーバ400の階層における「集計区間2」のスループットに加算される。
【0193】
以上よりDBサーバ400の階層における「集計区間1」のスループットは、ジョブ63に基づくスコアと、ジョブ64の実行期間64aに基づくスコアとの合計となり、「2.09」となる。またDBサーバ400の階層における「集計区間2」のスループットは、ジョブ64の実行期間64bに基づくスコア、および2つのジョブ65,66それぞれに基づくスコアの合計となり、「6.616」となる。
【0194】
図20に示したように、複数の業務処理が並列実行されている場合は、階層ごとに、各集計区間において、各業務処理に関するジョブによるスコアの総和が求められ、得られた総和が、各階層の集計区間ごとのスループットとなる。
【0195】
このようなスループットを集計区間ごとに求めることで、スループットの時系列推移が得られる。
図24は、スループットの時系列推移の一例を示す図である。図24では、DBサーバ400の階層におけるスループットの時系列推移をグラフで表している。図24に示したグラフは、横軸が時刻、縦軸がスループットである。横軸の1目盛が各集計区間に対応する。
【0196】
<<多重度計算>>
次に多重度計算処理について詳細に説明する。第2の実施の形態における多重度は、その集計区間内で、平均すると同時に何件のジョブが同時に実行されていたかを示す値である。この多重度は、次の式で求めることができる。
多重度=集計区間内での全てのジョブの処理時間の合計÷集計区間の長さ
最下位の階層以外の階層における多重度の計算では、「ジョブの処理時間」には、その階層において処理が行われている時間だけを含め、他の階層へ処理を送ってから返信を待っている間の時間は含めない。
【0197】
図19の例を用い、多重度の計算例を示す。Webサーバ200の階層の「集計区間1」の多重度は「0.14」(=14/100)、「集計区間2」の多重度は「0.11」(=11/100)である。Appサーバ300の階層の「集計区間1」の多重度は「0.28」(=(19+9)/100)、「集計区間2」の多重度は「0.43」(=(10+12+21)/100)である。DBサーバ400の階層の「集計区間1」の多重度は「0.19」(=(9+10)/100)、「集計区間2」の多重度は「0.39」(=(24+8+7)/100)である。
【0198】
図20の場合のように、複数の業務処理が並列実行されている場合にも、この計算法は変わらない。すなわち、集計区間に存在する複数の業務処理のジョブを区別することなく、各ジョブの処理時間の総和を計算して、計算された総和を集計区間長で割ればよい。
【0199】
このような多重度を集計区間ごとに求めることで、多重度の時系列推移が得られる。
図25は、多重度の時系列推移の一例を示す図である。図25では、DBサーバ400の階層における多重度の時系列推移をグラフで表している。図25に示したグラフは、横軸が時刻、縦軸が多重度である。横軸の1目盛が各集計区間に対応する。
【0200】
<飽和多重度算出>
次に、飽和多重度算出処理について詳細に説明する。
飽和多重度決定部144は、スループットと多重度との関係から、飽和多重度を動的に求める。例えば飽和多重度決定部144は、各集計区間について計算されたスループットと多重度とから、両者の関係を求め、多重度の上昇に伴うスループットの上昇が止まる飽和多重度の値を求める。
【0201】
多重度の上昇に伴うスループットの上昇が止まる位置があることは、例えば、各集計区間の多重度とスループットとの関係を散布図で表すことで容易に理解できる。
図26は、多重度とスループットとの関係の一例を示す散布図である。図26に示した散布図は、横軸(X軸)に多重度、縦軸にスループットを採っている。そして各集計区間のスループットと多重度とに応じた点を、図中にプロットしている。
【0202】
図26に示した散布図からも分かるように、多重度がある程度の値までは、多重度の上昇に伴ってスループットは上昇するが、それ以降は多重度が上昇してもスループットは上昇しなくなる。飽和多重度決定部144は、この境界となる多重度を飽和多重度として求める。
【0203】
図27は、飽和多重度算出処理の一例を示すフローチャートである。以下、図27に示す処理をステップ番号に沿って説明する。
[ステップS141]飽和多重度決定部144は、多重度の最小値と最大値とを求める。例えば飽和多重度決定部144は、現在処理対象となっている階層の集計区間管理テーブルの多重度の欄から、設定されている値の最小値と最大値とを抽出する。
【0204】
[ステップS142]飽和多重度決定部144は、多重度の最小値と最大値との間を、等間隔に細分化する。細分化して得られた多重度の細分化区間を、多重度区間とする。ここで各多重度区間内の下限値をその多重度区間の多重度の区間開始値とし、多重度区間内の上限値をその多重度区間の多重度の終了値とする。
【0205】
例えば飽和多重度決定部144は、多重度の最小値と最大値の間を、所定数(例えば100)の多重度区間に分割する。なお所定数に分割するのではなく、一定間隔ごと(例えば多重度0.1ごと)に分割してもよい。例えば、最少多重度「0」、最大多重度「50」であれば、多重度「0」から多重度「50」の間を0.5刻みで100分割する。
【0206】
[ステップS143]飽和多重度決定部144は、多重度が少ない方から順に多重度区間を選択する。
[ステップS144]飽和多重度決定部144は、選択した多重度区間に含まれる多重度を有する集計区間の平均多重度と、それらの集計区間の平均スループットとを計算する。
【0207】
[ステップS145]飽和多重度決定部144は、直前に選択した多重度区間(隣接する多重度区間)との間の、多重度増加に伴うスループットの上昇率(傾き)を計算する。スループットの傾きは、例えば直前に選択した多重度区間との比較における平均スループットの変化量を、直前に選択した多重度区間との比較における平均多重度の変化量で除算した値である。
【0208】
i番目に選択された多重度区間の傾きδiの計算を式で表すと、例えば以下のような計算となる。
【0209】
【数1】
【0210】
[ステップS146]飽和多重度決定部144は、ステップS145で計算した傾きが、閾値より小さいか否かを判断する。傾きの閾値としては、例えば平均多重度が最も小さな多重度区間の傾きδ1に、1未満の所定の係数を掛けた値(例えば0.2δ1)とする。飽和多重度決定部144は、傾きが所定の閾値より小さければ、処理をステップS149に進める。また飽和多重度決定部144は、傾きが所定の閾値以上であれば、処理をステップS147に進める。
【0211】
[ステップS147]飽和多重度決定部144は、未処理の多重度区間があるか否かを判断する。飽和多重度決定部144は、未処理の多重度区間があれば、処理をステップS143に進める。また飽和多重度決定部144は、全ての多重度区間の処理が終了していれば、処理をステップS148に進める。
【0212】
[ステップS148]飽和多重度決定部144は、全ての多重度区間において、傾きが閾値以上だった場合、飽和多重度をステップS141で求められた多重度の最大値に設定し、飽和多重度算出処理を終了する。
【0213】
[ステップS149]飽和多重度決定部144は、現在選択している多重度区間の多重度の区間開始値を飽和多重度に決定する。
例えば多重度「0」から多重度「50」の間を0.5刻みで100分割した場合において、1<i≦9の範囲まで傾きが閾値を下回らなかったとする。この場合、10番目の多重度区間の多重度の範囲「4.5〜5.0」の区間開始値「4.5」(=0.5×9)が、飽和多重度に決定される。
【0214】
このように、分割した多重度が小さな多重度区間から順番に、傾きの値が一定の閾値(例えば0.2δ1)を下回らないかどうかが調べられ、最初に下回るiが求められる。そして多重度が小さな方からi番目の多重度区間の多重度の区間開始値が飽和多重度となる。
【0215】
<ボトルネック判定>
次に、飽和多重度に基づくボトルネック判定処理について説明する。分析部145は、飽和多重度を超えていない集計区間の割合に応じて、各階層の処理能力の余力を算出する。そして分析部145は、飽和多重度を超えていない集計区間の割合が所定の値より少ない階層を検出すると、その階層がボトルネックになっていると判断する。
【0216】
すなわち、図26に示した散布図の各ドットは、1つ1つの集計区間に相当する。これらの集計区間の中で、多重度が飽和多重度を下回っていた区間は、その階層の処理能力に余力が残っていたと考えられる。そのような集計区間が、集計区間の総数に占める割合を求め、それを処理能力の余力とする。例えば、180秒分の時系列データを同時に処理する場合は、その中には1800の集計区間が存在する(集計区間長が100msの場合)。ここで1800の集計区間の内の385の集計区間で多重度が飽和多重度を下回っていた場合、21.4%(=385/1800×100)の区間で余力を有していたという計算になる。
【0217】
例えば、第2の実施の形態では、分析部145は、飽和多重度を超えていない集計区間が第1の閾値を下回った場合に、その階層の処理能力の限界を超えた完全飽和状態であると判断する。そして、分析部145は、完全飽和状態となった階層をボトルネック原因と判定して報告する。
【0218】
また分析部145は、飽和多重度を超えていない集計区間の割合が、予め設定した第1の閾値より高い第2の閾値を下回った場合に、その階層は部分的に処理能力の限界を超えている半飽和状態であると判断する。これは、複数の階層が同時に半飽和状態に陥って、多階層システム全体としてはボトルネック状態となっている可能性があるためである。
【0219】
以下に、ボトルネック判定処理の手順について説明する。
図28は、ボトルネック判定処理の手順の一例を示すフローチャートである。以下、図28に示す処理をステップ番号に沿って説明する。
【0220】
[ステップS151]分析部145は、集計区間を1つ選択する。例えば分析部145は、処理対象となっている階層に対応する集計区間管理テーブル(図22参照)の上位から順に、集計区間を選択する。
【0221】
[ステップS152]分析部145は、選択した集計区間の多重度が、飽和多重度以下か否かを判断する。分析部145は、飽和多重度以下であれば、処理をステップS153に進める。また分析部145は、飽和多重度より大きければ、処理をステップS154に進める。
【0222】
[ステップS153]分析部145は、未飽和区間数をカウントアップする。なお未飽和区間数は、ボトルネック判定処理の開始時に「0」に初期化されている。
[ステップS154]分析部145は、未処理の集計区間があるか否かを判断する。分析部145は、未処理の集計区間があれば、処理をステップS151に進める。分析部145は、未処理の集計区間がなければ、処理をステップS155に進める。
【0223】
[ステップS155]分析部145は、集計区間の総数に対する未飽和区間の割合が第1の閾値未満か否かを判断する。第1の閾値は、予め分析部145に設定されている。例えば分析部145は、未飽和区間数を集計区間の総数で除算し、未飽和区間の割合を求める。そして分析部145は、未飽和区間の割合と第1の閾値を比較し、未飽和区間の割合が第1の閾値未満か否かを判断する。分析部145は、未飽和区間の割合が第1の閾値未満であれば、処理をステップS156に進める。また分析部145は、未飽和区間の割合が第1の閾値以上であれば、処理をステップS157に進める。
【0224】
[ステップS156]分析部145は、現在の処理対象となっている階層が、ボトルネック要因であると判定する。分析部145は、例えば判定結果をモニタ11などに出力する。その後、ボトルネック判定処理が終了する。
【0225】
[ステップS157]分析部145は、集計区間の総数に対する未飽和区間の割合が第2の閾値未満か否かを判断する。第2の閾値は、第1の閾値より大きな値であり、予め分析部145に設定されている。分析部145は、未飽和区間の割合が第2の閾値未満であれば、処理をステップS158に進める。また分析部145は、未飽和区間の割合が第2の閾値以上であれば、ボトルネック判定処理を終了する。
【0226】
[ステップS158]分析部145は、現在の処理対象となっている階層が、複合的なボトルネック要因の候補であると判定する。複合的なボトルネック要因とは、他の階層との複合的要因によって発生しているボトルネックである。分析部145は、例えば判定結果をモニタ11などに出力する。その後、ボトルネック判定処理が終了する。
【0227】
このようにして、処理能力が残存していた集計区間(未飽和の集計区間)の割合に応じて、その階層が、多階層システムのボトルネックになっているかどうかを判定することができる。
【0228】
以下、図29〜図32を参照し、各階層のサーバの余力と、未飽和区間の割合との関係について説明する。
図29は、階層が完全未飽和状態の一例を示す散布図である。階層が完全未飽和状態であるとは、負荷が非常に低くて、どの集計区間においても多重度が飽和多重度を超えていない状態である。図29に示したように多重度が低い集計区間しかない場合には飽和多重度が求まらないことがある。すなわち図27に示した処理において、全ての多重度区間において、傾きの大きさが閾値以上になることがある。このように、全ての多重度区間において、傾きの大きさが閾値以上となった場合、完全未飽和状態と判定できる。この場合、例えば分析部145は、分析対象の階層が完全未飽和状態であることを示す情報を出力する。
【0229】
図30は、階層が未飽和状態の一例を示す散布図である。階層が未飽和状態であるとは、多重度が飽和多重度以下の集計区間の割合が、第2の閾値以上の状態である。例えば第1の閾値が「0.2」(20%)、第2の閾値が「0.7」(70%)の場合、多重度が飽和多重度以下の集計区間の割合が70%以上の階層は、未飽和状態と判定される。この場合、例えば分析部145は、分析対象の階層が未飽和状態であることを示す情報を出力する。
【0230】
図31は、階層が半飽和状態の一例を示す散布図である。階層が半飽和状態であるとは、多重度が飽和多重度以下の集計区間の割合が、第1の閾値以上、第2の閾値未満の状態である。半飽和状態の階層は、部分的に処理能力の限界を超えているものと考えられる。これは、複数の階層が同時に半飽和状態に陥って、多階層システム全体としてはボトルネック状態となっている可能性があるためである。例えば第1の閾値が「0.2」(20%)、第2の閾値が「0.7」(70%)の場合、多重度が飽和多重度以下の集計区間の割合が20%以上、且つ70%未満の階層は、半飽和状態と判定される。この場合、例えば分析部145は、分析対象の階層が半飽和状態(部分的ボトルネック)であることを示す情報を出力する。
【0231】
図32は、階層が飽和状態の一例を示す散布図である。階層が飽和状態であるとは、多重度が飽和多重度以下の集計区間の割合が、第1の閾値未満の状態である。飽和状態の階層は、多階層システムにおけるボトルネックになっていると考えられる。例えば第1の閾値が「0.2」(20%)の場合、多重度が飽和多重度以下の集計区間の割合が20%未満の階層は、飽和状態と判定される。この場合、例えば分析部145は、分析対象の階層が飽和状態(ボトルネック)であることを示す情報を出力する。
【0232】
以上説明したように、第2の実施の形態では、精密なメッセージ送受時刻の記録から、各階層における処理の多重度とスループットを算出し、その関係を動的に求め、そこからボトルネック判定を行う。これにより、ボトルネックの判定を適切に行うことができる。
【0233】
すなわち、第2の実施の形態では、最初に、分析対象期間が短い時間間隔の集計区間に細分化され、それぞれの集計区間から各階層における処理多重度とスループットが計算される。こうして得られた集計区間ごとの多重度とスループットとの組から両者の関係が求められ、処理多重度が増加しているのにスループットが増加しなくなる多重度の値(飽和多重度と呼ぶ)を動的に求められる。そして、細分化された各集計区間の中で、多重度がその飽和多重度を超えていた区間の割合を求めることによって、各階層が余力を有しているかどうかが判定される。
【0234】
このような判定は、各階層で動くサーバは、そのハードウェアやOSやソフトウェア実装の制限によって、同時に実行できるジョブ数(並列度)が限られており、並列度が一定の値に達すると、それ以上はスループットが上昇しなくなるという現象に基づいている。
【0235】
また第2の実施の形態では、多重度とスループットの両者の関係でボトルネック発生を判定するので、ボトルネックの発生原因が何であるかに関係なく、ボトルネックが発生していることを検出できる。すなわち、ソフトウェアの多重度制限以外の原因でボトルネックが発生している場合あっても、特定の階層でボトルネックが発生していることを検出できる。
【0236】
多階層システム中のある階層のスループットが限界を迎える飽和多重度に影響を及ぼす原因は様々である。例えば飽和多重度は、ソフトウェア実装やジョブ種ごとの処理内容によって、使用するハードウェア資源の種類や量が異なることや、各レベル(OSやソフトウェア内部)で行われるキューイングの影響を受ける。また、ジョブ種の混合率の変化に伴って、運用中に飽和多重度が動的に変わることも考えられる。このように、飽和多重度に影響を及ぼす要因を、外部からのIPパケットのキャプチャを観測によって、事前に知ることが非常に困難である。第2の実施の形態では、多重度とスループットとの関係からボトルネックの有無を判定するため、飽和多重度に影響を及ぼすサーバの内部要因に関する情報を用いずに、ボトルネックの判定を可能としている。
【0237】
例えば、個々のシステムリソースは枯渇していないのに、システム全体としては入力仕事量を増やしても性能(出力仕事量)が伸びなくなっている状態についても、その要因となっている階層(サーバ)を特定することが可能である。このような現象は、1つの階層の中において、複数の要因が複合してボトルネックを引き起こしている場合に発生する。複合的な要因には、ハードウェア・OS・ソフトウェア・ユーザアプリケーションなど全てを含むため、全ての階層において要因となるリソースを個別に分析して、さらに関係を分析すると、関係が複雑になりすぎ、正確な判断が難しい。第2の実施の形態では、各階層の多重度とスループットとの関係から、ボトルネックの要因を内在している階層を特定できるため、ボトルネックの発生要因となっているリソースを特定する作業の負担が軽減される。
【0238】
また第2の実施の形態では、非常に短い時間の集計区間における多重度とスループットとに基づいて、各階層の余力を判定するため、極めて短時間に発生するボトルネックであっても検出可能である。例えば、図31の例であれば、サーバ単体での継続したボトルネックとはなっていないものの、飽和多重度を超えた多重度の集計区間が存在していることが分かる。このような集計区間は、瞬間的にボトルネックを生じさせている可能性がある。その結果、例えば、複数の階層間で、極短時間でボトルネック位置が推移し、システム全体としては入力仕事量を増やしても性能が伸びなくなっている状態において、その複数階層間でのボトルネック位置推移と、各階層の影響度合いを検出できる。
【0239】
〔第3の実施の形態〕
次に第3の実施の形態について説明する。第3の実施の形態は、集計区間のスループットの算出において、間接的な外部資源待ち時間を、処理時間から除外するものである。なお、第3の実施の形態を実現するシステム構成は第2の実施の形態と同様である。そこで、図4や図6に示した第2の実施の形態の各要素を用いて第3の実施の形態の機能を説明する。
【0240】
多階層システムにおいて、多重度とスループットの関連性から、システム性能の飽和度合いを測ろうとすると、この関連性を壊す要因が存在する。そのような要因の1つとして、ソフトウェアの実装によっては、階層間のメッセージ送受におけるレスポンスメッセージ待ちという直接的な待ち時間以外に、間接的に階層外部の資源を待っている時間が存在することがある。
【0241】
図33は、多重度とスループットの関連性を壊す要因の一例を示す図である。例えば図33の場合は、Appサーバ300上で動くアプリケーションがDBサーバ400と通信するためDBコネクションを内部で一定量確保(プール)しておき、そのDBコネクションを使い回すという実装がなされていた場合に起こるケースである。なお、このような実装方法は、DBコネクションプールという一般的な実装方法である。
【0242】
例えば、プールしてある上限までDBコネクションを使い切ってしまった場合、次の処理が行われる。Appサーバ300においてDBコネクションを新たに必要とするスレッドは、他のDBコネクションを使用しているスレッドが処理を終えてDBコネクションをプールへ解放するのを待つ。もし他のスレッドがDBサーバからの応答を待っていて処理が進まない場合は、これは間接的にDBサーバ400の応答を待っていることになる。特に、DBサーバ400がボトルネックとなった場合においては、DBサーバ400の応答時間が指数関数的に増加するので、Appサーバ300において空きDBコネクションを待つ時間は極端に増加する(図33の網掛け部分)。
【0243】
Appサーバ300における待ち時間は、外部資源を待っている時間なので、Appサーバ300のスループットや多重度の計算においては、本来はAppサーバ300の処理時間からは省かれるべき時間である。しかし、外部観測においては、そのようなアプリケーション内部での、間接的な外部資源の待ち時間を測定する手段がない。
【0244】
同様のことは、Webサーバ200やAppサーバ300の空きスレッド待ちでも発生する。一般的に、Webサーバ200やAppサーバ300では、同時に使用できるスレッド数の上限を定めていて、使用されているスレッド数が上限に達すると、それ以降に到着したリクエストは空きスレッドができるのを待つことになる。下位の階層からレスポンスが遅延によりスレッドが空くのが遅れると、空きスレッドの待ち時間には、間接的にはさらに下位の階層のレスポンスを待っている時間が含まれることになる。特に下位の階層でボトルネックが発生しているときには、空きスレッドの待ち時間が非常に大きな待ち時間となる。
【0245】
このような間接的な外部資源待ち時間を含めてスループットと多重度とを計算すると、多重度を非常に大きな値にしてしまい、多重度とスループットの関連性を壊してしまう。そこで、第3の実施の形態では、間接的な外部資源待ち時間による悪影響を取り除くため、間接的な外部資源待ち時間が発生すると予め分かっている実行期間については、常にその実行期間を削除して、多重度とスループットを計算する。間接的な外部資源待ち時間が発生すると予め分かっている実行期間は、例えば、最下位の階層以外の階層における同一ジョブ内の最初の実行期間である。図33の例では、網掛けで示されたAppサーバ300における最初の実行期間全体を、多重度とスループットとの計算に使用する情報から削除する。もちろん、この方法では、その区間に含まれている、取り除く必要のない、その階層での処理時間も同時に取り除かれてしまい、その長さの分だけ誤差が発生する。それでも多重度とスループットの両方が低下するだけなので、本性能分析手法全体としては、影響は無視できる。
【0246】
第3の実施の形態は、第2の実施の形態のスループット計算処理(図21のステップS132)と、多重度計算処理(図21のステップS133)との処理を変更することで実現できる。変更内容は以下の通りである。
【0247】
<スループット計算>
集計部141は、スループットを算出する際に、各ジョブの最初の実行期間の長さを処理時間から除算する。例えば、図19に示した例であれば、Webサーバ200の「集計区間1」のスループットの計算において、ジョブ61の実行期間61aは、ジョブ61の実行期間から除外される。同様に、Appサーバ300の「集計区間1」のスループットの計算において、ジョブ62の実行期間62aは、ジョブ62の実行期間から除外される。
【0248】
なお、1つのジョブの実行が複数の集計区間に跨る場合は、それぞれの集計区間の中における処理時間の比率に応じて、先のスコアを各集計区間へ配分するが、この際にも、ジョブの先頭の実行期間は除外してスループットの配分が計算される。
【0249】
<多重度計算>
集計部141は、多重度を算出する際に、各ジョブの最初の実行期間の長さを、多重度算出時の処理時間から除外する。
【0250】
このように第3の実施の形態では、間接的な外部資源待ち時間を含む実行期間を、スループットと多重度との計算に用いないようにしたことで、間接的な外部資源待ちの影響を除去することができる。
【0251】
これによって、間接的な外部資源待ちの時間が、その階層上での処理時間として誤って算入されることを防ぐことができ、その影響で多重度とスループットの関係が不正確になることを防止することができる。特に、システム全体の処理性能が飽和しかかった状態では、このような間接的な外部資源待ち(ボトルネック階層の処理待ち)時間が急激に大きくなり、本来の処理時間よりも遥かに大きくなることは珍しくない。この間接的な外部資源待ち時間は、スループットは小さくする方向に働くのに対し、多重度に関してはその値を急激に高めるように働く。そのため、間接的な外部資源待ちの時間の影響が残存していると、スループットと多重度との関係が不正確となる。
【0252】
図34は、間接的な外部資源待ち時間を除外しない場合の各集計区間のスループットと多重度との一例を示す散布図である。なお図34の例は、間接的な外部資源待ち時間が発生したAppサーバ300の階層のスループットと多重度とを計算したものである。図34の例では、高い多重度の集計区間が多数存在することが分かる。
【0253】
図34のスループットと多重度との計算の元となった時系列データを用い、間接的な外部資源待ち時間を除外してスループットと多重度とを再計算すると、図35のようになる。
【0254】
図35は、間接的な外部資源待ち時間を除外した場合の各集計区間のスループットと多重度との一例を示す散布図である。図35の例では、図34と比較して、多重度が非常に低くなっていることが分かる。このように、間接的な外部資源待ち時間を除外することで、各集計区間の多重度は少なくなる。
【0255】
第3の実施の形態のように、間接的な外部資源待ちの時間の影響を抑止すれば、間接的な外部資源待ち時間が存在する状況においても、その待ち時間によりスループットや多重度の正確性が低下することを抑止できる。すなわち、性能分析の正確性を向上させることができる。
【0256】
〔第4の実施の形態〕
次に第4の実施の形態について説明する。第4の実施の形態は、ジョブの処理数に変えて、出力メッセージ数を用いてスループットを計算するものである。なお、第4の実施の形態を実現するシステム構成は第2の実施の形態と同様である。そこで、図6に示した第2の実施の形態の各要素を用いて第4の実施の形態の機能を説明する。
【0257】
Appサーバ300などのサーバでは、Java(登録商標) VM(virtual machine)がFullガーベージコレクション(以下「Full−GC」と呼ぶ)を起こすことがある。ガーベージコレクションは、プログラムが動的に確保したヒープ(動的に確保可能なメモリ領域)上のメモリ領域のうち、不要になった領域を自動的に解放する処理である。Full−GCの場合、Full−GC以外の全ての処理が、瞬間的に停止する。ジョブの実行が開始されてから終了するまでの間に、Full−GCによりジョブが停止する期間が含まれていると、ジョブの挙動を正確に検出することができないことがある。なぜならば、Appサーバ300上でFull−GCのためにジョブが瞬間停止させられると、その時間はAppサーバ300外からの外部観測では、あたかもそのAppサーバ300上での処理が継続しているかのように観測されてしまう。その結果、第2の実施の形態の方法では、実際にはジョブの停止期間であるにも拘わらず、その停止期間を実行期間と判断して、スループットや多重度が計算される。
【0258】
図36は、Full−GCによる停止期間が発生した場合の一連の業務処理を示す図である。図36の例では、Webサーバ200のジョブ91からのリクエストメッセージに応じてAppサーバ300でジョブ92が実行されている。Appサーバ300のジョブ92は、DBサーバ400に対してリクエストメッセージを4回送信している。DBサーバ400では、Appサーバ300からのリクエストメッセージに応じて、4つのジョブ93〜96が実行されている。Webサーバ200が実行したジョブ91には、2つの実行期間91a,91bが含まれる。Appサーバ300が実行したジョブ92には、5つの実行期間92a,92b,92c,92d,92eが含まれる。
【0259】
ここで、Appサーバ300では、実行期間92cにおいて、Full−GCが発生したものとする。Full−GCが行われると、ジョブ92の処理は停止するため、実行期間92cは、実際にAppサーバ300がジョブ92の処理に費やした時間よりも長い処理時間となる。
【0260】
図36に示した様な挙動は、多階層システム全体として考えると、Full−GCが発生した一瞬だけ、Appサーバ300の階層がボトルネックになっていると見做すことができる。第4の実施の形態では、そのような瞬間的なボトルネック発生を検出可能とする。そのために第4の実施の形態では、スループットを、その階層が出力するメッセージ数によって換算する。この出力メッセージには、下位の階層に送るリクエストも上位の階層へ返すレスポンスも含まれる。この出力メッセージ数を、ジョブ種間の差異を考慮して、各ジョブ種の低負荷時の処理時間に比例し、各ジョブ種のジョブ1つ当たりの平均出力メッセージ数に反比例するように正規化する。
【0261】
スループットの計算方法を置き換えたことで、1ジョブ当たりの正規化スループット値も、第2の実施の形態と異なる値となる。
図37は、第4の実施の形態における正規化スループット値記憶部のデータ構造の一例を示す図である。正規化スループット値記憶部143には、正規化スループット値テーブル143bが格納されている。正規化スループット値テーブル143bには、ジョブ種、低負荷時の平均処理時間、平均出力メッセージ数、および正規化されたスループット値の欄が設けられている。
【0262】
ジョブ種の欄には、Web三階層システムのいずれかのサーバで実行されるジョブのジョブ種名が設定される。
低負荷時の平均処理時間の欄には、対応するジョブ種のジョブを、サーバが低負荷時に実行した場合の平均処理時間が設定される。図37の例では、低負荷時の平均処理時間の欄に、「ms」単位の数値が設定されている。低負荷時の平均処理時間は、例えば、システムの管理者が、予めWeb三階層システムの負荷が少ない状態で計測し、正規化スループット値テーブル143bに設定する。
【0263】
平均出力メッセージ数の欄には、対応するジョブ種のジョブが出力するメッセージ数の平均値である。このメッセージ数には、リクエストメッセージとレスポンスメッセージとの両方がカウントされる。
【0264】
正規化されたスループット値の欄には、各ジョブ種の1メッセージ当たりの処理時間を正規化したスループット値が設定される。例えば階層ごとに、代表ジョブ種が1つずつ選択される。図37の例では、Webサーバ200で実行されるジョブ種に関しては、ジョブ種名「W1」のジョブ種が、代表ジョブ種である。Appサーバ300で実行されるジョブ種に関しては、ジョブ種名「A1」のジョブ種が、代表ジョブ種である。DBサーバ400で実行されるジョブ種に関しては、ジョブ種名「D1」のジョブ種が、代表ジョブ種である。各階層の代表ジョブ種に関しては、1メッセージ当たりの正規化されたスループット値は、「1.00」を平均出力メッセージ数で除算した値である。例えばWebサーバ200の代表ジョブ種であるジョブ種「W1」は、平均出力メッセージ数が「2」であるため、正規化されたスループット値は、「0.5」(=1/2)となる。
【0265】
代表ジョブ種以外のジョブ種に関しては、低負荷時における代表ジョブ種との平均処理時間の比率を、さらに各ジョブ種の平均出力メッセージ数で割った値が、各ジョブ種のジョブが発行するメッセージ1回あたりの正規化されたスループット値となる。例えばWebサーバ200の階層のジョブ種「W2」は、低負荷時の平均処理時間が、代表ジョブ種(ジョブ種名「W1」)の平均処理時間の0.604倍(13.4ms/22.2ms)である。この比率「0.604」を、ジョブ種「W2」の平均出力メッセージ数「2.00」で除算した値「0.302」が、ジョブ種名「W2」のジョブ種の1メッセージ当たりの正規化されたスループット値となる。
【0266】
第4の実施の形態では、第2の実施の形態のスループット計算処理(図21のステップS132)に代えて、図37に示したジョブ種ごとの1メッセージ当たりの正規化されたスループット値を用いて、集計区間ごとのスループットが計算される。
【0267】
図36に示した業務処理に基づいてスループットを計算すると以下のようになる。
Webサーバ200の階層の場合は、「集計区間1」のスループットはジョブ種「W1」のジョブ91が発行したメッセージ1回分の値「0.500」である。「集計区間2」のスループットは「0」である。「集計区間3」のスループットは、ジョブ種「W1」のジョブ91が発行したメッセージ1回分の値「0.500」である。
【0268】
Appサーバ300の階層の場合は、「集計区間1」のスループットは、ジョブ種「A1」が発行したメッセージ2回分の値「0.412」(=0.206×2)である。「集計区間2」のスループットは、発行したメッセージが一つもないので「0」となる。「集計区間3」のスループットは、ジョブ種「A1」のジョブ92が発行したメッセージ3回分の値「0.618」(=0.206×3)である。この3回の内の2回は下位のDBサーバ400に対して送信したリクエストメッセージで、残りの1回は上位のWebサーバ200に返信したレスポンスメッセージである。
【0269】
DBサーバ400の階層の「集計区間1」のスループットは、ジョブ種「D1」のジョブ93が発行したメッセージ1回分の値「1.00」である。「集計区間2」のスループットは、ジョブ種「D2」のジョブ94が発行したメッセージ1回分の値「3.72」である。「集計区間3」のスループットは、ジョブ種「D3」の2つのジョブ95,96が発行したメッセージ2回分の値「1.59」(=0.796×2)である。
【0270】
なお、複数の業務処理が並列実行されている場合は、第2の実施の形態と同様に、階層ごとに、上記のようにして計算されたスループットの集計区間ごとの総和が計算される。そして、計算された総和が、各集計区間のスループットになる。
【0271】
このようにスループットを計算することによって、「集計区間2」におけるジョブ92の実行期間92cのように、実質的な処理とは無関係に時間が長くなっている区間にスループット値が割り当てられることを抑止できる。すなわち、瞬間的な挙動停止があると、停止期間はメッセージ出力が行われないため、スループット値の換算も「0」となる。これは、ジョブの処理がサーバで実際に実行されている時間のみを、正しくスループットとして換算できることを意味する。
【0272】
その結果として、Full−GCの発生などにより瞬間的にボトルネックとなっている集計区間を、正確に判別できるようになる。以下、図38と図39とを参照し、1ジョブ当たりの正規化スループット値に基づいてスループットを計算した場合と、1メッセージ当たりの正規化スループット値に基づいてスループットを計算した場合との違いを説明する。
【0273】
図38は、1ジョブ当たりの正規化スループット値に基づいてスループットを計算した場合の散布図である。図38の例は、Appサーバ300においてFull−GCが発生した期間を分析対象期間として、第2の実施の形態の手法でスループットを計算したものである。図38のような多重度とスループットとの関係では、Full−GCによる瞬間的なボトルネックの発生が認識できない。
【0274】
図39は、1メッセージ当たりの正規化スループット値に基づいてスループットを計算した場合の散布図である。図39の例は、図38のスループット計算時と同じ時系列データを用いて、第4の実施の形態の手法でスループットを計算したものである。
【0275】
このように第4の実施の形態でスループットを計算すると、瞬間的な挙動停止が直接的にスループットに反映される。そのためFull−GCが発生してスループットが完全に0になっていたり大きく落ち込んでいたりする集計区間が多数あることがグラフ上で明確に表されている。図39では、楕円99内の集計区間が、Full−GCなどによって引き起こされた異常な瞬間スループット低下が発生した集計区間である。
【0276】
このような瞬間スループット低下が発生した集計区間は、例えば分析部145が、多重度が飽和多重度を超えていながら、スループットが所定値以下の集計区間を集計区間情報記憶部142から検索することで、検出することができる。また分析部145が、図39に示したような散布図をモニタ11に表示し、管理者に瞬間スループット低下の発生を認識させることもできる。
【0277】
なお図39に示した例では全体的にスループットのバラつきが大きくなっているが、これは、Full−GC以外にもマイナーなガーベージコレクションが頻繁に発生しており、それがスループットを瞬間的に細かく上下させているためであると考える。
【0278】
また、例えば、ジョブ種が一種類の場合などには、スループットの正規化を行わなくてもよい。その場合、例えば、集計区間内に出力したメッセージ数を、スループットとする。また、ジョブ全体で出力されるメッセージ数のうち、集計区間内に出力したメッセージ数を、スループットとすることもできる。
【0279】
〔第5の実施の形態〕
次に第5の実施の形態について説明する。第5の実施の形態は、データのばらつきの影響を抑止した手法で、飽和多重度を求めるものである。なお、第5の実施の形態を実現するシステム構成は第2の実施の形態と同様である。そこで、図6に示した第2の実施の形態の各要素を用いて第5の実施の形態の機能を説明する。
【0280】
図27に示した第2の実施の形態の飽和多重度算出手法では、データに細かなバラつきがある場合にそれに影響されて、傾きが早い時点で一時的に閾値を下回り、飽和多重度を小さな値に誤判定してしまう可能性がある。そこで第5の実施の形態では、飽和多重度をより正確に求めることができる手法で、飽和多重度を算出する。
【0281】
第5の実施の形態で採用した手法は、統計的な信頼区間を用いる。信頼区間とは、ある数がどのような数値の範囲にあるかを確率的に示すものである。多階層システムの性能分析においては、ある階層のサーバにおける多重度の値が低い時は、多重度とスループットは正比例に近い関係で、両者の傾きの値の分散は小さい。他方、その階層のサーバの処理能力が限界(ボトルネック)に近づいた時点で、両者の関係が急激に崩れ、分散が大きくなる。このように分散が大きくなると、傾きの値の統計的信頼区間が広がるという特徴がある。第5の実施の形態は、信頼区間のこのような特徴を利用することによって、データの細かなバラつきに影響されずに、飽和多重度を求めることを可能とする。
【0282】
図40は、第5の実施の形態における飽和多重度算出処理の一例を示すフローチャートである。以下、図40に示す処理をステップ番号に沿って説明する。なお図40におけるステップS201〜ステップS205の処理は、それぞれ図27に示した第2の実施の形態におけるステップS141〜ステップS145の処理と同じである。そこで、ステップS206以降の処理について説明する。なお、ステップS202の処理では、多重度の最小値「0」と最大値「50」との間が、0.5刻みで100分割されているものとする。
【0283】
[ステップS206]飽和多重度決定部144は、傾きの分布の統計的な信頼区間を計算する。例えば飽和多重度決定部144は、隣接する多重度区間の間で、両者の平均多重度と平均スループットの変化量から、変化量の傾きδiを、図27のステップS145と同様の式(1)で求める。
【0284】
さらに飽和多重度決定部144は、分割した多重度区間の小さな方から順にnk(nkは、1<nk≦100の範囲の整数)個の区間について、先に求めた傾きを使って、その統計上の信頼区間を以下の式で計算する。
【0285】
【数2】
【0286】
ここで、1.96は95%信頼区間の定数である。
[ステップS207]飽和多重度決定部144は、信頼区間の下限が所定の閾値より低いか否かを判断する。信頼区間の下限に関する閾値としては、例えば平均多重度が最も小さな多重度区間の傾きδ1に、1未満の所定の係数を掛けた値(例えば0.2δ1)とする。飽和多重度決定部144は、信頼区間の下限が閾値より低ければ、処理をステップS210に進める。また飽和多重度決定部144は、信頼区間の下限が閾値以上であれば、処理をステップS208に進める。
【0287】
[ステップS208]飽和多重度決定部144は、未処理の多重度区間があるか否かを判断する。飽和多重度決定部144は、未処理の多重度区間があれば、処理をステップS203に進める。また飽和多重度決定部144は、未処理の多重度区間がなければ、処理をステップS209に進める。
【0288】
[ステップS209]飽和多重度決定部144は、全ての多重度区間において、信頼区間の下限が閾値以上だった場合、飽和多重度をステップS201で求められた多重度の最大値に設定し、飽和多重度算出処理を終了する。
【0289】
[ステップS210]飽和多重度決定部144は、現在選択している多重度区間の多重度の区間開始値を飽和多重度に決定する。
このような処理により、式(2)で求めた信頼区間の下限が、予め定めておいた閾値を最初に下回るnkが求められ、そのときの多重度区間の区間開始値が飽和多重度となる。例えば、多重度「0」から多重度「50」の間を0.5刻みで100分割した場合において、1<nk≦9の範囲まで信頼区間の下限が閾値を下回らず、nk=10のときに初めて信頼区間の下限が閾値より低くなったものとする。この場合、10番目の多重度区間の多重度の範囲「4.5〜5.0」の区間開始値「4.5」(=0.5×9)が、飽和多重度に決定される。
【0290】
このように、第5の実施の形態では、分割した多重度区間の小さな方から順に、先に求めた傾きを加えていきながら、その統計上の信頼区間が計算され、その信頼区間の下限が、予め定めておいた閾値を下回った時点で、そのときの多重度が飽和多重度とされる。これにより、傾きの局所的なバラつきに影響されずに、多重度とスループットの関係が変化する飽和多重度を機械的に求めることが可能となる。
【0291】
例えば、第2の実施の形態における飽和多重度算出処理(図27参照)では、傾きをそのまま多重度が小さい方から比較していき、傾きが変化する多重度を求めている。この場合、同種ジョブ間でも個々のジョブ間でのハードウェア資源消費量のバラつきが存在するので、求めた傾きが上下に振れてしまって、傾きが変化する多重度の位置を誤検出してしまう可能性がある。他方、図40に示した第5の実施の形態の飽和多重度算出処理では、傾きの値の統計上の信頼区間を算出していき、その下限が閾値を超えるかどうかという判定基準によって飽和多重度を決定する。その結果、局所的な傾きのバラつきに影響されることなく、多重度とスループットの関係が変化する飽和多重度を求めることができる。
【0292】
〔第6の実施の形態〕
次に第6の実施の形態について説明する。第6の実施の形態は、各階層の残存処理能力を算出するものである。残存処理能力を算出することで、例えば各階層の最大処理能力の見積もり(キャパシティプランニング)が可能となる。なお、第6の実施の形態を実現するシステム構成は第2の実施の形態と同様である。そこで、図6に示した第2の実施の形態の各要素を用いて第6の実施の形態の機能を説明する。
【0293】
例えば図28に示した第2の実施の形態のボトルネック判定処理では、多重度が飽和多重度以下の集計区間(未飽和区間)の割合が算出されている。未飽和区間は、処理能力の余力が残っている集計区間である。第6の実施の形態では、さらにその階層の処理能力の余力(限界処理能力に対する残存処理能力の割合)を求める。
【0294】
第6の実施の形態における集計区間情報記憶部142は、各集計区間が未飽和区間に該当するか否かのフラグを記憶することができる。
図41は、第6の実施の形態の集計区間情報記憶部のデータ構造の一例を示す図である。集計区間情報記憶部142には、階層ごとの集計区間管理テーブル142d,142e,142fが格納されている。例えば集計区間管理テーブル142dは、DBサーバ400の階層に対応する。
【0295】
集計区間管理テーブル142dには、集計区間、期間、スループット、多重度、および未飽和区間フラグの欄が設けられている。集計区間の欄には、集計区間の名称が設定される。期間の欄には、集計区間の期間が設定される。スループットの欄には、集計区間のスループットが設定される。多重度の欄には、集計区間の多重度が設定される。未飽和区間フラグの欄には、集計区間が未飽和区間に該当するか否かを示すフラグ(未飽和区間フラグ)が設定される。例えば、集計区間が未飽和区間であれば、未飽和区間フラグの値に「1」が設定される。また集計区間が未飽和区間でなければ、未飽和区間フラグの値に「0」が設定される。なお未飽和区間フラグの初期値は、未飽和区間ではないことを示す値「0」であるものとする。
【0296】
このような集計区間管理テーブル142d,142e,142fを用いて、分析部145は、各階層のサーバの余力を算出する。分析部145は、例えば図16に示した第2の実施の形態のボトルネック判定処理(ステップS124)に代えて、余力計算処理を実行する。なお、分析部145は、図16に示した第2の実施の形態のボトルネック判定処理(ステップS124)と余力計算処理との両方を実行することもできる。
【0297】
図42は、余力計算処理の手順の一例を示すフローチャートである。以下、図42に示す処理をステップ番号に沿って説明する。
[ステップS301]分析部145は、処理対象となっている階層の集計区間を1つ選択する。例えば分析部145は、集計区間情報記憶部142に格納されている集計区間管理テーブル142d,142e,142fのうち、現在処理対象となっている階層に対応する集計区間管理テーブルの上位の集計区間から順に選択する。
【0298】
[ステップS302]分析部145は、選択した集計区間の多重度が飽和多重度以下か否かを判断する。例えば分析部145は、集計区間管理テーブル内の選択した集計区間のエントリにおける多重度と、飽和多重度決定部144で決定された多重度とを比較して、選択した集計区間の多重度が飽和多重度以下か否かを判断する。分析部145は、選択した集計区間の多重度が飽和多重度以下であれば、処理をステップS303に進める。また分析部145は、選択した集計区間の多重度が飽和多重度より大きければ、処理をステップS304に進める。
【0299】
[ステップS303]分析部145は、選択した集計区間の未飽和フラグを、未飽和区間に設定する。例えば分析部145は、処理対象の階層の集計区間管理テーブル内の選択した集計区間のエントリにおける未飽和フラグに「1」を設定する。
【0300】
[ステップS304]分析部145は、未処理の集計区間があるか否かを判断する。分析部145は、未処理の集計区間があれば処理をステップS301に進める。また分析部145は、未処理の集計区間がなければ処理をステップS305に進める。
【0301】
[ステップS305]分析部145は、最大スループットを決定する。最大スループットは、例えば、飽和多重度から開始される多重度区間内に含まれる集計区間のスループットの最大値である。
【0302】
[ステップS306]分析部145は、以下の式(3)により余力を算出する。
【0303】
【数3】
【0304】
式(3)において、n(0以上の整数)は、多重度が飽和多重度を下回っている集計区間(未飽和区間)の数である。tpmaxは、飽和多重度のときに記録した最大スループットである。tpkは、未飽和区間と判定された集計区間を並べたときのk番目(kは1以上n以下の整数)の集計区間におけるスループットである。TWnumallは、分析対象期間に含まれる集計区間の総数である。
【0305】
式(3)は、未飽和区間のスループットと最大スループットとの差分が、最大スループットに占める割合の平均値に、全ての集計区間に対する未飽和区間の区間数の割合を掛け合わせたものである。この計算の結果、処理対象となっている階層の残存処理能力が算出される。
【0306】
図43は、余力計算処理を説明する図である。図43には、説明をわかりやすくするため、集計区間の総数が11の場合の例を示している。図43の例では、飽和多重度以下の多重度を持つ集計区間(未飽和区間)の数は5であり、最大スループットは2800である。よって、上記の式(3)は次のようになる。
双方向矢印で示された差分の総和/(2800×5)×5/11
ここで重要なのは、余力の計算において、飽和多重度よりも多重度が高い集計区間は、スループットが最大スループットより少なくても、残存処理能力に加えないことである。換言すると、飽和多重度を境界として、その前後で領域を分けて、飽和多重度以下の場合のみ、最大スループットとの差分を残存処理能力として計算している。例えば図43の多重度10以上の各集計区間のスループットは、最大スループットより少ない。しかしこの集計区間は、高多重度による過負荷のためにスループットが低下しているものと考えられる。過負荷によるスループットの低下が生じている集計区間には残存処理能力はないため、残存処理能力としては加えられていない。
【0307】
なお、全ての集計区間について、最大スループットと各集計区間のスループットの差分を求めて、その平均値を計算する方法を取ると、飽和多重度を過ぎて過負荷のオーバヘッドによるスループット低下が起きている場合まで、残存処理能力に加算されてしまう。第6の実施の形態では、このような過負荷のオーバヘッドによりスループットが低下している集計区間の残存処理能力を「0」にすることで、余力計算の正確性を向上させている。
【0308】
しかも、第6の実施の形態によって、処理性能が完全には飽和していない半飽和状態の階層においても、あとどれだけの処理能力を残しているかが見積もれるようになる。これによって、システム全体の処理能力が完全飽和する前に対策を打つことが可能になる。また、飽和状態の階層をスケールアウト(マシン台数の増加)して性能強化した時に、2番目に弱い階層が、あとどれだけ負荷量を増加した時に次にボトルネックとなるかを見積もることも可能となる。
【0309】
〔第7の実施の形態〕
次に第7の実施の形態について説明する。第7の実施の形態は、集計区間の長さの最適値を自動的に求めるものである。なお、第7の実施の形態を実現するシステム構成は第2の実施の形態と同様である。そこで、図6に示した第2の実施の形態の各要素を用いて第7の実施の形態の機能を説明する。
【0310】
第2の実施の形態では「異種ジョブ間でのハードウェア資源消費量の差異」は正規化しているが、「同種ジョブでも、各ジョブ間でのハードウェア資源消費量の差異」によって発生する揺らぎは、平均化されることを期待している。平均化のためには、集計区間に含まれるジョブの数は多い方が良いので、集計区間は長い方が有利になる。その一方で、集計区間が長くなると、その中での多重度推移が大きくなり、多重度とスループットの関係を正確に測れなくなる。そこで第7の実施の形態では、同一種ジョブ間でのハードウェア資源消費量の差異が許容できる範囲に収まるように、以下の方法で適切な長さの集計区間を決定する。
【0311】
第7の実施の形態では、多重度が低い区間では、多重度とスループットが正比例に近い関係を示すことを利用する。ただし、集計区間を短く設定しすぎた場合は、同種ジョブ内でのハードウェア資源消費量の差異によって発生する揺らぎが平均化されず、多重度とスループットの関係を乱すことになる。そのことを利用して、以下の手順で、個々のジョブ間の差異が平均化されるのに十分な集計区間の長さを求める。なお集計区間長の決定処理は、例えば図16に示した第2の実施の形態における階層別性能分析処理における、ステップS121の前に行われる。
【0312】
図44は、集計区間長決定処理の手順を示すフローチャートである。以下、図44に示す処理をステップ番号に沿って説明する。
[ステップS401]集計部141は、集計区間長の初期値を設定する。設定する初期値は、想定される集計区間長よりも非常に小さな値とする。例えば仮集計区間長として10msを設定する。
【0313】
[ステップS402]集計部141は、分析対象期間を仮集計区間長で分割する。これにより、複数の集計区間が生成される。
[ステップS403]集計部141は、ステップS404〜ステップS407の処理が未処理の集計区間のうちの1つを選択する。
【0314】
[ステップS404]集計部141は、選択した集計区間の多重度を計算する。
[ステップS405]集計部141は、選択した集計区間の多重度が閾値より低いか否かを判断する。閾値としては、例えば0.5や1.0といった値が予め集計部141に設定されている。集計部141は、多重度が閾値より低ければ、処理をステップS406に進める。また集計部141は、多重度が閾値以上であれば、処理をステップS403に進める。
【0315】
[ステップS406]集計部141は、選択した集計区間のスループットを計算する。
[ステップS407]集計部141は、多重度が閾値より低いとi番目(iは、1以上の整数)に判断された集計区間について、「スループット÷多重度」の逆正接となる角度θiを、以下の式で求める。
θi=tan-1(tpi/ldi)
[ステップS408]集計部141は、未処理の集計区間があるか否かを判断する。集計部141は、未処理の集計区間がある場合、処理をステップS403に進める。また集計部141は、全ての集計区間に対してステップS404〜ステップS407の処理が終了していれば、処理をステップS409に進める。
【0316】
[ステップS409]集計部141は、多重度が閾値より低い集計区間が十分にあるか否かを判断する。例えば集計部141は、集計区間の総数に対する、多重度が閾値より低い集計区間の割合が、予め設定された所定値以上であれば、多重度が閾値より低い集計区間が十分にあると判断する。集計部141は、多重度が閾値より低い集計区間が十分にあれば、処理をステップS411に進める。また集計部141は、多重度が閾値より低い集計区間が十分にはなければ、処理をステップS410に進める。
【0317】
[ステップS410]集計部141は、多重度が閾値より低い集計区間が十分にない場合、集計区間長を決定するには負荷が過大であり、集計区間長を決定できないと判断し、集計区間長決定処理を終了する。
【0318】
なお集計区間長が決定できなかった場合、集計部141は、以後の処理(図16のステップS121)では、例えば予め設定されていた値(例えば100ms)を集計区間長とする。また集計区間長が決定できなかった場合、集計部141は、以後の処理において、同一階層の他の解析対象区間に対する集計区間長決定処理で求められた集計区間長を使用することもできる。
【0319】
[ステップS411]集計部141は、変動係数CVを算出する。変動係数CVは、相対的なばらつきを表す数値である。変動係数CVは、ステップS407で得られた角度θiの標準偏差を、平均値で割ることによって得られる。式で表すと以下の式となる。
【0320】
【数4】
【0321】
ここで、mはステップS406に処理が進んだ集計区間の数である。
[ステップS412]集計部141は、変動係数が所定の閾値より大きいか否かを判断する。所定の閾値としては、例えば0.1が設定される。集計部141は、変動係数が所定の閾値より大きければ、処理をステップS413に進める。また集計部141は、変動係数が所定の閾値以下であれば、処理をステップS414に進める。
【0322】
[ステップS413]集計部141は、仮集計区間長を一定割合長くする。例えば集計部141は、現在の仮集計区間長に10msを加算した値を、新たな仮集計区間長とする。その後、集計部141は、処理をステップS402に進め、新たな仮集計区間長の場合の変動係数を計算する。
【0323】
[ステップS414]集計部141は、変動係数が閾値以下になった場合、現在の仮集計区間長を、集計区間長に決定する。
このようにして、最適な集計区間長を決定することができる。この手法は、多重度が低い時(例えば常に1以下)には、多重度(ジョブ量)の増加に伴ってスループットは単調に増加するという考えに基づいている。多重度が低い時に限って、その両者の関係を測定し、それが一定の分布の範囲に収まっていれば、集計区間長は短すぎず、同一種ジョブ間でのハードウェア資源消費量の差異は平均化されていると判断する。逆に、多重度とスループットの関係の分散が大きい時には、同一種ジョブ間でのハードウェア資源消費量の差異の影響が出ていると判断し、集計区間長を大きくする。
【0324】
第7の実施の形態によって、収集されたデータから集計区間の長さを自動的に決定できるようになり、集計区間を事前に調整する手間が省ける。また、不適切な集計区間の設定によって、誤った性能分析結果を得ることも避けられる。
【0325】
〔第8の実施の形態〕
次に第8の実施の形態について説明する。第8の実施の形態は、最適化のための低負荷時の平均処理時間を、分析対象期間に取得された時系列データの中から取得するものである。なお、第8の実施の形態を実現するシステム構成は第2の実施の形態と同様である。そこで、図6に示した第2の実施の形態の各要素を用いて第8の実施の形態の機能を説明する。
【0326】
第2の実施の形態におけるスループットの正規化では、低負荷時に予め採取したデータから算出した平均処理時間を使用している(図23参照)。第8の実施の形態は、この平均処理時間を、性能分析に使用するのと同一の時系列データから採取する。
【0327】
図45は、低負荷時の平均処理時間算出処理の一例を示すフローチャートである。この処理は、例えば、図9に示した第2の実施の形態のステップS113の処理の後に実行される。以下、図45に示す処理をステップ番号に沿って説明する。
【0328】
[ステップS501]集計部141は、分析対象期間を集計区間長で、複数の集計区間に分割する。
[ステップS502]集計部141は、ステップS503〜S505の処理が未処理の集計区間を1つ選択する。
【0329】
[ステップS503]集計部141は、選択した集計区間の多重度を計算する。例えば集計部141は、処理中の階層のサーバで選択した集計区間内に存在しているジョブの、集計区間内での処理時間の合計を求める。そして集計部141は、求めた合計を集計区間長で除算し、除算結果を集計区間の多重度とする。
【0330】
[ステップS504]集計部141は、選択した集計区間の多重度が、所定の閾値より低いか否かを判断する。所定の閾値としては、例えば0.5や1.0という値が予め設定される。集計部141は、多重度が閾値より低い場合、処理をステップS505に進める。また集計部141は、多重度が閾値以上の場合、処理をステップS506に進める。
【0331】
[ステップS505]集計部141は、選択した集計区間を、低負荷区間のリストに登録する。低負荷区間のリストは、例えばRAM103内に保持される。
[ステップS506]集計部141は、ステップS503〜S505の処理が未処理の集計区間があるか否かを判断する。集計部141は、未処理の集計区間があれば、処理をステップS502に進める。また集計部141は、未処理の集計区間がなければ、処理をステップS507に進める。
【0332】
[ステップS507]集計部141は、低負荷区間のリストに含まれる集計区間内で実行されたジョブを用いて、ジョブ種ごとの平均処理時間を計算する。集計部141は、計算したジョブ種ごとの平均処理時間を、正規化スループット値記憶部143に格納する。
【0333】
[ステップS508]集計部141は、ジョブ種ごとの平均処理時間を用いて、各ジョブ種の1ジョブ当たりの正規化されたスループット値を計算する。1ジョブ当たりの正規化されたスループット値の計算手法は、第2の実施の形態で説明した通りである。集計部141は、計算したジョブごとの正規化されたスループット値を、正規化スループット値記憶部143に格納する。
【0334】
なお第4の実施の形態のように、出力されるメッセージ数でスループットを計算する場合もある。この場合、ステップS508の処理では、集計部141は、1ジョブ当たりの正規化されたスループット値の計算に代えて、各ジョブ種の1メッセージ当たりの正規化されたスループット値を計算する。1メッセージ当たりの正規化されたスループット値の計算手法は、第4の実施の形態で説明した通りである。
【0335】
このようにして、分析対象期間に採取された時系列データから、ジョブ種ごとの平均処理時間を算出することができる。
図46は、多重度が閾値以下の集計区間の抽出例を示す図である。図46の例では、5秒分の時系列データの50の集計区間(集計区間長は0.1秒)の中で、多重度が1.0以下の集計区間が23個含まれている。そして、多重度が1.0以下の23個の集計区間に含まれているジョブだけから、ジョブ種ごとの平均処理時間が計算される。多重度が低いこれらの区間は、ジョブ同士の衝突が少なく、理想的な処理時間に近い値が収集できる。
【0336】
ここで、多重度の閾値を0.5に設定すると、得られる集計区間の数は14に下がる。この閾値は低く設定した方が、ジョブ同士の衝突が少なく、算出される平均処理時間の精度は高くなる。他方、閾値は低く設定しすぎると、得られるデータ量が少なくなり、平均処理時間を計算できないジョブ種が生じる可能性がある。
【0337】
第8の実施の形態の手法は、一般的に多重度は増減が激しいものなので、ある程度の長さの時系列データを収集すれば、その中には多重度の低い部分も含まれていることが多いという考えに基づいている。また、多重度が低い部分は、ジョブ同士の衝突が起きる確率が低いので、理想に近い平均処理時間が得られるという考えにも基づいている。
【0338】
このように分析対象期間の時系列データからジョブ種ごとの平均処理時間を算出することによって、低負荷時のデータを別途収集する必要がなくなるので、管理者の手間が省ける。しかも、同一の時系列データから全ての情報を取得し、事前に取得する情報を必要としないので、負荷の特性(例えばジョブの平均処理時間など)が動的に変化した場合にも、適切な平均処理時間に基づく分析ができる。すなわち、正規化用の平均応答時間を測定した時の負荷と実運用時の負荷との負荷傾向の違いによって引き起こされる性能分析の不正確さを避けることができる。
【0339】
〔第9の実施の形態〕
次に第9の実施の形態について説明する。第9の実施の形態は、瞬間スループット低下を検出するものである。なお、第9の実施の形態を実現するシステム構成は第2の実施の形態と同様である。そこで、図6に示した第2の実施の形態の各要素を用いて第9の実施の形態の機能を説明する。
【0340】
Appサーバ300上でJava(登録商標)VMがFull−GCを起こした場合には、非常に短い時間の間、Java(登録商標)VMの動作が止まり、Appサーバ300の階層のスループットが一瞬だけ急激に低下することがある。このような現象が発生していることは、以下の手順で検出することが可能である。なお以下の瞬間スループット低下検出処理は、例えば図16に示した第2の実施の形態のボトルネック判定処理(ステップS124)に代えて、分析部145により実行される。なお、分析部145は、図16に示した第2の実施の形態のボトルネック判定処理(ステップS124)と瞬間スループット低下検出処理との両方を実行することもできる。
【0341】
図47は、瞬間スループット低下検出処理の手順を示すフローチャートである。また以下、図47に示す処理をステップ番号に沿って説明する。
[ステップS601]分析部145は、集計区間を1つ選択する。例えば分析部145は、処理対象となっている階層に対応する集計区間管理テーブル(図22参照)の上位から順に、集計区間を選択する。
【0342】
[ステップS602]分析部145は、集計区間の多重度の最小値と最大値とを求める。
[ステップS603]分析部145は、ステップS602の処理が未処理の集計区間があるか否かを判断する。分析部145は、未処理の集計区間があれば、処理をステップS601に進める。また分析部145は、未処理に集計区間がなければ、処理をステップS604に進める。
【0343】
[ステップS604]分析部145は、多重度の最小値と最大値との間を等間隔に分割する。例えば分析部145は、多重度の最小値と最大値の間を、一定数(例えば100)もしくは一定間隔ごと(例えば多重度0.1ごと)に分割する。例えば図26に示す散布図に示されるような多重度が得られた場合、0と50の間を0.5刻みで100分割する(説明を簡便にするために50を超えている多重度は無視している)。分割によって、複数の多重度区間が生成される。
【0344】
[ステップS605]分析部145は、分割によって生成された多重度区間のうち、ステップS606〜S607の処理が未処理の多重度区間を1つ選択する。
[ステップS606]分析部145は、スループットの統計上の信頼区間を算出する。例えば分析部145は、選択した多重度区間の範囲に属する多重度を持つ全ての集計区間から、スループットの平均値と標準偏差を計算し、以下の式(5)の信頼区間を得る。ここでは、例として信頼度を95%として信頼区間を求める。
【0345】
【数5】
【0346】
式(5)中で、1.96は95%信頼区間の定数である。
[ステップS607]分析部145は、スループットが信頼区間の下限未満の集計区間を計数する。
【0347】
[ステップS608]分析部145は、ステップS606〜S607の処理が未処理の多重度区間があるか否かを判断する。分析部145は、未処理の多重度区間があれば、処理をステップS605に進める。また分析部145は、未処理の多重度区間がなければ、処理をステップS609に進める。
【0348】
[ステップS609]分析部145は、集計区間全体に対する、ステップS607で計数されたスループットが信頼区間の下限未満であった集計区間の割合を算出する。例えば分析部145は、95%信頼区間を求めた場合、スループットの95%信頼区間を下回るスループットを持っていた集計区間の割合を求める。
【0349】
[ステップS610]分析部145は、ステップS609で算出した割合が、閾値を超えているか否かを判断する。このときの閾値は、集計区間のスループットが信頼区間の下限を下回る統計的な確率よりも大きな値が、予め設定される。例えば95%信頼区間の場合は、下限を下回る統計的確率が2.5%あるので、それよりも大きな値(例えば5%)が、閾値に設定される。分析部145は、割合が閾値を超えている場合、処理をステップS611に進める。また分析部145は、割合が閾値を超えていない場合、処理をステップS612に進める。
【0350】
[ステップS611]分析部145は、異常な瞬間スループットの低下が発生していると判断する。分析部145は、例えば判断結果をモニタ11に表示する。その後、分析部145は、瞬間スループット低下検出処理を終了する。
【0351】
[ステップS612]分析部145は、異常な瞬間スループットの低下が発生していないと判断する。分析部145は、例えば判断結果をモニタ11に表示する。その後、分析部145は、瞬間スループット低下検出処理を終了する。
【0352】
このようにして、信頼区間を下回るスループットを持つ集計区間の、全体に占める割合が、予め決めた閾値を超えた場合は、その階層において異常な瞬間スループット低下が発生していると判断される。例えばAppサーバ300上のJava(登録商標)VMがFull−GCを起こした場合などのように、多重度に関係なく瞬間的なスループット低下を起こした場合に、演算処理によって、異常な瞬間スループット低下の発生を検出することが可能となる。
【0353】
図48は、第9の実施の形態により異常な瞬間スループット低下が検出される散布図の一例である。図48に示すように、Java(登録商標)VMのFull−GCなどによって引き起こされた異常な瞬間スループット低下の発生が、容易に検出できる。
【0354】
なお、第9の実施の形態は、第4の実施の形態と組み合わせることで、効果が顕著となる。例えば、図38、図39で示したように、第4の実施の形態を用いると瞬間的なスループット低下が顕著に表れる。このように顕在化させた瞬間スループットの低下を、第9の実施の形態の手法によって、機械的処理で検出可能となる。
【0355】
〔その他の実施形態〕
第2の実施の形態では、ネットワークからキャプチャしたIPパケットに基づいてメッセージを再現しているが、この手法はプロトコルメッセージを再現する手法の1つに過ぎず、他の手法でメッセージを再現することも可能である。例えば、多階層システムに含まれる各サーバで、実行したジョブのログを記録しておき、各サーバに記録されたログに基づいてメッセージを再現することも可能である。
【0356】
ただし、IPパケットをキャプチャしてメッセージを再現すれば、コンピュータ間の時計誤差の問題の発生が抑止されるという利点がある。すなわち、多階層システムにおいて、各サーバの時刻を正確に一致させるのは難しく、若干の誤差が生じてしまうことが多い。しかし、メッセージフローを再現するには、異なるサーバから送信されたメッセージ間の前後関係を正確に判別できることが重要である。複数のサーバの時刻間にずれがあると、各サーバでデータを採取した時刻にずれが生じ、メッセージフローの再現性が低下する。各階層のサーバでログを記録する手法の場合、異なるサーバのログを比較する際に、各ログの時刻が不正確であることで、ログ間の前後関係の正確な判定が困難となる。他方、IPパケットを1つの装置でキャプチャすれば、パケットが転送された時刻の前後関係を正確に判断できる。その結果、メッセージを正確に再現することが可能となる。
【0357】
また、IPパケットをキャプチャしてメッセージを再現する手法には、多階層システムに含まれるサーバにおいてデータを保存したり、保存したデータを分析装置に転送したりする処理が不要である利点もある。例えば多階層システムに含まれる各サーバで取得したログからメッセージを再現する手法では、各サーバがログを記憶し、さらに記憶したログを分析装置に転送することとなる。IPパケットをキャプチャしてメッセージを再現する手法であれば、各サーバでログを記憶せずにすみ、ネットワーク上に新たなパケット転送を生じさせることもない。
【0358】
なお、上記の各実施の形態に示した処理機能は、コンピュータによって実現することができる。その場合、情報処理装置1または分析サーバ100が有する機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、フレキシブルディスク(FD)、磁気テープなどがある。光ディスクには、DVD、DVD−RAM、CD−ROM/RWなどがある。光磁気記録媒体には、MOなどがある。
【0359】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【0360】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【0361】
また、上記の処理機能の少なくとも一部を、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現することもできる。
【0362】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。ただし、スループットを算出する具体的な手法については、第2の実施の形態と第4の実施の形態とのいずれか一方の手法を採用することができる。また、飽和多重度の決定手法については、第2の実施の形態と第5の実施の形態とのいずれかの手法を採用することができる。
【0363】
以上の実施の形態に開示された技術には、以下の付記に示す技術が含まれる。
(付記1) コンピュータに、
分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段から取得し、該取得した情報に基づいて、前記分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間と、集計区間内で実行された処理それぞれの進行量を合計した合計進行量とを計算し、
集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定し、
合計処理時間が前記閾値以上の集計区間を検出する、
処理を実行させるプログラム。
【0364】
(付記2) 集計区間で実行された処理の進行量は、該処理を依頼した処理要求に応じて実行される処理全体のうちの、該集計区間で実行された割合であることを特徴とする付記1記載のプログラム。
【0365】
(付記3) 集計区間で実行された処理の進行量は、該処理を依頼した処理要求に応じて実行される処理全体のうちの、該集計区間で実行された割合に、各処理種別に属する処理の低負荷時の処理時間に基づく重み付けを行った値であることを特徴とする付記1記載のプログラム。
【0366】
(付記4) 集計区間の総数に対する、前記閾値以上の合計処理時間の集計区間の割合が所定数以上の場合、前記分析対象期間において前記分析対象装置の処理が処理能力の限界に達していると判断することを特徴とする付記1乃至3のいずれかに記載のプログラム。
【0367】
(付記5) 他の装置への処理要求の送信を伴う処理については、処理の最初の実行期間を除外して、合計処理時間と合計進行量とを計算することを特徴とする付記1乃至4のいずれかに記載のプログラム。
【0368】
(付記6) 集計区間で実行された処理の進行量は、該集計区間に出力されたメッセージ数に応じた値であることを特徴とする付記1記載のプログラム。
(付記7) 集計区間で実行された処理の進行量は、該処理の全体で出力されるメッセージ数のうち、該集計区間に出力されたメッセージ数の割合に、各処理種別に属する処理の低負荷時の処理時間に基づく重み付けを行った値であることを特徴とする付記6記載のプログラム。
【0369】
(付記8) 集計区間それぞれの合計処理時間の最小値から最大値までの範囲を細分化して得られる細分化区間ごとに、細分化区間内の合計処理時間を有する集計区間の合計処理時間を平均した平均処理時間と、細分化区間内の合計処理時間を有する集計区間の合計進行量を平均した平均処理進行量とを計算し、隣接する細分化区間における平均処理時間の増加量に対する平均処理進行量の変化量を示す傾きを計算し、隣接する細分化区間の傾きに基づいて、前記閾値を決定することを特徴とする付記1乃至7のいずれかに記載のプログラム。
【0370】
(付記9) 集計区間それぞれの合計処理時間の最小値から最大値までの範囲を細分化して得られる細分化区間ごとに、細分化区間内の合計処理時間を有する集計区間から合計処理時間と合計進行量それぞれの平均値を計算し、範囲に含む合計処理時間の短い細分化区間から順に、合計処理時間と合計進行量それぞれの平均値から計算される傾きを一つずつ加えていきながら、傾きの統計上の信頼区間を求めていき、該信頼区間の下限が所定値を下回った細分化区間の合計処理時間を、前記閾値とすることを特徴とする付記1乃至7のいずれかに記載のプログラム。
【0371】
(付記10) 前記閾値未満の合計処理時間の集計区間それぞれの合計進行量と最大合計処理進行量との差分の総和を、前記分析対象装置の余力と判断することを特徴とする付記1乃至9のいずれかに記載のプログラム。
【0372】
(付記11) 分析対象期間を集計区間に分割する際には、合計処理時間が所定値より低い集計区間それぞれにおける合計処理時間と合計進行量との関係を示す数値のばらつきが所定値より低くなる範囲内の最も短い時間を、集計区間の長さとすることを特徴とする付記1乃至10のいずれかに記載のプログラム。
【0373】
(付記12) 合計処理時間が所定値以下の集計区間を抽出し、抽出した集計区間内で実行された処理の、処理種別ごとの平均処理時間を計算し、処理種別の平均処理時間に応じた値を、各処理種別に属する処理の重みとすることを特徴とする付記3または7のいずれかに記載のプログラム。
【0374】
(付記13) 集計区間それぞれの合計処理時間の最小値から最大値までの範囲を細分化して得られる細分化区間ごとに、細分化区間内の合計処理時間を有する集計区間から合計進行量の分布の統計上の信頼区間を求め、信頼区間の下限値以下の合計進行量を有する集計区間の、集計区間全体に対する割合を求め、該割合が一定の閾値を超えている場合に、前記分析対象装置において前記分析対象期間内で異常な瞬間性能低下が発生していると判断することを特徴とする付記1乃至12のいずれかに記載のプログラム。
【0375】
(付記14) コンピュータが、
分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段から取得し、該取得した情報に基づいて、前記分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間と、集計区間内で実行された処理それぞれの進行量を合計した合計進行量とを計算し、
集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定し、
合計処理時間が前記閾値以上の集計区間を検出する、
処理を実行する分析方法。
【0376】
(付記15) 分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段から取得し、該取得した情報に基づいて、前記分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間と、集計区間内で実行された処理それぞれの進行量を合計した合計進行量とを計算する計算手段と、
集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定する決定手段と、
合計処理時間が前記閾値以上の集計区間を検出する検出手段と、
を有する情報処理装置。
【符号の説明】
【0377】
1 情報処理装置
1a 監視手段
1b 記憶手段
1c 計算手段
1d 決定手段
1e 検出手段
2 ネットワーク
3 端末装置
4 Webサーバ
5 Appサーバ
6 DBサーバ
【特許請求の範囲】
【請求項1】
コンピュータに、
分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段から取得し、該取得した情報に基づいて、前記分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間と、集計区間内で実行された処理それぞれの進行量を合計した合計進行量とを計算し、
集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定し、
合計処理時間が前記閾値以上の集計区間を検出する、
処理を実行させるプログラム。
【請求項2】
集計区間で実行された処理の進行量は、該処理を依頼した処理要求に応じて実行される処理全体のうちの、該集計区間で実行された割合に、各処理種別に属する処理の低負荷時の処理時間に基づく重み付けを行った値であることを特徴とする請求項1記載のプログラム。
【請求項3】
集計区間の総数に対する、前記閾値以上の合計処理時間の集計区間の割合が所定数以上の場合、前記分析対象期間において前記分析対象装置の処理が処理能力の限界に達していると判断することを特徴とする請求項1乃至2のいずれかに記載のプログラム。
【請求項4】
他の装置への処理要求の送信を伴う処理については、処理の最初の実行期間を除外して、合計処理時間と合計進行量とを計算することを特徴とする請求項1乃至3のいずれかに記載のプログラム。
【請求項5】
集計区間で実行された処理の進行量は、該集計区間に出力されたメッセージ数に応じた値であることを特徴とする請求項1記載のプログラム。
【請求項6】
集計区間それぞれの合計処理時間の最小値から最大値までの範囲を細分化して得られる細分化区間ごとに、細分化区間内の合計処理時間を有する集計区間から合計処理時間と合計進行量それぞれの平均値を計算し、範囲に含む合計処理時間の短い細分化区間から順に、合計処理時間と合計進行量それぞれの平均値から計算される傾きを一つずつ加えていきながら、傾きの統計上の信頼区間を求めていき、該信頼区間の下限が所定値を下回った細分化区間の合計処理時間を、前記閾値とすることを特徴とする請求項1乃至5のいずれかに記載のプログラム。
【請求項7】
前記閾値未満の合計処理時間の集計区間それぞれの合計進行量と最大合計処理進行量との差分の総和を、前記分析対象装置の余力と判断することを特徴とする請求項1乃至6のいずれかに記載のプログラム。
【請求項8】
分析対象期間を集計区間に分割する際には、合計処理時間が所定値より低い集計区間それぞれにおける合計処理時間と合計進行量との関係を示す数値のばらつきが所定値より低くなる範囲内の最も短い時間を、集計区間の長さとすることを特徴とする請求項1乃至7のいずれかに記載のプログラム。
【請求項9】
合計処理時間が所定値以下の集計区間を抽出し、抽出した集計区間内で実行された処理の、処理種別ごとの平均処理時間を計算し、処理種別の平均処理時間に応じた値を、各処理種別に属する処理の重みとすることを特徴とする請求項2記載のプログラム。
【請求項10】
集計区間それぞれの合計処理時間の最小値から最大値までの範囲を細分化して得られる細分化区間ごとに、細分化区間内の合計処理時間を有する集計区間から合計進行量の分布の統計上の信頼区間を求め、信頼区間の下限値以下の合計進行量を有する集計区間の、集計区間全体に対する割合を求め、該割合が一定の閾値を超えている場合に、前記分析対象装置において前記分析対象期間内で異常な瞬間性能低下が発生していると判断することを特徴とする請求項1乃至9のいずれかに記載のプログラム。
【請求項11】
コンピュータが、
分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段から取得し、該取得した情報に基づいて、前記分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間と、集計区間内で実行された処理それぞれの進行量を合計した合計進行量とを計算し、
集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定し、
合計処理時間が前記閾値以上の集計区間を検出する、
処理を実行する分析方法。
【請求項12】
分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段から取得し、該取得した情報に基づいて、前記分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間と、集計区間内で実行された処理それぞれの進行量を合計した合計進行量とを計算する計算手段と、
集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定する決定手段と、
合計処理時間が前記閾値以上の集計区間を検出する検出手段と、
を有する情報処理装置。
【請求項1】
コンピュータに、
分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段から取得し、該取得した情報に基づいて、前記分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間と、集計区間内で実行された処理それぞれの進行量を合計した合計進行量とを計算し、
集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定し、
合計処理時間が前記閾値以上の集計区間を検出する、
処理を実行させるプログラム。
【請求項2】
集計区間で実行された処理の進行量は、該処理を依頼した処理要求に応じて実行される処理全体のうちの、該集計区間で実行された割合に、各処理種別に属する処理の低負荷時の処理時間に基づく重み付けを行った値であることを特徴とする請求項1記載のプログラム。
【請求項3】
集計区間の総数に対する、前記閾値以上の合計処理時間の集計区間の割合が所定数以上の場合、前記分析対象期間において前記分析対象装置の処理が処理能力の限界に達していると判断することを特徴とする請求項1乃至2のいずれかに記載のプログラム。
【請求項4】
他の装置への処理要求の送信を伴う処理については、処理の最初の実行期間を除外して、合計処理時間と合計進行量とを計算することを特徴とする請求項1乃至3のいずれかに記載のプログラム。
【請求項5】
集計区間で実行された処理の進行量は、該集計区間に出力されたメッセージ数に応じた値であることを特徴とする請求項1記載のプログラム。
【請求項6】
集計区間それぞれの合計処理時間の最小値から最大値までの範囲を細分化して得られる細分化区間ごとに、細分化区間内の合計処理時間を有する集計区間から合計処理時間と合計進行量それぞれの平均値を計算し、範囲に含む合計処理時間の短い細分化区間から順に、合計処理時間と合計進行量それぞれの平均値から計算される傾きを一つずつ加えていきながら、傾きの統計上の信頼区間を求めていき、該信頼区間の下限が所定値を下回った細分化区間の合計処理時間を、前記閾値とすることを特徴とする請求項1乃至5のいずれかに記載のプログラム。
【請求項7】
前記閾値未満の合計処理時間の集計区間それぞれの合計進行量と最大合計処理進行量との差分の総和を、前記分析対象装置の余力と判断することを特徴とする請求項1乃至6のいずれかに記載のプログラム。
【請求項8】
分析対象期間を集計区間に分割する際には、合計処理時間が所定値より低い集計区間それぞれにおける合計処理時間と合計進行量との関係を示す数値のばらつきが所定値より低くなる範囲内の最も短い時間を、集計区間の長さとすることを特徴とする請求項1乃至7のいずれかに記載のプログラム。
【請求項9】
合計処理時間が所定値以下の集計区間を抽出し、抽出した集計区間内で実行された処理の、処理種別ごとの平均処理時間を計算し、処理種別の平均処理時間に応じた値を、各処理種別に属する処理の重みとすることを特徴とする請求項2記載のプログラム。
【請求項10】
集計区間それぞれの合計処理時間の最小値から最大値までの範囲を細分化して得られる細分化区間ごとに、細分化区間内の合計処理時間を有する集計区間から合計進行量の分布の統計上の信頼区間を求め、信頼区間の下限値以下の合計進行量を有する集計区間の、集計区間全体に対する割合を求め、該割合が一定の閾値を超えている場合に、前記分析対象装置において前記分析対象期間内で異常な瞬間性能低下が発生していると判断することを特徴とする請求項1乃至9のいずれかに記載のプログラム。
【請求項11】
コンピュータが、
分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段から取得し、該取得した情報に基づいて、前記分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間と、集計区間内で実行された処理それぞれの進行量を合計した合計進行量とを計算し、
集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定し、
合計処理時間が前記閾値以上の集計区間を検出する、
処理を実行する分析方法。
【請求項12】
分析対象装置で分析対象期間内に実行された処理の実行期間を示す情報を記憶手段から取得し、該取得した情報に基づいて、前記分析対象期間を細分化して得られる集計区間ごとに、集計区間内で実行された処理それぞれの実行に費やされた時間を合計した合計処理時間と、集計区間内で実行された処理それぞれの進行量を合計した合計進行量とを計算する計算手段と、
集計区間ごとの合計処理時間と合計進行量とに基づいて、合計処理時間の増加量に対する合計進行量の増加量が所定値以下となる合計処理時間の閾値を決定する決定手段と、
合計処理時間が前記閾値以上の集計区間を検出する検出手段と、
を有する情報処理装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図40】
【図41】
【図42】
【図43】
【図44】
【図45】
【図46】
【図47】
【図48】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図40】
【図41】
【図42】
【図43】
【図44】
【図45】
【図46】
【図47】
【図48】
【公開番号】特開2013−97783(P2013−97783A)
【公開日】平成25年5月20日(2013.5.20)
【国際特許分類】
【出願番号】特願2012−26293(P2012−26293)
【出願日】平成24年2月9日(2012.2.9)
【出願人】(000005223)富士通株式会社 (25,993)
【出願人】(507071073)ジョージア・テック・リサーチ・コーポレーション (4)
【Fターム(参考)】
【公開日】平成25年5月20日(2013.5.20)
【国際特許分類】
【出願日】平成24年2月9日(2012.2.9)
【出願人】(000005223)富士通株式会社 (25,993)
【出願人】(507071073)ジョージア・テック・リサーチ・コーポレーション (4)
【Fターム(参考)】
[ Back to top ]