(57)【要約】【課題】複数のＯＳを含むシステムにおけるプログラムの異常の発生原因を容易に分析する。【解決手段】分析プログラムは、複数のオペレーティングシステムが第１時間間隔毎に動作中のプログラムに対してサンプリングして得た、動作中の関数を識別可能な情報を取得し、関数毎に、取得された情報の数を集計し、情報の数が所定の条件を満たす関数について、第２時間間隔毎の情報の数を示す時系列データを生成し、時系列データに基づいて、複数の関数同士の因果関係分析を実行し、関数同士の因果関係分析結果を出力する処理をコンピュータに実行させる。【選択図】図１８
2020101938.tif 000002
【特許請求の範囲】
【請求項１】
複数のオペレーティングシステムが第１時間間隔毎に動作中のプログラムに対してサンプリングして得た、動作中の関数を識別可能な情報を取得し、
前記関数毎に、取得された前記情報の数を集計し、
前記情報の数が所定の条件を満たす関数について、第２時間間隔毎の前記情報の数を示す時系列データを生成し、
前記時系列データに基づいて、複数の前記関数同士の因果関係分析を実行し、
前記関数同士の因果関係分析結果を出力する
処理をコンピュータに実行させるための分析プログラム。
【請求項２】
前記複数のオペレーティングシステムは、仮想マシンのオペレーティングシステムおよび前記仮想マシンが稼動するホスト装置のオペレーティングシステムを含み、
前記複数のオペレーティングシステムが前記第１時間間隔毎に動作中のプログラムに対してサンプリングして得た、前記動作中の関数を識別可能な情報を取得する
処理を前記コンピュータに実行させることを特徴とする請求項１記載の分析プログラム。
【請求項３】
前記因果関係分析において、前記第２時間間隔内の全ての前記情報の数に対する、前記第２時間間隔内のいずれかの関数を識別可能な前記情報の数の割合を前記いずれかの関数の動作確率として用いて、ベイズ推定を実行することにより、前記いずれかの前記関数が動作した場合に他の前記関数が動作していた確率を算出し、
算出された前記確率を前記因果関係分析結果として出力する
処理を前記コンピュータに実行させることを特徴とする請求項１または２記載の分析プログラム。
【請求項４】
前記複数のオペレーティングシステムに対するレイテンシを測定し、
前記複数のオペレーティングシステムにサンプリング実行指示を送信してから、前記レイテンシが経過するまでの時間に基づく除外対象時間を、前記情報の数の集計対象の時間および前記時系列データの生成対象の時間から除外する
処理を前記コンピュータに実行させることを特徴とする請求項１乃至３のうち何れか１項に記載の分析プログラム。
【請求項５】
複数のオペレーティングシステムが第１時間間隔毎に動作中のプログラムに対してサンプリングして得た、動作中の関数を識別可能な情報を取得する取得部と、
前記関数毎に、取得された前記情報の数を集計する集計部と、
前記情報の数が所定の条件を満たす関数について、第２時間間隔毎の前記情報の数を示す時系列データを生成する生成部と、
前記時系列データに基づいて、複数の前記関数同士の因果関係分析を実行する分析部と、
前記関数同士の因果関係分析結果を出力する出力部と
を備えることを特徴とする分析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分析プログラム、および分析装置に関する。
【背景技術】
【０００２】
物理サーバ上で複数の仮想マシンが稼動するシステムにおいて、処理の遅延等の異常が発生した場合、原因の分析が行われる。この際、例えば、仮想マシンの動作状態を含むトレースデータ等を用いた原因の分析が行われる。
【０００３】
関連する技術として、複数のユーザ端末における遅延時間を記録し、遅延時間が閾値内にあることを条件としてユーザ端末からのリクエストを実行する技術が提案されている（例えば、特許文献１を参照）。
【０００４】
また、関連する技術として、物理計算機上で得られたトレースデータに基づいて、物理計算機上で稼動する仮想計算機上で得られたトレースデータを編集する技術が提案されている（例えば、特許文献２を参照）。
【０００５】
また、関連する技術として、仮想マシン上のプロセスの動作状態を含むトレース情報と複数の仮想マシンで動作するプロセスを識別するシンボルマップを関連付ける技術が提案されている（例えば、特許文献３を参照）。
【０００６】
また、関連する技術として、大規模分散処理システムにおいて、遅延している処理を抽出し、抽出した処理に関わるデータの入出力が実行された箇所を特定する技術が提案されている（例えば、特許文献４を参照）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１５−１３９６９９号公報
【特許文献２】特開２０１７−１２９９３１号公報
【特許文献３】特開２０１４−１７０４８２号公報
【特許文献４】特開２０１３−１７１５４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
複数のOperating System（ＯＳ）のうちのいずれかのＯＳ上で動作するプログラムで発生した異常の原因が、他のＯＳ上で動作するプログラムに存在する可能性がある。例えば、仮想マシン上でプログラムの動作中に異常が発生した場合、異常の発生原因が、他の仮想マシンまたはホストＯＳ等に存在する可能性がある。その場合、分析ツールを用いて異常の発生原因を分析したとしても、その分析ツールが複数のＯＳを含むシステムの分析に対応していない場合、原因の分析は容易ではない。
【０００９】
１つの側面として、本発明は、複数のＯＳを含むシステムにおけるプログラムの異常の発生原因を容易に分析することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、分析プログラムは、複数のオペレーティングシステムが第１時間間隔毎に動作中のプログラムに対してサンプリングして得た、動作中の関数を識別可能な情報を取得し、前記関数毎に、取得された前記情報の数を集計し、前記情報の数が所定の条件を満たす関数について、第２時間間隔毎の前記情報の数を示す時系列データを生成し、前記時系列データに基づいて、複数の前記関数同士の因果関係分析を実行し、前記関数同士の因果関係分析結果を出力する処理をコンピュータに実行させる。
【発明の効果】
【００１１】
１つの側面によれば、複数のＯＳを含むシステムにおけるプログラムの異常の発生原因を容易に分析することができる。
【図面の簡単な説明】
【００１２】
【図１】実施形態のシステムの全体構成の一例を示す図である。
【図２】分析装置２の機能構成の一例を示す図である。
【図３】ＯＳのサンプリング方法の一例を示す図である。
【図４】複数の関数に対するサンプリング実施状況の一例を示す図である。
【図５】サンプルの適用除外方法の一例を示す図である。
【図６】所定時間内における関数の頻度の一例を示す図である。
【図７】所定時間内における関数の頻度の時系列データの一例を示す図である。
【図８】所定時間内における関数毎のサンプル数と頻度の一例を示す図である。
【図９】サンプル数の時系列データの一例を示す図である。
【図１０】全ＯＳのサンプル数の時系列データの一例を示す図である。
【図１１】重複データ削除後における全ＯＳのサンプル数の時系列データの一例を示す図である。
【図１２】所定時間内における全ＯＳの関数毎のサンプル数と頻度の一例を示す図である。
【図１３】関数の因果関係の第１の例を示す図である。
【図１４】関数の因果関係の第２の例を示す図である。
【図１５】計算例における、サンプル数の時系列データの一例を示す図である。
【図１６】関数の因果関係の第３の例を示す図である。
【図１７】因果関係分析結果の一例を示す図である。
【図１８】実施形態の分析装置の処理の一例を示すフローチャートである。
【図１９】本実施形態の処理の適用例を示す図である。
【図２０】分析装置のハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１３】
例えば、仮想マシンのユーザが、仮想マシン上で動作するプログラムの異常を検知し、ホスト装置の管理者に問い合わせを行うとする。プログラムの異常は、例えば、特定の関数の処理時間が長期化し、処理遅延が発生することである。そして、管理者は、異常が発生している仮想マシンの性能プロファイル調査を行った結果、異常が発生している関数が特定される。そして、異常の発生原因を特定するために、例えば、命令トレース、関数トレース、メモリダンプ等の手法が用いられる。しかし、仮想マシンで動作する関数に異常が発生し、異常の発生原因が、その仮想マシンの外部（他の仮想マシン、ハイパーバイザ、またはホストＯＳ等）に存在する可能性がある。このような場合、上記の手法は、複数のＯＳを含むシステムの分析に対応しておらず、異常の原因を特定することは困難である。
【００１４】
また、上記の各手法は、処理のオーバーヘッドが大きいという課題がある。また、関数トレースおよびメモリダンプを用いる場合、フックポイントの挿入など、プログラムの改変とリコンパイルを事前に行うため、ユーザの作業が増加する。また、関数トレースを用いる場合、調査対象が特定種類のプログラム（カーネルまたは特定のアプリケーション）に限定される可能性がある。そして、上記の各手法を用いて異常の分析を特定するためには、プログラム内容に精通しているユーザがトレースデータ、ソースコード等を分析することとなり、そのユーザの作業が増加する。
【００１５】
以下、図面を参照して、実施形態について説明する。図１は、実施形態のシステムの全体構成の一例を示す図である。実施形態のシステムは、ホスト装置１と分析装置２とを含む。実施形態のシステムは、複数のホスト装置１を含んでいてもよい。実施形態のシステムが複数のホスト装置１を含む場合、複数のホスト装置１は、Local Area Network（ＬＡＮ）、またはWide Area Network（ＷＡＮ）等の通信ネットワークを介して相互に通信を行うことができる。ホスト装置１および分析装置２は、例えば、サーバ、またはパーソナルコンピュータ等が適用される。分析装置２は、コンピュータの一例である。
【００１６】
ホスト装置１は、ホストＯＳ１１と、ホストＯＳ１１上で稼動する仮想マシン１２とを含む。図１に示す例では、一つのホスト装置１で稼動する仮想マシン１２の数は３であるが、仮想マシン１２の数は、他の数であってもよい。仮想マシン１２は、例えば、図示しない仮想化ソフトウェア上で稼動する。ホスト装置１は、ホストＯＳ１１および仮想化ソフトウェアの代わりにハイパーバイザを含んでいてもよい。
【００１７】
仮想マシン１２は、ＯＳ１３とＯＳ１３上で稼動する１または複数のアプリケーション１４とを含む。各アプリケーション１４は、１または複数の関数を含むプログラムにより実現される。仮想マシン１２は、例えば、図示しない１または複数の仮想的なCentral Processing Unit（ＣＰＵ）により動作する。
【００１８】
なお、以下の説明において、ホストＯＳ１１と仮想マシン１２のＯＳ１３を区別しない場合、単にＯＳと称することがある。
【００１９】
分析装置２は、ホスト装置１とＬＡＮまたはＷＡＮ等の通信ネットワークを介して相互に通信を行うことができる。分析装置２は、ホスト装置１から収集した情報を用いて、仮想マシン１２上で動作するプログラムの異常の分析を行う。
【００２０】
図２は、分析装置２の機能構成の一例を示す図である。分析装置２は、測定部２１と指示部２２と取得部２３と集計部２４と生成部２５と分析部２６と出力部２７と記憶部２８とを含む。
【００２１】
測定部２１は、複数のＯＳに対するレイテンシを測定する。測定部２１は、例えば、複数のＯＳ（図１に示すホスト装置１のホストＯＳ１１および仮想マシン１２のＯＳ１３）に所定のコマンド（例えば、ｐｉｎｇコマンド）を送信し、応答を受信するまでの時間の１／２をレイテンシとして記憶部２８に記憶する。
【００２２】
指示部２２は、例えば、性能監視ツールから異常通知を受けた場合、分析対象のＯＳ（ホスト装置１のホストＯＳ１１および仮想マシン１２のＯＳ１３）にサンプリングの実行指示を送信する。なお、性能監視ツールは、分析装置２に予め搭載されており、各ＯＳの性能を監視し、異常を検知した場合、通知を送る。
【００２３】
取得部２３は、複数のＯＳが第１時間間隔毎に動作中のプログラムに対してサンプリングして得た、動作中の関数を識別可能な情報を、各ＯＳから取得する。第１時間間隔は、例えば、１ｍｓである。以下、動作中の関数を識別可能な情報をサンプルと称することがある。取得部２３は、取得したサンプルを、各ＯＳがサンプリングした時刻に対応付けて記憶部２８に記憶する。
【００２４】
集計部２４は、関数毎に、所定時間内（例えば、３０秒間）で取得されたサンプルの数を集計する。なお、集計部２４は、サンプル数の集計対象の時間から、測定部２１により測定された、ＯＳ毎のレイテンシに基づく時間を除外する。
【００２５】
集計部２４は、例えば、各ＯＳの集計結果においてサンプル数が大きい順に所定数（例えば、３個）の関数を時系列データの生成対象として選択する。または、集計部２４は、例えば、全ＯＳの集計結果においてサンプル数が大きい順に所定数（例えば、１０個）の関数を時系列データの生成対象として選択してもよい。
【００２６】
生成部２５は、サンプル数が所定の条件を満たす関数について、第２時間間隔毎のサンプルの数を示す時系列データを生成する。サンプル数が所定の条件を満たす関数は、例えば、上述のように、集計部２４がサンプル数に基づいて選択した関数である。第２時間間隔は、例えば、１秒間である。なお、生成部２５は、時系列データの生成対象の時間から、測定部２１により測定された、ＯＳ毎のレイテンシに基づく時間を除外する。
【００２７】
分析部２６は、生成部２５が生成した時系列データに基づいて、複数の関数の因果関係分析を実行する。分析部２６は、因果関係分析において、例えば、第２時間間隔内の全サンプル数に対する、第２時間間隔内の関数を示すサンプル数の割合（頻度）をその関数の動作確率として用いて、ベイズ推定を実行する。分析部２６は、ベイズ推定を実行することにより、いずれかの関数が動作した場合に他の関数が動作していた確率を算出する。
【００２８】
出力部２７は、分析部２６が実行した因果関係分析の結果を出力する。出力部２７は、例えば、表示装置であり、因果関係分析結果を表示させてもよい。出力部２７は、例えば、因果関係分析結果を他の情報処理装置等に送信してもよい。
【００２９】
記憶部２８は、分析装置２が実行する処理に関する各種データを記憶する。記憶部２８は、例えば、測定部２１が測定したレイテンシの測定結果、取得部２３が取得したサンプル、集計部２４による集計結果、生成部２５が生成した時系列データ、分析部２６による因果関係分析結果等を記憶する。
【００３０】
図３は、ＯＳのサンプリング方法の一例を示す図である。図３は、仮想マシン１２のＯＳ１３が行うサンプリング方法を示している。ＯＳ１３は、カーネル３３を含み、カーネル３３は、サンプリングドライバ３４を含む。ＣＰＵ３２は、仮想マシン１２を稼動させる仮想ＣＰＵである。ＣＰＵ３２が有するPerformance Monitoring Counter（ＰＭＣ）３１は、例えば、レジスタのカウンタのオーバーフローをトリガーとした割り込みをサンプリングドライバ３４に出力する。割り込み発生間隔は、例えば、１ｍｓであるとする。
【００３１】
サンプリングドライバ３４は、ＰＭＣ３１からの割り込みに応じた間隔（第１間隔）で、アプリケーション１４から情報を取得（サンプリング）する。サンプリングドライバ３４が取得する情報は、動作中のプログラムや関数を識別可能な情報（サンプル）であり、例えばProcess identification（ＰＩＤ）、または命令アドレス等である。
【００３２】
図４は、複数の関数に対するサンプリング実施状況の一例を示す図である。図４に示すＡ，Ｂ，Ｃは、動作中の関数を示す。ＯＳ１３のサンプリングドライバ３４は、上述のように、ＰＭＣ３１からの割り込みに応じた間隔（例えば、１ｍｓ）で、アプリケーション１４からサンプリングを行う。図４に示すように、サンプリングドライバ３４は、一定間隔でサンプリングを行うため、関数の動作時間が長い程、その関数を示すサンプルを多く取得する。すなわち、取得されたサンプル数が関数の動作時間に対応する。ＰＭＣ３１を用いたサンプリングは、オーバーヘッドが低いため、サンプリングによる性能低下は少ない。
【００３３】
分析装置２は、性能監視ツールから性能低下を示す異常通知を受けた場合、指示部２２からＯＳ１３にサンプリングの実行指示を送信する。ＯＳ１３は、実行通知を受信後、所定時間（例えば、１分）、図３に示すようにサンプリングを行い、取得したサンプルを、分析装置２に送信する。ＯＳ１３は、例えば、アプリケーション１４からのサンプリングを常時実行し続けていてもよい。そして、指示部２２からサンプリングの実行指示を受信した場合、実行指示の受信時点までの所定時間に収集されたサンプルを分析装置２に送信してもよい。
【００３４】
仮想マシン１２が性能監視ツールを有している場合、ＯＳ１３は、性能監視ツールから異常を示す通知を受けた後、所定時間サンプリングを行い、取得したサンプルを、分析装置２に送信する。また、仮想マシン１２が性能監視ツールを有している場合、ＯＳ１３は、サンプリングを常時実行し続けて、性能監視ツールから異常を示す通知を受けた場合、通知を受けた時点までの所定時間に収集されたサンプルを分析装置２に送信してもよい。
【００３５】
なお、仮想マシン１２のＯＳ１３が実行するサンプリングについて説明したが、ホストＯＳ１１が行うサンプリングについても同様であるとする。
【００３６】
図５は、サンプルの適用除外方法の一例を示す図である。指示部２２は、例えば、性能監視ツールから異常通知を受けた場合、分析対象のＯＳ（ホスト装置１のホストＯＳ１１および仮想マシン１２のＯＳ１３）にサンプリングの実行指示を送信する。実行指示には、例えば、Secure Shell（ｓｓｈ）が用いられる。指示部２２は、サンプリング実行指示とともにサンプリング間隔やサンプリング継続時間等のパラメータをホスト装置１に送信してもよい。
【００３７】
指示部２２がサンプリング実行指示を送信した後、各ＯＳがサンプリングを開始するまでの時間（レイテンシ）がＯＳ毎に異なる可能性がある。そのため、各ＯＳがサンプリングを開始するタイミングが異なる可能性がある。よって、測定部２１は、予め、各ＯＳにｐｉｎｇコマンドを送信し、応答を受信するまでの時間の１／２をレイテンシとして記憶部２８に記憶する。測定部２１が測定したレイテンシは、分析装置２がホスト装置１にサンプリング実行指示を送信してからＯＳがサンプリングを開始するまでの時間に相当すると考えられる。
【００３８】
図５に示す例では、複数のＯＳ（ＯＳ１，ＯＳ２，ＯＳ３）のレイテンシのうち、ＯＳ２のレイテンシｌ２が最も長い。この最も長いレイテンシｌ２をＬとする。集計部２４は、指示部２２が各ＯＳにサンプリング実行指示を送信してからＬ秒が経過するまでの時間（除外対象時間）をサンプル数の集計対象の時間から除外する。同様に、生成部２５は、その除外対象時間を時系列データ生成対象の時間から除外する。図５に示すように、ＯＳ１における除外対象時間は、Ｌ−ｌ１秒であり、ＯＳ２における除外対象時間は、ｌ２（Ｌ）秒であり、ＯＳ３における除外対象時間は、Ｌ−ｌ３秒である。
【００３９】
以上のように、分析装置２は、サンプル数の集計対象の時間および時系列データの生成対象の時間から、ＯＳ毎のレイテンシに基づく時間を除外する。これにより、分析装置２は、複数のＯＳの時刻の起点合わせや時刻同期等の設定をしなくても、レイテンシの影響により分析結果の精度が低下することを防ぐことができる。
【００４０】
図６は、所定時間内における関数の頻度の一例を示す図である。図６に示す頻度（％）は、所定時間内におけるサンプリングで得られた合計サンプル数の関数毎の割合である。図６に示す例のように、関数毎の頻度は、関数Ａ、Ｂ、Ｃの順に大きいとする。
【００４１】
図７は、所定時間内における関数の頻度の時系列データの一例を示す図である。図７に示す例のように、ほとんどの時間帯において、頻度は、関数Ａ、Ｂ、Ｃの順に大きいとする。しかし、各関数の頻度が大きく増加している時間帯ＴＳにおいて、関数Ｃの頻度が最も高くなっている。すなわち、分析装置２は、時系列データを生成することにより、関数の挙動の変化を確認することが可能となり、特定の時間帯において異常な動作をした関数を特定することが可能となる。これにより、分析装置２は、例えば、間欠障害を容易に発見することができる。
【００４２】
図８は、所定時間内における関数毎のサンプル数と頻度の一例を示す図である。図８に示すデータは、一つのＯＳのサンプルについて集計部２４が集計した結果であるとする。集計部２４は、所定時間内におけるサンプリングで得られたサンプルを、関数毎に集計する。図８に示す頻度は、所定時間内におけるサンプリングで得られた合計サンプル数に対する各関数のサンプル数の割合を示す。
【００４３】
集計部２４は、例えば、サンプル数が大きい順に関数をソートし、上位Ｎ個（例えば、３個）の関数を時系列データの生成対象（例えば、図８の破線枠内の関数）として選択する。集計部２４は、例えば、時系列データの生成対象の関数の比率の合計が所定値（例えば、８０％）以上となるように、１または複数の関数を時系列データの生成対象として選択してもよい。選択する関数の数（上記のＮ個）または比率の合計（上記の所定値）の設定はユーザからの指示により変更可能であってもよい。例えば、ユーザが分析結果を参照してから、選択する関数の数または比率の合計を変更する指示を分析装置２に入力した場合、集計部２４は、指示に従って設定変更を行い、再度の集計を行ってもよい。
【００４４】
集計部２４は、各ＯＳから取得したサンプルを用いて、同様の集計処理を行い、図８と同様の集計結果をＯＳ毎に生成する。
【００４５】
図９は、サンプル数の時系列データの一例を示す図である。図９に示すデータは、一つのＯＳのサンプルについて集計した結果であるとする。Ｔ１、Ｔ２・・・Ｔｎは、第２時間間隔の例である。図８に示すように、生成対象として、関数１、関数２、関数７が選択されていたとする。生成部２５は、選択された関数について、第２時間間隔毎のサンプル数の時系列データを生成する。生成部２５は、各ＯＳのサンプルについて同様の処理を行い、図９と同様の時系列データをＯＳ毎に生成する。
【００４６】
なお、生成部２５は、全関数について図９と同様に時系列データを生成し、第２時間間隔毎に、サンプル数が大きい上位Ｎ個（例えば、３個）を抽出した新たな時系列データを生成してもよい。そして、分析部２６は、その時系列データを用いて因果関係分析を行ってもよい。
【００４７】
図１０は、全ＯＳのサンプル数の時系列データの一例を示す図である。生成部２５は、各ＯＳの第２時間間隔毎のサンプル数の時系列データ（例えば、図９）を組み合わせて、図１０の例に示す時系列データを生成する。なお、ｈｏｓｔは、ホスト装置１の例であり、ＶＭ１、ＶＭ２は、仮想マシン１２の例である。
【００４８】
図１０において、ＶＭ２−ｈｏｓｔは、ホスト装置１のホストＯＳ１１がサンプリングしたＶＭ２を示すサンプルの数である。このサンプル数は、ＶＭ２のＯＳ１３がサンプリングしたサンプルの数（関数３−ＶＭ２、関数５−ＶＭ２、関数８−ＶＭ２のサンプル数）と重複する。すなわち、生成部２５は、仮想マシン１２がサンプリングして得たサンプルが存在する場合、ホストＯＳ１１がその仮想マシン１２からサンプリングして得たサンプルの数を時系列データから削除する。
【００４９】
図１１は、重複データ削除後における全ＯＳのサンプル数の時系列データの一例を示す図である。図１１に示す時系列データは、図１０に示す時系列データから、ＶＭ２−ｈｏｓｔのデータを除いたデータである。このように、生成部２５は、仮想マシン１２がサンプリングして得たサンプルが存在する場合、ホストＯＳ１１がその仮想マシン１２からサンプリングして得たサンプルの数を時系列データから削除する。これにより、分析装置２は、重複する結果を出力することを防ぐことができる。
【００５０】
なお、図１０および図１１に示す時系列データは、図８に示すデータと同様に、第２時間間隔内におけるサンプリングで得られた合計サンプル数に対する各関数のサンプル数の割合を示す頻度を含んでいてもよい。
【００５１】
図１２は、所定時間内における全ＯＳの関数毎のサンプル数と頻度の一例を示す図である。図８に示す例は、集計部２４が一つのＯＳのサンプルについて集計した結果であったが、図１２に示す例は、集計部２４が全ＯＳのサンプルについて集計した結果である。頻度は、全ＯＳから取得した合計サンプル数に対する各関数のサンプル数の割合を示す。なお、集計部２４は、予め、ホストＯＳ１１が、仮想マシン１２からサンプリングして得たサンプル数のデータを削除しておくとする。
【００５２】
集計部２４は、図１２に示すデータにおいて、例えば、サンプル数が大きい順に関数をソートし、上位Ｎ個（例えば、１０）の関数を時系列データの集計対象（例えば、図１２の破線枠内の関数）として選択する。集計部２４は、例えば、集計対象の関数の頻度の合計が所定値（例えば、８０％）以上となるように、１または複数の関数を時系列データの集計対象として選択してもよい。そして、生成部２５は、選択された関数に関して、図１１に示す例と同様の時系列データを生成する。
【００５３】
なお、同じ仮想マシン１２上で動作する関数であっても、使用する物理ＣＰＵが異なる可能性がある。そのため、生成部２５は、物理ＣＰＵを区別した時系列データを生成してもよい。
【００５４】
分析装置２は、図１２に示す例のように、全ＯＳのサンプル数をまとめて集計し、サンプル数が大きい関数を時系列データの集計対象とすることにより、例えば、分析対象のＯＳの数が多い場合であっても一度に集計ができ、集計処理を簡略化することができる。
【００５５】
次に、分析部２６が行う計算例について詳細に説明する。分析部２６は、例えば、ベイズ推定を用いて、関数が他の関数の動作の原因となっている確率を算出する。例えば、P(A)は、Aが起こる確率であり、P(B)は、Bが起こる確率であり、P(A|B)は、Bが起こった後にAが起こる確率であり、P(B|A)は、Aが起こった後にBが起こる確率であるとする。この場合、以下の式（１）が成立する。
P(A|B)=P(B|A)×P(A)／P(B)      （１）
【００５６】
また、式（１）において、P(A)を事前確率、P(A|B)を事後確率と称する。事象Aの後に事象Bが起こるとすると、P(A|B)は、事象Bが起こった場合に事象Aが起こっていた確率である。
【００５７】
ある時間tの関数Fの頻度（％）をP(F(t))とすると、P(F(t))は、以下の式（２）のように表される。t-1からtは、第２時間間隔の例である。すなわち、関数Fの頻度は、第２時間間隔内の全サンプル数に対する、第２時間間隔内の関数Fを示すサンプル数の割合である。
P(F(t))=（t-1からtにおける関数Fのサンプル数）／（t-1からtにおける全関数の全サンプル数）      （２）
【００５８】
そして、A=F(t)、B=F(t+1)として、式（１）に示したベイズ推定を用いると、以下の式（３）が得られる。
P(F(t)|F(t+1))=P(F(t+1)|F(t))×P(F(t))／P(F(t+1))      （３）
【００５９】
さらに、関数が複数存在する場合、各関数をFi（i=1,2,…）、Fj（j=1,2,…）と表すと、以下の式（４）が得られる。
P(Fi(t)|Fj(t+1))=P(Fj(t+1)|Fi(t))×P(Fi(t))／P(Fj(t+1))      （４）
【００６０】
図１３は、関数の因果関係の第１の例を示す図である。図１３は、F1(t+1)に関して、２つの原因候補関数F1(t)、F2(t)が存在する例を示す。例えば、F1(t+1)が動作する原因がF2(t)である確率は以下のように表される。
P(F2(t)|F1(t+1))=P(F1(t+1)|F2(t))×P(F2(t))／P(F1(t+1))      （５）
【００６１】
式（５）における右辺の３項のうちP(F2(t))とP(F1(t+1))は、それぞれの関数に関する頻度であるため、分析部２６は、式（２）と同様の式により算出することができる。P(F1(t+1)|F2(t))は、F2(t)が起こってからF1(t+1)が起こる確率なので、分析部２６は、時系列で保持されているサンプル上の時間tからt+1までの間のデータを用いて、以下の式（６）のように算出することができる。
P(F1(t+1)|F2(t))＝（F2のサンプルの次にF1のサンプルが存在している数）／（F2のサンプル総数）      （６）
【００６２】
図１４は、関数の因果関係の第２の例を示す図である。図１４は、関数F1(t+1）の発生に対して２つの原因候補関数が存在する例を示す。図１４に示す例では、分析部２６は、ｔ−１まで時間をさかのぼってベイズ推定を適用する。例えば、関数F1(t+1）の発生原因がF2(t-1)である確率は、P(F2(t-1)|F1(t+1))と表される。P(F2(t-1)|F1(t+1))は、図１４に示す経路１と経路２の合計であると考えられるため、分析部２６は、まず、P(F2(t-1)|F1(t+1))のうちの経路１に関する部分を算出する。経路１は、F2(t)を経由する経路であるため、分析部２６は、式（７）に示すように、P(F2(t-1)|F1(t+1))におけるF1(t+1)を、F2(t)|F1(t+1)に置き換えて算出する。
P(F2(t-1)|F1(t+1))の経路１→P(F2(t-1)|((F2(t)|F1(t+1)))
=P((F2(t)|F1(t+1))|F2(t-1))×P(F2(t-1))／P(F2(t)|F1(t+1)))      （７）
【００６３】
なお、式（７）におけるP((F2(t)|F1(t+1))|F2(t-1))は、図１４に示すように、経路１のうちF2(t-1)からF2(t)への経路を示し、P(F2(t)|F2(t-1))のうちF2(t)をF2(t)|F1(t+1)に置き換えた確率である。分析部２６は、この確率を、式（６）と同様に、サンプル数のデータに基づいて算出することができる。分析部２６は、P(F2(t)|F1(t+1))を、式（５）と同様に算出することができる。
【００６４】
同様に、分析部２６は、図１４に示す経路２が示す確率を算出し、経路１が示す確率と経路２が示す確率を加算することにより、F1(t+1)の動作原因がF2(t-1)である確率を算出することができる。このように、分析部２６は、第２時間間隔内の全サンプル数に対する、第２時間間隔内の関数を示す情報の数の割合（例えば、式（２）に示す頻度）をその関数の動作確率として用いて、ベイズ推定による因果関係分析を実行する。そして、いずれかの関数が動作した場合に、他の関数が動作していた確率（原因確率）を算出することができる。
【００６５】
図１５は、計算例における、サンプル数の時系列データの一例を示す図である。以下、図１５に示す時系列データを用いた因果関係分析結果の計算について説明する。生成部２５は、３つの関数A、B、Cに対し、図１５のような時系列データを生成したとする。T0はt-1からtまでの時間間隔を示し、T1はtからt+1までの時間間隔を示し、T2は、t+1からt+2までの時間間隔を示す。各数値は第２時間間隔内（１秒間）のサンプル数であり、カッコ内は式（２）と同様の式により算出された頻度である。下線が付けられた数値は後述する計算において使用される数値である。
【００６６】
図１６は、関数の因果関係の第３の例を示す図である。図１６に示す例は、図１５に示す時系列データに対応しており、各関数A〜Cを示すノードに付されている数値は、図１５に示す頻度である。また、矢印に付されている数値は、その経路の確率を示し、式（６）と同様の式により算出される。例えば、t+1で関数Aが動作した後に、t+2で関数Bが動作する確率は、0.8であることが示されている。各経路の確率は、下記のように表される。
P(B(t+2)|A(t+1))=0.8      （８−１）
P(B(t+2)|B(t+1))=0.1      （８−２）
P(B(t+2)|C(t+1))=0.2      （８−３）
P(A(t+1)|A(t))=0.03      （８−４）
P(B(t+1)|A(t))=0.04      （８−５）
P(C(t+1)|A(t))=0.01      （８−６）
【００６７】
図１５、１６に示すデータを用いて、t+2における関数Bの動作原因がtにおける関数Aの動作である確率P(A(t)|B(t+2))の計算例について説明する。P(A(t)|B(t+2))は、以下の式（９）のように表される。
P(A(t)|B(t+2))
=P(A(t)|A(t+1)|B(t+2))+P(A(t)|B(t+1)|B(t+2))+P(A(t)|C(t+1)|B(t+2))
=P(A(t)|(A(t+1)|B(t+2)))+P(A(t)|(B(t+1)|B(t+2)))+P(A(t)|(C(t+1)|B(t+2)))
（９）
【００６８】
分析部２６は、式（９）の各項を、ベイズ推定を用いて以下の式（１０−１）〜（１０−３）のように変換する。
P(A(t)|(A(t+1)|B(t+2)))
=P((A(t+1)|B(t+2))|A(t))×P(A(t))／P(A(t+1)|B(t+2))      （１０−１）
P(A(t)|(B(t+1)|B(t+2)))
=P((B(t+1)|B(t+2))|A(t))×P(A(t))／P(B(t+1)|B(t+2))      （１０−２）
P(A(t)|(C(t+1)|B(t+2)))
=P((C(t+1)|B(t+2))|A(t))×P(A(t))／P(C(t+1)|B(t+2))      （１０−３）
【００６９】
図１６に示す例では、t+2において関数Bのみ動作しているので、（１０−１）のP((A(t+1)|B(t+2))|A(t))をP(A(t+1)|A(t))に置き換えることができる。同様にP((B(t+1)|B(t+2))|A(t))をP(B(t+1)|A(t))に置き換え、P((C(t+1)|B(t+2))をP(C(t+1)|A(t))に置き換えることができる。さらに、（８−４）〜（８−６）の計算結果を用いると、分析部２６は、式（１０−１）〜（１０−３）の第１項を、以下のように計算することができる。
P((A(t+1)|B(t+2))|A(t))=P(A(t+1)|A(t))=0.03      （１１−１）
P((B(t+1)|B(t+2))|A(t))=P(B(t+1)|A(t))=0.04      （１１−２）
P((C(t+1)|B(t+2))|A(t))=P(C(t+1)|A(t))=0.01      （１１−３）
【００７０】
式（１０−１）〜（１０−３）における第２項のP(A(t))は、図１５に示すように、0.5である。また、分析部２６は、式（１０−１）〜（１０−３)の第３項にベイズ推定を用い、さらに図１５に示す頻度および（８−１）〜（８−３）の計算結果を用いると、以下の式（１２−１）〜（１２−３）のように計算することができる。
P(A(t+1)|B(t+2))=P(B(t+2)|A(t+1))×P(A(t+1))／P(B(t+2))
=0.8×0.1／0.6
=0.13          （１２−１）
P(B(t+1)|B(t+2))=P(B(t+2)|B(t+1))×P(B(t+1))／P(B(t+2))
=0.1×0.7／0.6
=0.12          （１２−２）
P(C(t+1)|B(t+2))=P(B(t+2)|C(t+1))×P(C(t+1))／P(B(t+2))
=0.2×0.2／0.6
=0.07          （１２−３）
【００７１】
以上により、分析部２６は、式（１０−１）〜（１０−３)を以下の式（１３−１）〜（１３−３)のように計算することができる。
P(A(t)|(A(t+1)|B(t+2)))=P((A(t+1)|B(t+2))|A(t))×P(A(t))／P(A(t+1)|B(t+2))
=0.03×0.5／0.13
=0.12          （１３−１）
P(A(t)|(B(t+1)|B(t+2)))=P((B(t+1)|B(t+2))|A(t))×P(A(t))／P(B(t+1)|B(t+2))
=0.04×0.5／0.12
=0.17          （１３−２）
P(A(t)|(C(t+1)|B(t+2)))=P((C(t+1)|B(t+2))|A(t))×P(A(t))／PP(C(t+1)|B(t+2))
=0.01×0.5／0.07
=0.07          （１３−３）
【００７２】
分析部２６は、式（１３−１）〜（１３−３)の計算結果を式（９）に当てはめることにより、P(A(t)|B(t+2))について、式（１４）のような計算結果を得ることができる。
P(A(t)|B(t+2))
=P(A(t)|(A(t+1)|B(t+2)))+P(A(t)|(B(t+1)|B(t+2)))+P(A(t)|(C(t+1)|B(t+2)))
=0.12+0.17+0.07
=0.36          （１４）
【００７３】
すなわち、t+2における関数Bの動作原因がtにおける関数Aの動作である確率は、0.36（36%）となる。
【００７４】
以上、分析部２６がベイズ推定を用いて複数の関数の因果関係分析を実行する例を説明したが、分析部２６は、ベイズ推定以外の方法を用いて、因果関係分析を実行してもよい。分析部２６は、例えば、ランダム化比較試験(RCT：Randomized Controlled Trial）を用いて、複数の関数の因果関係分析を実行してもよい。
【００７５】
図１７は、因果関係分析結果の一例を示す図である。分析部２６は、上述のようにベイズ推定等の手法を用いて、いずれかの関数（図１７における結果の関数）が動作した場合に他の関数（図１７における原因の関数）が動作していた確率を算出する。図１７に示す各数値は、分析部２６が算出した確率である。出力部２７は、例えば、図１７の例に示す因果関係分析結果を出力する。
【００７６】
ユーザは、因果関係分析結果を参照することにより、いずれかの関数に異常が発生した場合、どの関数が原因であるかを推定することができる。例えば、関数５−ＶＭ３に異常が発生した場合、ユーザは、図１７における関数５−ＶＭ３の行を参照することにより、原因である確率が最も確率が高い関数が関数２−ＶＭ１であることを知ることができる。そして、ユーザは、関数２−ＶＭ１に処理遅延が発生したことにより関数５−ＶＭ３に処理遅延が発生した可能性があると推定することができる。
【００７７】
なお、因果関係分析結果の出力態様は、図１７の例には限られない。例えば、ユーザから、異常が発生した関数の入力を受け付けた場合、出力部２７は、その関数の動作の原因となる関数のうち確率が高い順に所定数の関数の識別情報を、原因関数の候補として確率とともに出力してもよい。または、出力部２７は、入力された関数の動作原因となる関数の候補として、確率が所定の閾値以上である関数の識別情報を確率とともに出力してもよい。
【００７８】
図１８は、実施形態の分析装置の処理の一例を示すフローチャートである。測定部２１は、複数のＯＳに対するレイテンシを測定する（ステップＳ１０１）。指示部２２は、性能監視ツールから異常通知を受けた場合（ステップＳ１０２でＹＥＳ）、分析対象のＯＳにサンプリングの実行指示を送信する（ステップＳ１０３）。ステップＳ１０２でＮＯの場合、処理は次に進まない。
【００７９】
取得部２３は、複数のＯＳが第１時間間隔（例えば、１ｍｓ）毎に動作中のプログラムに対してサンプリングして得た、動作中の関数を識別可能な情報を、各ＯＳから取得する（ステップＳ１０４）。集計部２４は、関数毎に、所定時間内（例えば、３０秒間）で取得されたサンプルの数を集計する（ステップＳ１０５）。なお、集計部２４は、サンプル数の集計対象の時間から、測定部２１により測定された、ＯＳ毎のレイテンシに基づく時間を除外する。集計部２４の集計結果は、例えば、図８または図１２に示すような、サンプル数と頻度を含むデータである。
【００８０】
生成部２５は、サンプル数が所定の条件を満たす関数について、第２時間間隔毎のサンプルの数を示す時系列データを生成する（ステップＳ１０６）。なお、生成部２５は、時系列データの生成対象の時間から、測定部２１により測定された、ＯＳ毎のレイテンシに基づく時間を除外する。生成部２５が生成する時系列データは、例えば、図１１に示すデータである。また、生成部２５は、仮想マシン１２がサンプリングして得たサンプルが存在する場合、データの重複を避けるため、ホストＯＳ１１がその仮想マシン１２からサンプリングして得たサンプルの数を時系列データから削除する。
【００８１】
分析部２６は、生成部２５が生成した時系列データに基づいて、複数の関数の因果関係分析を実行する（ステップＳ１０７）。分析部２６は、例えば、第２時間間隔内の全サンプル数に対する、第２時間間隔内の関数を示すサンプル数の割合（頻度）をその関数の動作確率として用いて、ベイズ推定による因果関係分析を実行する。
【００８２】
出力部２７は、分析部２６が実行した因果関係分析の結果を出力する（ステップＳ１０８）。出力部２７は、例えば、表示装置であり、因果関係分析結果を表示させる。出力部２７は、例えば、因果関係分析結果を他の情報処理装置等に送信してもよい。
【００８３】
以上のように、分析装置２は、複数のＯＳ上で動作する関数で発生した異常の原因を容易に分析することができる。例えば、図１に示す例のように仮想マシン１２上で動作する関数に異常が発生した場合、原因となる関数が他の仮想マシン１２やホストＯＳ１１に存在していたとしても、容易に原因を分析することができる。また、分析装置２は、仮想マシン１２が稼動しているホスト装置１とは別の装置であるため、仮想マシン１２が稼動しているホスト装置１を停止させずに分析を行うことができる。また、分析装置２は、サンプリングにより得られた情報に基づいて分析を行うため、分析対象のプログラムのリコンパイルを行わなくても、分析を行うことができる。
【００８４】
図１９は、本実施形態の処理の適用例を示す図である。図１９において、仮想マシン１２−１、１２−２は、図１の仮想マシン１２に相当する。第１ＣＰＵ１５−１、第２ＣＰＵ１５−２は、物理ＣＰＵである。仮想マシン１２−１で動作する関数１−１は、第１ＣＰＵ１５−１を使用し、仮想マシン１２−１で動作する関数２と仮想マシン１２−２で動作する関数１−２は、第２ＣＰＵ１５−２を使用する。図１９における関数の物理ＣＰＵへの割り当ては固定であるとする。
【００８５】
同じ物理ＣＰＵを使用する関数は、一方が動作すると他方が影響を受けることは容易に想定される。しかし、複数の関数が、異なる物理ＣＰＵを使用している場合、その関数同士の因果関係を分析することは容易ではない。例えば、図１９に示す例では、関数１−２と関数１−１が、仮想マシン１２−１で動作するロック関数に関連しているとする。そして、関数１−２が動作するとロック関数が動作し、関数１−１の動作に影響を与えるとする。このような場合、関数１−１に処理遅延が発生したとしても、原因を特定することは容易ではない。
【００８６】
本実施形態の分析装置２は、複数のＯＳから取得されたサンプル数に基づいて、関数の因果関係を分析する。そのため、図１９に示す例のように、動作する仮想マシンおよび使用する物理ＣＰＵのいずれも異なる関数同士（関数１−１および関数１−２）であっても、因果関係を分析することができる。
【００８７】
次に、分析装置２のハードウェア構成の一例を説明する。図２０は、分析装置２のハードウェア構成の一例を示す図である。図２０の例に示すように、分析装置２において、バス１００に、プロセッサ１１１とメモリ１１２と補助記憶装置１１３と通信インタフェース１１４と媒体接続部１１５と入力装置１１６と出力装置１１７とが接続される。
【００８８】
プロセッサ１１１は、メモリ１１２に展開されたプログラムを実行する。実行されるプログラムには、実施形態における処理を行う分析プログラムが適用されてもよい。
【００８９】
メモリ１１２は、例えば、Random Access Memory(ＲＡＭ)である。補助記憶装置１１３は、種々の情報を記憶する記憶装置であり、例えばハードディスクドライブや半導体メモリ等が適用されてもよい。補助記憶装置１１３に実施形態の処理を行う分析プログラムが記憶されていてもよい。
【００９０】
通信インタフェース１１４は、Local Area Network（ＬＡＮ）、Wide Area Network（ＷＡＮ）等の通信ネットワークに接続され、通信に伴うデータ変換等を行う。図２に示す出力部２７には、図２０に示す通信インタフェース１１４が適用されてもよい。
【００９１】
媒体接続部１１５は、可搬型記録媒体１１８が接続可能なインタフェースである。可搬型記録媒体１１８には、光学式ディスク（例えば、Compact Disc(ＣＤ)またはDigital Versatile Disc(ＤＶＤ))、半導体メモリ等が適用されてもよい。可搬型記録媒体１１８に実施形態の処理を行う分析プログラムが記録されていてもよい。
【００９２】
メモリ１１２、補助記憶装置１１３および可搬型記録媒体１１８は、コンピュータが読み取り可能であって非一時的な有形の記憶媒体であり、信号搬送波のような一時的な媒体ではない。
【００９３】
入力装置１１６は、例えば、キーボード、ポインティングデバイス等であり、ユーザからの指示及び情報等の入力を受け付ける。
【００９４】
出力装置１１７は、例えば、表示装置、プリンタ、スピーカ等であり、ユーザへの問い合わせ又は指示、及び処理結果等を出力する。図２に示す出力部２７には、図２０に示す出力装置１１７が適用されてもよい。
【００９５】
図２に示す記憶部２８は、メモリ１１２、補助記憶装置１１３または可搬型記録媒体１１８等により実現されてもよい。図２に示す測定部２１、指示部２２、取得部２３、集計部２４、生成部２５、および分析部２６は、メモリ１１２に展開された分析プログラムをプロセッサ１１１が実行することにより実現されてもよい。
【００９６】
なお、分析装置２が図２０に示す全ての構成要素を含んでいなくてもよく、一部の構成要素が省略されていてもよい。また、一部の構成要素が分析装置２の外部装置に存在し、分析装置２が外部装置に接続して、外部装置内の構成要素を利用してもよい。
【００９７】
本実施形態は、以上に述べた実施の形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で様々な変更、追加、省略が適用可能である。
【符号の説明】
【００９８】
１    ホスト装置
２    分析装置
１１    ホストＯＳ
１２    仮想マシン
１３    ＯＳ
１４    アプリケーション
２１    測定部
２２    指示部
２３    取得部
２４    集計部
２５    生成部
２６    分析部
２７    出力部
２８    記憶部
１００    バス
１１１    プロセッサ
１１２    メモリ
１１３    補助記憶装置
１１４    通信インタフェース
１１５    媒体接続部
１１６    入力装置
１１７    出力装置
１１８    可搬型記録媒体
【図１】
2020101938.tif 000003
【図２】
2020101938.tif 000004
【図３】
2020101938.tif 000005
【図４】
2020101938.tif 000006
【図５】
2020101938.tif 000007
【図６】
2020101938.tif 000008
【図７】
2020101938.tif 000009
【図８】
2020101938.tif 000010
【図９】
2020101938.tif 000011
【図１０】
2020101938.tif 000012
【図１１】
2020101938.tif 000013
【図１２】
2020101938.tif 000014
【図１３】
2020101938.tif 000015
【図１４】
2020101938.tif 000016
【図１５】
2020101938.tif 000017
【図１６】
2020101938.tif 000018
【図１７】
2020101938.tif 000019
【図１８】
2020101938.tif 000020
【図１９】
2020101938.tif 000021
【図２０】
2020101938.tif 000022