(57)【要約】      （修正有）【課題】障害解析に必要なトレースデータを、異常検出機構に拠らずに確実に取得するトレース収集システム及びトレース収集方法を提供する。【解決手段】トレースデータを収集するシステムは、スナップショット読み出し部１０２１と、スナップショット解析部１０２２と、トレースバッファ比較部１０２３と、スナップショット出力部１０２４とを備える。スナップショット解析部１０２２は、スナップショット読み出し部１０２１で取得したスナップショットをプロセス別に分解してプロセス別トレースバッファ１０４、１０５に保持させる。そして、トレースバッファ比較部１０２３が、プロセス別トレースバッファ１０４、１０５に保持されたプロセス別のスナップショットを比較して、周期処理の変化を検出した場合、スナップショット出力部１０２４がプロセス別トレースバッファ１０４、１０５に保持されたスナップショットを二次記憶部１１３に出力する。【選択図】図３
2017004360.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの処理経過を示すトレースデータを収集するトレース情報収集システムであって、
周期的にトレースデータのスナップショットを取得するスナップショット読み出し部と、
前記スナップショット読み出し部で取得したスナップショットをプロセス別に分解してバッファに保持させるスナップショット解析部と、
前記バッファに保持されたプロセス別のスナップショットを比較して周期処理の変化を検出する比較部と、
前記比較部が周期処理の変化を検出した場合に、前記バッファに保持されたスナップショットを出力するスナップショット出力部と、を備える
トレース収集システム。
【請求項２】
前記スナップショット解析部がスナップショットをプロセス別に分解する際に、プロセスの周期を判断し、周期毎にスナップショットを保持するバッファを切り替える
請求項１に記載のトレース収集システム。
【請求項３】
前記比較部は、分解されたスナップショットを比較する際に、トレースデータが持つ時刻情報とトレース種別から、プロセスの周期処理時間差と周期処理類似度を算出し、算出したプロセスの周期処理時間差と周期処理類似度とを比較項目とする
請求項１に記載のトレース収集システム。
【請求項４】
前記比較部は、分解されたスナップショットを比較する際に、算出したプロセスの周期処理時間差と周期処理類似度とを用いて、通常時のトレースデータの値から外れたはずれ値を検出した際に、前記周期処理の変化を検出する
請求項３に記載のトレース収集システム。
【請求項５】
前記スナップショット出力部がスナップショットを出力する際に、バッファに保持されているトレースデータの時刻情報を用いて、そのトレースデータに関係するスナップショットデータを出力する
請求項１記載のトレース収集システム。
【請求項６】
プログラムの処理経過を示すトレースデータを収集するトレース情報収集方法において、
周期的にトレースデータのスナップショットを取得するスナップショット読み出し処理と、
前記スナップショット読み出し処理で取得したスナップショットをプロセス別に分解してバッファに保持させるスナップショット解析処理と、
前記バッファに保持されたプロセス別のスナップショットを比較して周期処理の変化を検出する比較処理と、
前記比較処理で周期処理の変化を検出した場合に、前記バッファに保持されたスナップショットを出力するスナップショット出力処理と、を含む
トレース収集方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機がプログラムを実行する際の動作トレースを収集するトレース収集システム及びトレース収集方法に関する。
【背景技術】
【０００２】
トレース収集システムは、計算機がプログラムを実行する際の動作ログを取得するものである。そして、取得した動作ログの解析を行うことで、計算機が何らかの要因で通常と異なる動作を行ったときの原因を特定することができる。
【０００３】
計算機により制御されるシステムが何らかの要因により通常とは異なる動作（障害）を行ったとき、そのときの動作ログを解析することでその障害の原因が特定される。この動作ログの解析を行う上では、各プロセスのトレースデータが有用である。トレースデータとは、プログラムにおいて、特定関数の特定箇所が実行された時に生成・蓄積されるデータであり、関数内のどのパスを通過したか、その時の各変数の値は何か、といった情報である。通常、トレースデータは、システムに具備される異常検出機構が異常を検出した際に自動的にディスク等へ出力される。
【０００４】
特許文献１には、システムに障害が発生した際に、省メモリ、かつ低負荷で障害解析に必要な動作ログを取得する手法が開示されている。具体的には、コンテキストスイッチの前後の時点で動作しているプロセスのスタックトレースを取得する。そして、トレース出力要求に応じて、メモリ上に記憶されているスタックトレースをディスクへと出力する。その際、プロセスの識別情報とコンテキストスイッチの前後の情報をキーとして、過去にディスクに出力されたスタックトレースを検索する。
特許文献１に開示されている動作ログを取得する手法は、検索して得られた結果と、今回ディスクへ出力する情報とに差異がある場合に、これらの差異があった情報をディスクの所定の領域へと格納する手法である。
この特許文献１に開示された手法では、このように差異があった情報のみを格納することで、通常とは異なった動作を行った場合の情報が、トレース収集システムで収集される。したがって、解析作業者は、トレース収集システムに格納された情報を解析することで、障害発生時の原因の判断ができるようになる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−１８２２３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来のトレース収集システムでは、システム設計時に想定されず、異常検出機構で検出できない動作に対しては、トレースデータを出力することができない。また、異常検出機構で異常を検出することが可能であっても、有用なトレースデータを出力することができない可能性が高い。すなわち、異常検出機構では、メモリ上のトレース保持領域がサイクリックに使用され、かつ、異常検出機構で異常を検出するまでに時間を要した場合、異常が発生した時点のトレースデータが上書きされて既に消去され、有用なトレースデータが取得できない可能性が高い。
【０００７】
特許文献１に記載の手法の場合には、スタックトレースの差異から異常検出を行い、また、スタックトレース保持領域が満杯になる度にディスクへの出力を行うことから、これらの問題は発生しない。しかしながら、特許文献１に記載されるように、プロセスのスタックトレースしか出力しない場合、既にリターンして実行が完了した関数の情報が残らず、当該関数で障害が発生した場合には、障害の解析ができないという問題がある。
【０００８】
また、特許文献１に記載の手法では、コンテキストスイッチの前後でしかスタックトレースを取得せず、また、ディスクに出力された過去のスタックトレースと比較し、差異がある場合を異常として扱っている。このことから、プロセスの処理順序、コンテキストスイッチのタイミングが固定されているシステムにしか適用できないという問題がある。
例えば、汎用的なオペレーティングシステムを使用したシステムに適用した場合、コンテキストスイッチが発生する要因は、タイムスライスの消費、高優先度プロセスの動作、外部割込み、など多岐に渡る。したがって、コンテキストスイッチ前後のスタックトレースは不定となる。そのため、汎用的なオペレーティングシステムを使用したシステムの場合、コンテキストスイッチ前後で取得したスタックトレースと、過去に取得したスタックトレースとで、情報に差異があったときを、異常として扱うことは困難であった。
【０００９】
本発明は、オペレーティングシステム上で動作するプログラムを実行する際に、障害解析に必要なトレースデータを、異常検出機構によらずに確実に取得することができるトレース収集システム及びトレース収集方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明のトレース収集システムは、プログラムの処理経過を示すトレースデータを収集するシステムであって、スナップショット読み出し部と、スナップショット解析部と、比較部と、スナップショット出力部とを備える。
スナップショット読み出し部は、周期的にトレースデータのスナップショットを取得する。
スナップショット解析部は、スナップショット読み出し部で取得したスナップショットをプロセス別に分解してバッファに保持させる。
比較部は、バッファに保持されたプロセス別のスナップショットを比較して周期処理の変化を検出する。
スナップショット出力部は、比較部が周期処理の変化を検出した場合に、バッファに保持されたスナップショットを出力する。
【００１１】
また、本発明のトレース収集方法は、プログラムの処理経過を示すトレースデータを収集する方法であり、以下の各処理を含む。
・周期的にトレースデータのスナップショットを取得するスナップショット読み出し処理。
・スナップショット読み出し処理で取得したスナップショットをプロセス別に分解してバッファに保持させるスナップショット解析処理。
・バッファに保持されたプロセス別のスナップショットを比較して周期処理の変化を検出する比較処理。
・比較処理で周期処理の変化を検出した場合に、バッファに保持されたスナップショットを出力するスナップショット出力処理。
【発明の効果】
【００１２】
本発明によると、汎用的なオペレーティングシステムによりプロセスが動作するシステムであっても、確実に動作トレースを取得することが可能になり、取得した動作トレースから異常発生状況などの解析が可能になる。上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１３】
【図１】本発明の一実施の形態例によるシステム全体の例を示す構成図である。
【図２】本発明の一実施の形態例によるトレースデータの例を示す説明図である。
【図３】本発明の一実施の形態例による周期変化検出プロセス部の機能ブロック図である。
【図４】本発明の一実施の形態例によるスナップショットデータをバッファに分ける処理の例を示す模式図である。
【図５】本発明の一実施の形態例によるプロセス別のトレースデータを蓄積するバッファの蓄積データの例を示す説明図である。
【図６】本発明の一実施の形態例のはずれ値検出処理に適用される特性を模式的に示す説明図である。
【図７】本発明の一実施の形態例によるスナップショットデータを２つのバッファに分ける処理の例を示すフローチャートである。
【図８】本発明の一実施の形態例によるトレースバッファを比較する処理の例を示すフローチャートである。
【図９】本発明の他の実施の形態例によるシステム全体の例を示す構成図である。
【発明を実施するための形態】
【００１４】
以下、本発明の一実施の形態例を、図１〜図８を参照して説明する。
［１．システム全体の構成例］
図１は、本発明の第１の実施の形態例のトレース収集システムを適用したシステム全体の構成例を示す。図１では、計算機１００がプログラムを実行する際の動作ログであるトレースデータを収集する構成を示す。
【００１５】
計算機１００は、主記憶部１０１を備え、主記憶部１０１内に、オペレーティングシステム（ＯＳ）が記憶されるオペレーティングシステム部１０７を有する。ここでは、オペレーティングシステム部１０７に記憶されるオペレーティングシステムとして、汎用のオペレーティングシステムを使用する。汎用のオペレーティングシステムを使用するため、オペレーティングシステムは、外部割込み等により種々の処理を並行して実行することができる。
【００１６】
オペレーティングシステム部１０７は、制御プロセス部１０６からの指示に基づいて、オペレーティングシステムを実行することで、プロセッサ１１１に対する指令を行う。プロセッサ１１１は、オペレーティングシステム部１０７からの指令に基づいて処理を実行する。そして、プロセッサ１１１は、ネットワーク４００に接続されたネットワークカード１１２を介して接続された外部制御装置３００に、処理結果としての指令を伝送する。外部制御装置３００は、伝送された指令に基づいて、プラントの制御などの種々の処理を実行する。
【００１７】
また、主記憶部１０１は、周期変化検出プロセス部１０２を備える。周期変化検出プロセス部１０２には、オペレーティングシステム部１０７で収集したトレースデータを蓄積するスナップショットデータ記憶部１０３と、２つのプロセス別トレースバッファ１０４，１０５とが設けられている。ここでは、２つのプロセス別トレースバッファ１０４，１０５の内の一方のバッファ１０４をＡ面のバッファと称し、他方のバッファ１０５をＢ面のバッファと称する。Ａ面のプロセス別トレースバッファ１０４とＢ面のプロセス別トレースバッファ１０５は、プロセス別トレースデータの蓄積を交互に行う。スナップショットデータ記憶部１０３と２つのプロセス別トレースバッファ１０４，１０５を使用した処理の詳細は、図２で後述する。
【００１８】
オペレーティングシステム部１０７は、トレース収集機能部１０８とトレース領域部１０９とを備える。トレース収集機能部１０８は、オペレーティングシステム部１０７がオペレーティングシステムを実行する際の動作ログであるトレースデータを収集し、収集したトレースデータをトレース領域部１０９のトレースデータ保持部１１０に記憶する。トレースデータ保持部１１０に保持されたトレースデータは、周期変化検出プロセス部１０２によってスナップショットデータとして読み出される。ここでのスナップショットデータとは、ある時点やある期間に発生したトレースデータの集合を意味する。
【００１９】
また、計算機１００は二次記憶部１１３を備える。二次記憶部１１３は、ハードディスクドライブ（ＨＤＤ）やソリッドステートドライブ（ＳＳＤ）などの大容量記憶装置で構成され、プロセス別トレースバッファ１０４，１０５から転送されたトレースデータを記憶するトレースデータ保持部１１４を備える。
【００２０】
［２．トレースデータの構成例］
図２は、計算機１００内で収集されるトレースデータの構成の一例を示す。トレースデータは、どのプロセスのトレースデータであるかを示すプロセス識別子１１００と、トレースデータが生成された時刻情報１１０１と、プロセスとして何を実行したかを示すトレース種別情報１１０２と、プロセスなどの詳細情報１１０３を持つ。
この図２に示すトレースデータが、トレースデータ保持部１１０に記憶され、周期変化検出プロセス部１０２にスナップショットデータとして読み出される。
【００２１】
［３．周期変化検出プロセス部の構成例］
図３は、周期変化検出プロセス部１０２が持つ機能を示すブロック図である。
周期変化検出プロセス部１０２は、スナップショット読み出し部１０２１と、スナップショット解析部１０２２と、トレースバッファ比較部１０２３と、スナップショット出力部１０２４とを持つ。
スナップショット読み出し部１０２１は、トレース領域部１０９のトレースデータ保持部１１０が保持したトレースデータを周期的に読み出し、スナップショットデータ記憶部１０３にスナップショットデータとして保持する。
【００２２】
スナップショット解析部１０２２は、スナップショットデータ記憶部１０３に保持されたスナップショットデータ（トレースデータ）を使用して、スナップショット解析処理を行う。すなわち、スナップショット解析部１０２２は、スナップショットデータ記憶部１０３に保持されたトレースデータを、そのトレースデータが持つプロセス識別情報（図２のプロセス識別子１１００）を用いてプロセス別に分類する。そして、スナップショット解析部１０２２は、プロセス別に分けられたトレースデータを、Ａ面のプロセス別トレースバッファ１０４又はＢ面のプロセス別トレースバッファ１０５にコピーする。
このとき、スナップショット解析部１０２２は、トレースデータがプロセスの周期処理の開始を示すものである場合、トレースデータを保持する領域を切り替える。すなわち、スナップショット解析部１０２２は、トレースデータを保持するバッファを、プロセスの周期毎に、Ａ面のプロセス別トレースバッファ１０４とＢ面のプロセス別トレースバッファ１０５との間で切り替える。スナップショット解析部１０２２によるバッファの切り替え状態の詳細については、後述する。
【００２３】
さらに、スナップショット解析部１０２２は、周期処理開始を示すトレースデータを得て、かつその周期が３周期目以降である場合には、トレースバッファ比較部１０２３へ通知する。トレースバッファ比較部１０２３は、プロセス別トレースバッファＡ面１０４に保持されているトレースデータと、プロセス別トレースバッファＢ面１０５に保持されているトレースデータを比較する。本実施の形態例では、比較手法として、プロセスの周期時間差と周期類似度を用いた比較を行う。トレースバッファ比較部１０２３が周期時間差と周期類似度を求める処理については後述する。
【００２４】
トレースバッファ比較部１０２３は、求めた周期時間差と周期類似度を２次元平面状へプロットし、そのプロットしたポイントと、過去にプロットされたポイントとを比較する。そして、トレースバッファ比較部１０２３は、今回プロットした位置が、過去にプロットされたポイントの群から外れた位置であるとき、はずれ値とする。
今回プロットしたポイントがはずれ値である場合、トレースバッファ比較部１０２３は、スナップショット出力部１０２４に、スナップショットを出力するように通知する。
【００２５】
トレースバッファ比較部１０２３からの通知が行われたスナップショット出力部１０２４は、プロセス別トレースバッファＡ面１０４又はプロセス別トレースバッファＢ面１０５に保持された、該当するトレースデータを出力する。この出力されたトレースデータは、二次記憶部１１３のトレースデータ保持部１１４に記憶される。
【００２６】
［４．スナップショットデータを分ける処理の例］
図４は、スナップショットデータ記憶部１０３に保持されたスナップショットデータ（トレースデータ）を、プロセス別トレースバッファＡ面１０４又はプロセス別トレースバッファＢ面１０５へ格納する処理を模式的に示したものである。なお、以下に説明するトレースデータ１０３ａ〜１０３ｅは、全て同じ種類のプロセスのデータである。
【００２７】
まず、スナップショットデータ記憶部１０３は、スナップショットデータ１０３ａを取得する。ここで、スナップショットデータ１０３ａの中に、プロセスの周期処理の開始を示すトレースデータ１０３ａ１が存在した場合には、そのときのトレースデータがプロセス別トレースバッファＡ面１０４にコピーされる。
【００２８】
次に、スナップショットデータ記憶部１０３は、スナップショットデータ１０３ｂを取得する。ここで、スナップショットデータ１０３ｂの中に、プロセスの関数実行のトレースデータ１０３ｂ１が存在した場合には、そのときのトレースデータがプロセス別トレースバッファＡ面１０４にコピーされる。
【００２９】
次に、スナップショットデータ記憶部１０３は、スナップショットデータ１０３ｃを取得する。ここで、スナップショットデータ１０３ｃの中に、プロセスの周期処理の開始を示すトレースデータ１０３ｃ１が存在したとする。このとき、スナップショット解析部１０２２は、トレースデータを保持する領域を切り替え、そのときのトレースデータをプロセス別トレースバッファＢ面１０５にコピーする。
【００３０】
次に、スナップショットデータ記憶部１０３は、スナップショットデータ１０３ｄを取得する。ここで、スナップショットデータ１０３ｄの中に、プロセスの関数実行を示すトレースデータ１０３ｄ１が存在したとする。このとき、そのトレースデータが、プロセス別トレースバッファＢ面１０４にコピーされる。
【００３１】
次に、スナップショットデータ記憶部１０３は、スナップショットデータ１０３ｅを取得する。ここで、スナップショットデータ１０３ｅの中に、プロセスの周期処理開始を示すトレースデータ１０３ｅ１が存在したとすると、スナップショット解析部１０２２は、トレースデータを保持する領域を切り替え、そのときのトレースデータをプロセス別トレースバッファＡ面１０５にコピーする。
【００３２】
スナップショット解析部１０２２は、上述したような動作を繰り返し実行する。
そして、既に説明したように、周期処理開始を示すトレースデータを得た際に、その周期が３周期目以降である場合に、スナップショット解析部１０２２がトレースバッファ比較部１０２３に、上述の比較処理を実行するように通知する。
【００３３】
［５．周期時間差と周期類似度を求める処理の例］
図５は、プロセス別トレースバッファＡ面１０４とプロセス別トレースバッファＢ面１０５に格納されるデータの例を示す。以下、この図５を参照して、スナップショット解析部１０２２が周期時間差と周期類似度を求める例について説明する。
図５に示すように、プロセス別トレースバッファＡ面１０４にはトレースデータ１０４０，１０４１，１０４２，１０４３が格納されている。また、プロセス別トレースバッファＢ面１０５には、トレースデータ１０５０，１０５１，１０５２，１０５３，１０５４が格納されている。なお、それぞれのトレースデータは、各データが発生した時刻の情報と、周期開始，ロック取得，ロック解除，書込み，送信などの処理内容の情報を持っている。
【００３４】
まず、スナップショット解析部１０２２は、周期時間差を求める。プロセス別トレースバッファ（Ａ面）１０４に保持されたデータの周期処理時間は、最初のトレースデータ１０４０の時刻 “０”と、最後のトレースデータ１０４３の時刻“６”との差である。したがって、プロセス別トレースバッファ（Ａ面）１０４に保持されたデータの周期処理時間は “６”になる。
一方、プロセス別トレースバッファ（Ｂ面）１０５に保持されたデータの周期処理時間は、最初のトレースデータ１０５０の時刻 “１０”と、最後のトレースデータ１０５４の時刻２０”との差である。したがって、プロセス別トレースバッファ（Ｂ面）１０５に保持されたデータの周期処理時間は “１０”になる。
そして、スナップショット解析部１０２２は、プロセス別トレースバッファ（Ａ面）１０４のデータの周期処理時間 “６”と、プロセス別トレースバッファ（Ｂ面）１０５のデータの周期処理時間 “１０”との差を取得し、周期時間差“４”を得る。
【００３５】
次に、周期類似度を求める処理について説明する。
図５に示す２つのバッファ１０４，１０５のデータを比較すると、バッファＢ面１０５に書き込みを表すトレースデータ１０５３がある点で相違するが、トレースデータ１０５３以外の他のトレースデータは、２つのバッファ１０４，１０５で同じ内容である。
このことから、スナップショット解析部１０２２は、プロセス別トレースバッファ（Ａ面）１０４のトレースデータと、プロセス別トレースバッファＢ面１０５のトレースデータとの編集距離“１”を求める。ここでは、１つの追加操作の重みを値“１”としている。
この編集距離“１”が周期類似度に相当し、この例では、値が小さい程、周期類似度が高いことを示している。
【００３６】
図６は、周期時間差と周期類似度をプロットした２次元平面の模式図である。
周期動作をするプロセスでは、その入力値の集中状況により、複数の動作パスの存在を見出すことができる。すなわち、複数の動作パスが存在するということは、周期時間差と周期類似度をプロットした２次元平面上では、複数の動作パスに対応した特定個所に集中してプロットされることになる。
例えば、図６では、大きく分けて、３つのプロット群６００，６０１，６０２が存在する状況が示される。この図６の例は、３つの動作パスが存在する例を示している。そして、何らかの理由により通常とは異なる動作をした場合には、これらのプロット群６００，６０１，６０２とは異なる箇所に新しいプロットが為される。図６の例では、プロット群６００，６０１，６０２とは異なる箇所に、新しいプロット６０３が発生した状況を示す。
【００３７】
この新しいプロット６０３が発生したとき、トレースバッファ比較部１０２３は、プロット６０３をはずれ値として検出する。
はずれ値が検出されると、トレースバッファ比較部１０２３は、スナップショット出力部１０２４に対して、そのときのプロセス別トレースバッファＡ面１０４又はＢ面１０５に保持されたトレースデータの出力を指示する。
【００３８】
［６．スナップショットデータを２つのバッファに分ける処理シーケンス例］
図７は、スナップショットデータ記憶部１０３からプロセス別トレースバッファＡ面１０４及びプロセス別トレースバッファＢ面１０５に、トレースデータを格納するまでの処理シーケンスを示すフローチャートである。スナップショット解析部１０２２は、スナップショットデータ記憶部１０３に保持されたトレースデータを１行ずつ読み込み、本シーケンスを適用する。
【００３９】
まず、スナップショット解析部１０２２は、読み込んだトレースデータが、周期開始を示すトレースデータであるか否かを判定する（ステップＳ１１）。ここで、周期開始を示すトレースデータである場合、スナップショット解析部１０２２は、プロセス別トレースバッファ（Ａ面）１０４にデータが格納されているか否かを判定する（ステップＳ１２）。そして、プロセス別トレースバッファ（Ａ面）１０４にデータが格納されている場合、さらにプロセス別トレースバッファ（Ｂ面）１０５にデータが格納されているか否かを判定する（ステップＳ１３）。
【００４０】
ステップＳ１３でＹＥＳとなる場合は、そのプロセスが２周期以上周期処理を行い、このトレースデータが３周期目以降であることを示しているため、トレースバッファ比較部１０２３が、２つのバッファ１０４，１０５の比較処理を行う（ステップＳ１４）。このステップＳ１４での比較処理の詳細は、図８のフローチャートで後述する。
そして、ステップＳ１３でＮＯとなる場合、及びステップＳ１４の比較処理の実行後に、スナップショット解析部１０２２は、プロセス別トレースバッファ（Ａ面）１０４のデータとプロセス別トレースバッファ（Ｂ面）１０５のデータとをスワップする（ステップＳ１５）。さらに、スナップショット解析部１０２２は、プロセス別トレースバッファ（Ａ面）１０４のデータをクリアする（ステップＳ１６）。これにより、プロセス別トレースバッファ（Ｂ面）１０５には、１周期前のトレースデータが格納され、プロセス別トレースバッファ（Ａ面）には何も格納されていない状態になる。
【００４１】
さらに、ステップＳ１２でＮＯとなる場合、及びステップＳ１６でプロセス別トレースバッファ（Ａ面）１０４のデータをクリアした後は、ステップＳ１７の処理に移る。ステップＳ１７では、スナップショット解析部１０２２が、プロセス別トレースバッファ（Ａ面）１０４に、周期開始を示すトレースデータを書き込む。この書き込みで、そのトレースデータに対する処理を終了する。
【００４２】
また、ステップＳ１１でＮＯとなる場合、すなわち、読み込んだトレースデータが周期開始を示すトレースでない場合、スナップショット解析部１０２２は、ステップＳ１８の処理に移る。ステップＳ１８では、スナップショット解析部１０２２は、プロセス別トレースバッファ（Ａ面）１０４に格納されたデータがあるか否かを判断する。
このステップＳ１８の判断でＹＥＳとなる場合、スナップショット解析部１０２２は、読み込んだトレースデータを、プロセス別トレースバッファ（Ａ面）１０４に書き込み（ステップＳ１９）、読み込んだトレースデータに対する処理を終了する。
【００４３】
また、ステップＳ１８の判断で、プロセス別トレースバッファ（Ａ面）１０４にデータが格納されていない場合、このときのプロセスは周期処理を行っていないため、そのトレースデータに対しては何も行わずに処理を終了する。
【００４４】
［７．トレースバッファを比較する処理シーケンス例］
図８は、トレースバッファ比較部１０２３が、２つのバッファ１０４，１０５に格納されたトレースデータの比較処理シーケンスの例を示すフローチャートである。この図８のフローチャートの処理は、図７のフローチャートのステップＳ１４で実行される処理である。
【００４５】
まず、トレースバッファ比較部１０２３は、プロセス別トレースバッファ（Ａ面）１０４とプロセス別トレースバッファ（Ｂ面）１０５に格納されているトレースデータの時刻情報から、周期時間差を計算する（ステップＳ２１）。次に、トレースバッファ比較部１０２３は、プロセス別トレースバッファ（Ａ面）１０４とプロセス別トレースバッファ（Ｂ面）１０５に格納されているトレースデータのトレース種別から、プロセス別トレースバッファＡ面とＢ面の周期類似度を計算する（ステップＳ２２）。これらの周期時間差と周期類似度の計算処理は、図５を参照して既に説明した処理と同じであり、その説明は省略する。
【００４６】
次に、トレースバッファ比較部１０２３は、得られた周期時間差と周期類似度とを、図６に示すように２次元平面上にプロットする（ステップＳ２３）。このとき、トレースバッファ比較部１０２３は、プロットした点がはずれ値であるか否かの判定を行う（ステップＳ２４）。
ステップＳ２４の判定で、はずれ値であると判定した場合、スナップショット出力部１０２４は、バッファ１０４，１０５のトレースデータをファイル出力する（ステップＳ２５）。ここでは、プロセス別トレースバッファ（Ｂ面）１０５の一番古いトレースデータを持つスナップショットデータから、プロセス別トレースバッファ（Ａ面）１０４の一番新しいトレースデータを持つスナップショットデータまでを、１つのファイルとして出力する。
そして、ステップＳ２５でトレースデータを出力した後、及びステップＳ２４ではずれ値ではないと判定した場合（ステップＳ２４のＮＯ）には、そのトレースデータに対する処理を終了する。
【００４７】
以上説明したように本実施の形態例によると、プロセスの実行状態が、通常時と異なる状態であるとき、そのときのトレースデータが二次記憶部１１３のトレースデータ保持部１１４に保持されるようになる。すなわち、本実施の形態例のトレース収集システムを構成する計算機１００は、周期時間差と周期類似度との２つの値から通常時と異なるはずれ値を検出した場合に、そのときのトレースデータを出力して二次記憶部１１３に保持させるようにした。このため、二次記憶部１１３には、予め想定した異常とは異なる想定外の異常であっても、その際のトレースデータが保持されるようになり、異常などの状態を解析する際に必要なトレースデータが的確に得られるようになる。
【００４８】
また、このように通常時と異なる場合のトレースデータを確実に収集できることで、計算機１００は、汎用のオペレーティングシステムを使用した場合であっても対処できるようになる。すなわち、計算機１００は、汎用のオペレーティングシステムを使用した場合、メインの制御処理以外の様々な処理を並行して行う可能性があり、一定の条件に従って異常検出機構を作動させた際には、動作状況によって異常状態を検出できない可能性が高い。これに対して、本実施の形態例の場合には、汎用のオペレーティングシステムを使用した場合でも、的確に異常時のトレースデータを収集できるようになり、トレース収集システムの適用範囲が広がる。
【００４９】
［８．他の実施の形態例］
図１に示す計算機１００では、オペレーティングシステム部１０７内に、トレース収集機能部１０８とトレース領域部１０９とを構成させるようにした。これに対して、オペレーティングシステムとは別の制御処理部が、トレース収集機能を実行するようにしてもよい。
図９は、この場合の例を示す図である。図９において、図１で説明した構成要素と同じ箇所には同一符号を付している。
図９に示す計算機１００′は、制御プロセス部１０６からの指示で作動する制御ライブラリ部１１５を備え、制御ライブラリ部１１５内にトレース収集機能部１１６が設けられる。さらに、計算機１００′は、トレース収集機能部１１６が収集したトレースデータを保持するトレース領域部１１７を備え、トレース領域部１１７内にトレースデータ保持部１１８が設けられる。トレース領域部１１７についても、オペレーティングシステム部１０７の外部に設けられる。
【００５０】
図９に示す計算機１００′のトレース収集機能部１１６やトレース領域部１１７が行う処理は、図１に示す計算機１００のトレース収集機能部１０８やトレース領域部１０９が行う処理と同じである。そして、トレース領域部１１７のトレースデータ保持部１１８が保持したトレースデータが、周期変化検出プロセス部１０２にスナップショットデータとして読み出される。
このように構成した図９に示す計算機１００′の場合にも、図１に示す計算機１００と同様に、プロセスの実行状態が、通常時と異なる状態であるとき、そのときのトレースデータが二次記憶部１１３のトレースデータ保持部１１４に保持されるようになる。
【００５１】
［９．他の変形例］
なお、上述した実施の形態例で説明した構成や処理は、あくまでも好適な一例を示すものであり、本発明はここで説明した実施形態例に限定されない。例えば、プロセス別トレースバッファの比較処理を行う際には、直前の周期との比較を行う代わりに、トレース収集システムが、あらかじめ学習したトレースデータパターンとの比較を行うなどの、他の比較処理を行うようにしてもよい。
また、上述した実施の形態例で説明した周期時間差と類似度についても、２次元平面を用いたはずれ値検出による周期変化検出を行う代わりに、トレース収集システムが、設定した閾値と検出値との比較を行って、周期変化検出を行うようにしてもよい。さらに、周期時間差や類似度による比較を行う代わりに、トレース収集システムが、トレースデータの種別ごとの出現頻度といった統計情報による比較を行うようにしてもよい。
また、バッファに保持されたトレースデータを二次記憶部１１３のトレースデータ保持部１１４が保持する際には、異常があったプロセスのトレースデータのみを保持する代わりに、同じ時刻の全てのプロセスのトレースデータを保持してもよい。
【００５２】
さらに、本発明は上述した実施の形態例に限られるものではなく、特許請求の範囲に記載した本発明の要旨を逸脱しない限りにおいて、その他種々の応用例、変形例を取り得ることは勿論である。また、トレース収集システムの各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。各機能を実現するプログラム、トレースデータ、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
また、システムの内部構成を示す図１，図２，図９などに示す信号の流れのラインは説明上必要と考えられるものを示しており、必ずしもシステムとして必要な全てのラインを示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【００５３】
１００…計算機、１０１…主記憶部、１０２…周期変化検出プロセス部、１０３…スナップショットデータ記憶部、１０４…プロセス別トレースバッファ（Ａ面）、１０５…プロセス別トレースバッファ（Ｂ面）、１０６…制御プロセス部、１０７…オペレーティングシステム部、１０８…トレース収集機能部、１０９…トレース領域部、１１０…トレースデータ保持部、１１１…プロセッサ、１１２…ネットワークカード、１１３…二次記憶部、１１４…トレースデータ保持部、１１５…制御プロセス部、１１６…トレース収集機能部、１１７…トレース領域部、１１８…トレースデータ保持部、３００…外部記憶装置、４００…ネットワーク、１０２１…スナップショット読み出し部、１０２２…スナップショット解析部、１０２３…トレースバッファ比較部、１０２４…スナップショット出力部
【図１】
2017004360.tif 000003
【図２】
2017004360.tif 000004
【図３】
2017004360.tif 000005
【図４】
2017004360.tif 000006
【図５】
2017004360.tif 000007
【図６】
2017004360.tif 000008
【図７】
2017004360.tif 000009
【図８】
2017004360.tif 000010
【図９】
2017004360.tif 000011