(57)【要約】      （修正有）【課題】複数の処理が関連して動作するプログラムにおいて、ストール発生の原因調査に用いる情報を採取する。【解決手段】複数のプログラムのトレース情報を収集する収集部１０と、第１のプログラムのトレース情報を格納可能な複数のバッファ（２２乃至２４）と、それらバッファのうち、現在トレース情報を収集しているバッファへのアクセスに必要な情報を格納する管理情報２１とを含む第１の情報格納部２０と、第２のプログラムのトレース情報を格納可能な複数のバッファ（３２乃至３４）と、それらバッファのうち、現在トレース情報を収集しているバッファへのアクセスに必要な情報を格納する管理情報３１とを含む第２の情報格納部３０とを備え、ストールを検出した場合に、管理部４０は、前記現在トレース情報を収集しているバッファから、そのバッファとは異なるバッファに、前記トレース情報の収集先を一斉に切り替える。【選択図】図１
2015022667.tif 000002
【特許請求の範囲】
【請求項１】
複数のプログラムが並行、又は疑似並行に関連して動作する環境において、それらのプログラムのトレース情報を収集する収集手段と、
前記複数のプログラムのうち、第１のプログラムのトレース情報を格納可能な複数のバッファと、それらバッファのうち、現在トレース情報を収集しているバッファへのアクセスに必要な情報を格納する管理情報とを含む第１の情報格納部と、
前記複数のプログラムのうち、第２のプログラムのトレース情報を格納可能な複数のバッファと、それらバッファのうち、現在トレース情報を収集しているバッファへのアクセスに必要な情報を格納する管理情報とを含む第２の情報格納部と、
あらかじめ定めたストール判定条件を判定することによりストールを検出した場合に、前記第１及び第２の情報格納部に対して、前記複数のバッファのうち、前記現在トレース情報を収集しているバッファから、そのバッファとは異なるバッファに、前記トレース情報の収集先を一斉に切り替えて、前記トレース情報を保存するように制御する管理手段とを
備えることを特徴とするトレース情報収集装置。
【請求項２】
前記ストール判定条件は、前記第１及び第２の情報格納部を直近に更新した時刻を参照した結果を基に判定することを特徴とする請求項１記載のトレース情報収集装置。
【請求項３】
前記第２の情報格納部に含まれる前記複数のバッファは、前記トレース情報を格納可能で、かつ、前記第１の情報格納部に含まれる前記複数のバッファに１対１に対応することを特徴とする請求項１または請求項２記載のトレース情報収集装置。
【請求項４】
前記複数のプログラムが並行、又は疑似並行に関連して動作する環境は、マルチスレッド環境であることを特徴とする請求項１乃至３の何れかに記載のトレース情報収集装置。
【請求項５】
複数のプログラムが並行、又は疑似並行に関連して動作する環境において、情報処理装置によって、
前記複数のプログラムのうち、第１のプログラムのトレース情報を格納可能な複数のバッファと、それらバッファのうち、現在トレース情報を収集しているバッファへのアクセスに必要な情報を格納する管理情報とを含む第１の情報格納部に対し、第１のプログラムのトレース情報を、前記管理情報を元に、前記バッファに収集し、
前記複数のプログラムのうち、第２のプログラムのトレース情報を格納可能な複数のバッファと、それらバッファのうち、現在トレース情報を収集しているバッファへのアクセスに必要な情報を格納する管理情報とを含む第２の情報格納部に対し、第２のプログラムのトレース情報を、前記管理情報を元に、前記バッファに収集し、
あらかじめ定めたストール判定条件を判定することによりストールを検出した場合に、前記第１及び第２の情報格納部に対して、前記複数のバッファのうち、前記現在トレース情報を収集しているバッファから、そのバッファとは異なるバッファに、前記トレース情報の収集先を一斉に切り替えて、前記トレース情報を保存するように制御する
ことを特徴とするトレース情報収集方法。
【請求項６】
前記ストール判定条件は、前記第１及び第２の情報格納部を直近に更新した時刻を参照した結果を基に判定することを特徴とする請求項５記載のトレース情報収集方法。
【請求項７】
前記第２の情報格納部に含まれる前記複数のバッファは、前記トレース情報を格納可能で、かつ、前記第１の情報格納部に含まれる前記複数のバッファに１対１に対応することを特徴とする請求項５または請求項６記載のトレース情報収集方法。
【請求項８】
複数のプログラムが並行して、関連して動作する環境において、それら複数のプログラムのうち、第１のプログラムのトレース情報を格納可能な複数のバッファと、それらバッファのうち、現在トレース情報を収集しているバッファにアクセスするために必要な情報を格納する管理情報とを含む第１の情報格納部に対し、第１のプログラムのトレース情報を、前記管理情報を元に、前記バッファに収集し、
前記複数のプログラムのうち、第２のプログラムのトレース情報を格納可能な複数のバッファと、それらバッファのうち、現在トレース情報を収集しているバッファにアクセスするために必要な情報を格納する管理情報とを含む第２の情報格納部に対し、第２のプログラムのトレース情報を、前記管理情報を元に、前記バッファに収集し、
あらかじめ定めたストール条件を判定することによりストールを検出した場合に、前記第１及び第２の情報格納部に対して、前記複数のバッファのうち、現在トレース情報を収集しているバッファから、そのバッファとは異なるバッファに、トレース情報の収集先を一斉に切り替えて、前記トレース情報を保存するように制御する制御機能を、コンピュータに実現させる
ことを特徴とするコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、トレース情報収集装置およびトレース情報収集方法、並びにコンピュータ・プログラムに関する。
【背景技術】
【０００２】
実行しているプログラムの途中でストールが発生した場合、そのストールが発生する前の詳細なトレース情報があれば、係るストールに至る過程を確認することができ、それにより、係るストールが発生した原因が判明する可能性が大きくなる。ここで、ストールとは、デッドロックやＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が割り当てられないなどの、プログラムの処理がまったく進まない停止もしくは異常な遅延状態をいう。
【０００３】
この詳細なトレース情報を常時採取すると、採取されるトレース情報は膨大な量になる。そのため、トレース情報をサイクリックに出力することにより、ディスク容量不足を防ぐ事例が多い。サイクリックに出力するとは、トレース情報の格納先である記憶領域のアドレス空間において末尾までトレース情報を格納した後は、その記憶領域の先頭から、既に格納されているトレース情報に上書きによって更新することにより、トレース情報の格納を続けることである。
【０００４】
スレッド間で連携するマルチスレッドプログラムなど、複数の処理が関連して動作するプログラムでは、他のプログラムの処理遅延やアンロック漏れなどの原因でストールする場合がある。そのため、このようなプログラムでは、ストールした処理のトレース情報だけではなく、関連する他の処理に関する詳細なトレース情報も原因の調査に必要となる。
【０００５】
しかし、トレース情報を参照して調査を行うときには、トレース情報をサイクリックに出力することにより、既に、ストールが発生した時点のトレース情報が残っていない場合がある。
【０００６】
例えば、あるスレッドが停止したことにより、他のスレッドにおいて応答待ちタイムアウトが発生することによって異常と判断されたとしても、停止したスレッドが動作を再開し、その後正常に動作する場合がある。
【０００７】
あるスレッドの排他解除漏れにより、他のスレッドが排他取得待ちで待たされ続けるような場合にも、排他解除漏れしたスレッドは、正常に動作を続けてしまう。
【０００８】
また、あるスレッドが応答を返さなかったことにより、他のスレッドが応答待ちで待たされ続けるような場合にも、応答を返さなかったスレッドは、正常に動作を続けてしまう。
【０００９】
あるいは、あるスレッドが非同期に複数の通知を他のスレッドに対して行い、その一つが不正な通知であることにより、他のスレッドが停止に至るような場合にも、不正な通知をしたスレッドは、正常に動作を続けてしまう。
【００１０】
これらのような場合に、運用者は、スレッドが停止した時点のトレース情報、排他解除漏れした時点のトレース情報、応答を返し忘れた時点のトレース情報、不正な通知をした時点のトレース情報を確認する必要がある。しかし、応答待ちタイムアウトなどの異常を検知した時点では、トレース情報がサイクリックに出力されることにより、すでに上書きされ、必要なトレース情報が入手できない可能性があるという問題がある。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００２−００７１７２号公報
【特許文献２】特開２０００−１８１７４８号公報
【特許文献３】特開２０００−０５７０１３号公報
【特許文献４】特開平１１−１８４７３６号公報
【特許文献５】特開第５０９３１７５号公報
【特許文献６】特開第４１１４８７９号公報
【特許文献７】特開平０８−０４４５９５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
ここで、本願出願に先だって存在する関連技術としては、例えば以下の特許文献がある。
【００１３】
特許文献１に提案されている技術を用いることにより、ストールが発生したことをタイムスタンプの更新状態によって判定することができる。
【００１４】
特許文献２に提案されている技術を用いることにより、マルチメモリ空間で動作するプログラムの各空間のトレース情報を採取することができる。
【００１５】
特許文献３に提案されている技術を用いることにより、トレース情報を格納するバッファを複数持ち、トレース情報の格納先のバッファがいっぱいになったら、次のバッファに切り替えて、複数のバッファを繰り返し使用することができる。
【００１６】
特許文献４に提案されている技術を用いることにより、ストール検出時に、データを収集することができる。
【００１７】
特許文献５に提案されている技術を用いることにより、トレース情報採取対象のイベント発生時に、トレース情報を採取することができる。
【００１８】
特許文献６に提案されている技術を用いることにより、トレース採取対象プログラムの稼動停止時間比率を比較することにより、通常と異なる動作で動いていると判断した場合に、トレース情報の採取を行うことができる。
【００１９】
特許文献７に提案されている技術を用いることにより、トレース採取対象プログラムが動くプロセスでは、トレース情報をバッファに格納し、別プロセスでバッファからファイルに入力することにより、トレース採取対象プログラムに対して、トレース採取のためにかかる負荷を少なくすることができる。
【００２０】
しかし、特許文献１乃至７に提案されている技術を用いても、複数の処理が関連して動作するプログラムにおけるトレース収集に関しては考慮されておらず、上述した課題を解決するには至っていない。
【００２１】
本発明は、スレッド間で連携するマルチスレッドプログラムなど、複数の処理が関連して動作するプログラムにおいて、ストール発生の原因調査に用いる情報を採取することが可能なトレース情報収集装置等を提供することを主たる目的とする。
【課題を解決するための手段】
【００２２】
上記の目的を達成すべく、本発明に係るトレース情報収集装置は、以下の構成を備えることを特徴とする。
【００２３】
即ち、本発明に係るトレース情報収集装置は、
複数のプログラムが並行、又は疑似並行に関連して動作する環境において、それらのプログラムのトレース情報を収集する収集手段と、
前記複数のプログラムのうち、第１のプログラムのトレース情報を格納可能な複数のバッファと、それらバッファのうち、現在トレース情報を収集しているバッファへのアクセスに必要な情報を格納する管理情報とを含む第１の情報格納部と、
前記複数のプログラムのうち、第２のプログラムのトレース情報を格納可能な複数のバッファと、それらバッファのうち、現在トレース情報を収集しているバッファへのアクセスに必要な情報を格納する管理情報とを含む第２の情報格納部と、
あらかじめ定めたストール判定条件を判定することによりストールを検出した場合に、前記第１及び第２の情報格納部に対して、前記複数のバッファのうち、前記現在トレース情報を収集しているバッファから、そのバッファとは異なるバッファに、前記トレース情報の収集先を一斉に切り替えて、前記トレース情報を保存するように制御する管理手段とを
備える
ことを特徴とする。
【００２４】
同目的を達成する本発明に係るトレース情報収集方法は、
複数のプログラムが並行、又は疑似並行に関連して動作する環境において、情報処理装置によって、
前記複数のプログラムのうち、第１のプログラムのトレース情報を格納可能な複数のバッファと、それらバッファのうち、現在トレース情報を収集しているバッファへのアクセスに必要な情報を格納する管理情報とを含む第１の情報格納部に対し、第１のプログラムのトレース情報を、前記管理情報を元に、前記バッファに収集し、
前記複数のプログラムのうち、第２のプログラムのトレース情報を格納可能な複数のバッファと、それらバッファのうち、現在トレース情報を収集しているバッファへのアクセスに必要な情報を格納する管理情報とを含む第２の情報格納部に対し、第２のプログラムのトレース情報を、前記管理情報を元に、前記バッファに収集し、
あらかじめ定めたストール判定条件を判定することによりストールを検出した場合に、前記第１及び第２の情報格納部に対して、前記複数のバッファのうち、前記現在トレース情報を収集しているバッファから、そのバッファとは異なるバッファに、前記トレース情報の収集先を一斉に切り替えて、前記トレース情報を保存するように制御する
ことを特徴とする。
【００２５】
更に、同目的は、上記構成を有するトレース情報収集方法、並びにトレース情報収集装置を、コンピュータによって実現するコンピュータ・プログラム、及びそのコンピュータ・プログラムが格納されている、コンピュータ読み取り可能な記憶媒体によっても達成される。
【発明の効果】
【００２６】
上記の本発明によれば、スレッド間で連携するマルチスレッドプログラムなど、複数の処理が関連して動作するプログラムにおいて、ストール発生の原因調査に用いる情報を採取することができる。
【図面の簡単な説明】
【００２７】
【図１】本発明の第１の実施形態に係るトレース情報収集装置の構成を示すブロック図である。
【図２】本発明の第２の実施形態に係るトレース情報収集装置の構成を示すブロック図である。
【図３】本発明の第２の実施形態に係る管理情報を説明する図である。
【図４】本発明の第２の実施形態に係るバッファ情報を説明する図である。
【図５】本発明の第２の実施形態に係るトレース情報収集部におけるトレース情報を共有メモリに格納する処理を示すフローチャートである。
【図６】本発明の第２の実施形態に係るバッファ管理部におけるストール監視処理を示すフローチャートである。
【図７】本発明の第２の実施形態に係るバッファ管理部における状態初期化処理を示すフローチャートである。
【図８】本発明の第２の実施形態に係るバッファ管理部におけるファイル書き込みに関する処理を示すフローチャートである。
【図９】本発明の第２の実施形態に係るファイル出力部におけるファイル書き込み処理を示すフローチャートである。
【図１０】本発明の第２の実施形態に係るトレース情報収集装置を変形した構成を示すブロック図である。
【図１１】本発明の第３の実施形態に係るトレース情報収集装置の構成を示すブロック図である。
【図１２】本発明の第４の実施形態に係るトレース情報収集装置の構成を示すブロック図である。
【図１３】本発明の第１乃至第４の実施形態を実現可能なコンピュータ（情報処理装置）のハードウェア構成を例示的に説明する図である。
【発明を実施するための形態】
【００２８】
次に、本発明を実施する形態について図面を参照して詳細に説明する。
【００２９】
＜第１の実施形態＞
図１は、本発明の第１の実施形態に係るトレース情報収集装置の構成を示すブロック図である。
【００３０】
トレース情報収集装置は、収集部１０と、情報格納部２０と、情報格納部３０と、管理部４０とを含む。
【００３１】
収集部１０は、処理６０からトレース情報を収集し、収集したトレース情報を情報格納部２０に格納する。また、収集部１０は、処理７０からトレース情報を収集し、収集したトレース情報を情報格納部３０に格納する。
【００３２】
情報格納部２０は、管理情報２１と、バッファ２２と、バッファ２３と、バッファ２４とを有する。
【００３３】
管理情報２１は、それらの３つのバッファのうちで、現在のトレース情報の格納先であるバッファを表す情報である（詳細は、第２の実施形態において、図３を参照して後述する）。
【００３４】
情報格納部３０は、図１に示すように情報格納部２０と同じ構成で、管理情報３１と、バッファ３２と、バッファ３３と、バッファ３４とを有する。
【００３５】
管理部４０は、ストール発生を検知して、トレース情報を確保するために、トレース情報の格納先となるバッファを一斉に切り替える。すなわち、管理部４０は、情報格納部２０と情報格納部３０の管理情報２１および３１を次にトレース情報を格納するバッファの情報に変更する。
【００３６】
本実施形態によれば、複数の処理が関連して動作するプログラムにおいて、ストール発生の原因調査に用いる情報を採取することができるという効果がある。
【００３７】
その理由は、各処理が別々の共有メモリにトレース情報を格納し、トレース情報の格納先として各共有メモリに複数のバッファを用意するためである。これにより、ある処理にストールの可能性を検知した場合に、一斉にトレース情報を格納するバッファを変更して保存することにより、その時点までの他の処理のトレース情報も残すことができる。
【００３８】
＜第２の実施形態＞
図２は、本発明の第２の実施形態に係るトレース情報収集装置の構成を示すブロック図である。
【００３９】
本実施形態に係るトレース情報収集装置は、プロセス１００と、トレース情報収集部２００と、共有メモリ３０１および３０２と、属性３６１および３６２と、バッファ管理部４００と、ファイル出力部５００と、ファイル６００とを有する。
【００４０】
プロセス１００は、スレッド１０１と、スレッド１０２とを含む。
【００４１】
スレッド１０１で動作するアプリケーションプログラム（図示せず）は、トレース情報収集部２００により、共有メモリ３０１へトレース情報を格納する。
【００４２】
同様に、スレッド１０２で動作するアプリケーションプログラム（図示せず）は、トレース情報収集部２００により、共有メモリ３０２へトレース情報を格納する。
【００４３】
共有メモリ３０１は、管理情報３１１と、トレース情報の格納先である３つのバッファ（バッファＡ３２１、バッファＢ３３１およびバッファＣ３４１）とを含む。
【００４４】
バッファ管理部４００は、バッファ情報４０１を含む。
【００４５】
図３は、本発明の第２の実施形態に係る管理情報３１１を説明する図である。
【００４６】
管理情報３１１は、トレース情報収集部２００がトレース情報を格納する際に、トレース情報の格納先を示す情報を得るために参照する情報である。すなわち、図３に示すように、管理情報３１１は、トレース情報を格納する位置である格納位置８１１と、現在トレース情報の格納先となっているバッファの開始位置であるバッファ開始位置８１２と、該バッファの終了位置であるバッファ終了位置８１３のそれぞれについて、各々のアドレスを表す情報であるアドレス８１４を含む。
【００４７】
また、管理情報３１１は、３つのバッファ（バッファＡ３２１、バッファＢ３３１およびバッファＣ３４１）各々の開始位置と終了位置のアドレスを表す情報であるバッファ情報８１５も含む。
【００４８】
バッファ情報８１５は、トレース情報の格納先のバッファの切り替えのため、格納位置８１１と、バッファ開始位置８１２およびバッファ終了位置８１３を更新する場合に、参照される情報である。
【００４９】
トレース情報収集部２００は、バッファＡ３２１と、バッファＢ３３１と、バッファＣ３４１の３つのバッファのうちで、管理情報３１１が表すバッファに、トレース情報を格納する。トレース情報収集部２００は、トレース情報の格納先として、バッファＡ３２１の次はバッファＢ３３１を使用し、バッファＢ３３１の次はバッファＣ３４１を使用する。さらに、トレース情報収集部２００は、バッファＣ３４１の次はバッファＡ３２１を使用する。
【００５０】
属性３６１は、例えば、オペレーティングシステムにより提供される共有メモリ３０１の属性を表す情報である。属性３６１は、例えば、共有メモリ３０１の作成時刻や作成者、および、共有メモリ３０１の直近の更新時刻を含む。共有メモリ３０１に書き込みを行うと、オペレーティングシステムは、属性３６１に含まれる更新時刻に、書き込みを行った時刻を設定する。
【００５１】
共有メモリ３０２は、共有メモリ３０１と同様の構成である。共有メモリ３０２の管理情報３１２、バッファＡ３２２、バッファＢ３３２、バッファＣ３４２および属性３６２は、共有メモリ３０１の管理情報３１１、バッファＡ３２１、バッファＢ３３１、バッファＣ３４１、属性３６１にそれぞれ相当する。
【００５２】
ファイル出力部５００は、バッファ管理部４００からの指示により、指定されたバッファに格納されたトレース情報をファイル６００へ書き込む。
【００５３】
バッファ管理部４００は、共有メモリ３０１と、共有メモリ３０２内のすべてのバッファを管理する。
【００５４】
バッファ管理部４００は、共有メモリ３０１または３０２の前回の更新からの時間が、あらかじめ定めておいた一定時間を超えていないかを監視する。一定時間を超えて更新されていないことを検出した場合、バッファ管理部４００は、トレース情報収集部２００がトレース情報を格納するバッファを、現在格納しているバッファから次のバッファへ変更することを示すように、管理情報３１１および３１２を更新する。
【００５５】
バッファ管理部４００は、バッファ情報４０１を有する。
【００５６】
図４は、本発明の第２の実施形態に係るバッファ情報４０１を説明する図である。
【００５７】
バッファ管理部４００は、バッファＡ３２１および３２２、バッファＢ３３１および３３２、バッファＣ３４１および３４２を管理するため、バッファ情報４０１を有する。
【００５８】
バッファ情報４０１は、バッファ識別名８２１と、ステータス８２２と、最終時刻８２３とを含む。すなわち、バッファ識別名８２１と、ステータス８２２と、最終時刻８２３とは、バッファ情報４０１において、図４に概念的に示すテーブルの如く関連付けされていることとする。
【００５９】
バッファ識別名８２１は、バッファを識別するための情報である。
【００６０】
ステータス８２２は、例えば、「格納中」、「空き」、「書き込み中」、「一時保存」の４つの状態を表す情報である。バッファ管理部４００が、ステータス８２２の設定および変更を行う。
【００６１】
ステータス８２２が「格納中」とは、該バッファにトレース情報収集部２００がトレース情報を格納する状態であることを示す。
【００６２】
ステータス８２２が「空き」とは、該バッファを使用していない状態であることを示す。
【００６３】
ステータス８２２が「書き込み中」とは、該バッファ内のトレース情報を、ファイル出力部５００がファイル６００へ書き込み中であることを示す。
【００６４】
ステータス８２２が「一時保存」とは、トレース情報収集部２００がトレース情報を格納中ではないが、上書き等を行わずに、そのままトレース情報を保持している状態であることを示す。
【００６５】
最終時刻８２３は、トレース情報を格納するバッファを変更した時刻を表す情報である。
【００６６】
バッファ管理部４００が、トレース情報を格納するバッファを変更して、該バッファが「格納中」の状態でなくなったときに、その時刻を、最終時刻８２３に設定する。
【００６７】
例えば、トレース情報収集部２００が、バッファＡ３２１および３２２にトレース情報を格納している場合、バッファＡのステータス８２２は、「格納中」となっている。バッファ管理部４００が、トレース情報収集部２００のトレース格納先をバッファＡ（３２１および３２２）からバッファＢ（３３１および３３２）へ変更する際には、バッファＡのステータス８２２を「一時保存」にし、バッファＢのステータス８２２を「格納中」にする。
【００６８】
また、バッファ管理部４００は、格納するバッファの変更を行った時刻をバッファＢの最終時刻８２３に設定する。
【００６９】
さらに、バッファ管理部４００は、管理情報３１１の格納位置８１１と、バッファ開始位置８１２とに対応するアドレス８１４欄にバッファＢ３３１の開始アドレスを、バッファ終了位置８１３に対応するアドレス８１４欄にバッファＢ３３１の終了アドレスを設定する。
【００７０】
また、バッファ管理部４００は、管理情報３１２に対しても同様の設定を行う。すなわち、バッファ管理部４００は、管理情報３１２の格納位置８１１と、バッファ開始位置８１２とに対応するアドレス８１４欄にバッファＢ３３２の開始アドレスを、バッファ終了位置８１３に対応するアドレス８１４欄にバッファＢ３３２の終了アドレスを設定する。
【００７１】
これらの処理により、トレース情報収集部２００は、バッファＢ３３１および３３２にトレース情報を格納するようになる。
【００７２】
次に、図５乃至図９のフローチャートを参照して本発明の第２の実施形態の動作について詳細に説明する。
【００７３】
図５は、本発明の第２の実施形態に係るトレース情報収集部２００におけるトレース情報を共有メモリ３０１に格納する処理を示すフローチャートである。
【００７４】
初めに、トレース情報収集部２００は、スレッド１０１からトレース情報の格納要求を受けて、管理情報３１１を参照する（ステップＳ１１）。
【００７５】
トレース情報収集部２００は、格納要求を受けたトレース情報のサイズを、格納位置８１１のアドレスに加算する。加算により求められた位置が、バッファ終了位置８１３のアドレスを越えるか否かを、トレース情報収集部２００は、チェックする（ステップＳ１２）。
【００７６】
バッファ終了位置８１３のアドレスを超える（ステップＳ１２にて「Ｙｅｓ」）場合には、トレース情報収集部２００は、現在格納中のバッファの先頭に、トレース情報を格納する。すなわち、トレース情報収集部２００は、バッファ開始位置８１２のアドレスにトレース情報を格納する（ステップＳ１３）。トレース情報収集部２００は、格納位置８１１のアドレスを、格納したトレース情報のサイズをバッファ開始位置８１２のアドレスに加算した値に変更する（ステップＳ１４）。
【００７７】
バッファ終了位置８１３のアドレスを超えない（ステップＳ１２にて「Ｎｏ」）場合には、トレース情報収集部２００は、格納位置８１１のアドレスにトレース情報を格納する（ステップＳ１５）。トレース情報収集部２００は、格納位置８１１のアドレスを、格納したトレース情報のサイズ加算した値に変更する（ステップＳ１６）。
【００７８】
図６は、本発明の第２の実施形態に係るバッファ管理部４００におけるストール監視処理を示すフローチャートである。
【００７９】
ストール監視処理は、例えば、定期的に実行される。
【００８０】
バッファ管理部４００は、属性３６１および３６２内の、共有メモリ３０１および３０２の更新時刻を取得する（ステップＳ２１）。バッファ管理部４００は、例えば、オペレーティングシステムにより提供される関数等を用いて、属性３６１および３６２を得ることができる。
【００８１】
更新時刻を参照して、一定時間更新されていない共有メモリがあった（ステップＳ２２にて「Ｙｅｓ」）場合に、バッファ管理部４００は、共有メモリの更新時刻が、前にトレース情報を格納していたバッファの最終時刻８２３よりも後の時刻であるかを判定する（ステップＳ２３）。なお、ここでの一定時間は、あらかじめ決めておく時間であり、特に時間の値の限定はないが、例えば、その一定時間内のトレース情報格納でバッファがいっぱいにならない程度の時間を設定する。
【００８２】
共有メモリの更新時刻のほうが後の時刻である（ステップＳ２３にて「Ｙｅｓ」）場合には、バッファ管理部４００は、新たにストール発生の可能性を検知したと判断する。
【００８３】
反対に、ステップＳ２３にて「Ｎｏ」の場合には、バッファ管理部４００は、新たにストールの可能性を検知したのではなく、既にストールの可能性を検知した状態が継続していると判断する。
【００８４】
新たにストールの可能性を検知した場合、バッファ管理部４００は、次にトレース情報を格納するバッファのステータス８２２が「空き」であるか否かをチェックする（ステップＳ２４）。
【００８５】
次のバッファが「空き」であれば、バッファ管理部４００は、現在「格納中」のバッファに対応する最終時刻８２３に現在時刻を設定し、ステータス８２２を「一時保存」に変更する。バッファ管理部４００は、次のバッファに対応するステータス８２２を「格納中」に変更する（ステップＳ２５）。さらに、管理情報３１１および３１２において、それぞれ、格納位置８１１、バッファ開始位置８１２、バッファ終了位置８１３に対応するアドレス８１４を、次のバッファを示す値で更新する（ステップＳ２６）。
【００８６】
図７は、本発明の第２の実施形態に係るバッファ管理部４００における状態初期化処理を示すフローチャートである。
【００８７】
バッファ管理部４００は、ステータス８２２が「一時保存」のバッファの最終時刻８２３と現在時刻を比較する（ステップＳ３１）。
【００８８】
比較した結果、一定時間を経過している（ステップＳ３２にて「Ｙｅｓ」）場合は、バッファのステータス８２２を「空き」に変更する（ステップＳ３３）。なお、ここでの一定時間は、例えば、タイムアウトなどの異常が発生してからトレース情報取得作業（ファイル出力部５００によるファイルへの書き込み処理）を行うことを想定し、「一時保存」にしてからトレース情報取得作業を行うまでにかかる時間より長い。
【００８９】
図８は、本発明の第２の実施形態に係るバッファ管理部４００におけるファイル書き込みに関する処理を示すフローチャートである。
【００９０】
バッファ管理部４００は、ファイル出力部５００から通知がきているかを確認する（ステップＳ４１）。
【００９１】
ファイル出力部５００からの通知があった（ステップＳ４２にて「Ｙｅｓ」）場合は、バッファ管理部４００は、ステータス８２２が「一時保存」のバッファがあるか確認する（ステップＳ４３）。
【００９２】
「一時保存」のバッファがある（ステップＳ４３にて「Ｙｅｓ」）場合に、バッファ管理部４００は、「一時保存」のバッファについて、そのバッファの内容をファイルに書き込むことをファイル出力部５００に指示する（ステップＳ４４）。
【００９３】
「一時保存」のバッファがない（ステップＳ４３にて「Ｎｏ」）場合に、バッファ管理部４００は、「一時保存」のバッファがないことをファイル出力部５００に通知する（ステップＳ４８）。
【００９４】
次に、バッファ管理部４００は、ファイル出力部５００へファイル書き込みを指示したバッファのステータス８２２を、「一時保存」から「書き込み中」に変更する（ステップＳ４５）。
【００９５】
バッファ管理部４００は、ファイル出力部５００からファイル書き込み完了の通知を待つ（ステップＳ４６）。
【００９６】
バッファ管理部４００は、その通知を受けたら、該バッファのステータス８２２を「空き」に変更する（ステップＳ４７）。
【００９７】
図９は、本発明の第２の実施形態に係るファイル出力部５００におけるファイル書き込み処理を示すフローチャートである。
【００９８】
初めに、ファイル出力部５００は、バッファ管理部４００へファイルに書き込む旨を通知する（ステップＳ５１）。
【００９９】
ファイル出力部５００は、バッファ管理部４００からの応答を待つ（ステップＳ５２）。
【０１００】
バッファ管理部４００からきた応答が、「一時保存」のバッファがないことを示す場合には、ファイル出力部５００は、処理を終了する（ステップＳ５３にて「Ｎｏ」）。
【０１０１】
バッファ管理部４００からステータス８２２が「一時保存」のバッファについて通知を受けた（ステップＳ５３にて「Ｙｅｓ」）場合、ファイル出力部５００は、指示されたバッファ内に格納されたトレース情報をファイル６００へ書き込む（ステップＳ５４）。たとえば、バッファ管理部４００から「一時保存」のバッファとして、「バッファＢ」と通知された場合に、ファイル出力部５００は、各々の共有メモリ内のバッファＢ（３３１および３３２）内のトレース情報をファイル６００に書き込む。
【０１０２】
書き込み完了後、ファイル出力部５００は、バッファ管理部４００へファイル書き込み完了を通知する（ステップＳ５５）。
【０１０３】
本実施形態では、１つの共有メモリ内のバッファを３個として説明したが、バッファの個数はこれに限定されず、３個以上でもよい。
【０１０４】
図１０は、本発明の第２の実施形態に係るトレース情報収集装置を変形した構成を示すブロック図である。
【０１０５】
図１０において、共有メモリ３０１は、バッファＡ３２１と、バッファＢ３３１と、バッファＣ３４１と、バッファＤ３５１との４つのバッファを含む。同様に、共有メモリ３０２は、バッファＡ３２２と、バッファＢ３３２と、バッファＣ３４２と、バッファＤ３５２との４つのバッファを含む。
【０１０６】
図１０に示す如く、４つのバッファが対象の場合も処理の流れについては、変更がないため、説明は省略する。
【０１０７】
また、便宜上、共有メモリ３０１と３０２に含まれるバッファを同数として説明しているが、一方で他方が特定できれば、バッファの数は、同数に限定されない。
【０１０８】
以上、説明したように、第２の実施形態には、スレッド間で連携するマルチスレッドプログラムにおいて、ストール発生の原因調査に用いる情報を採取することができるという効果がある。
【０１０９】
その理由は、各スレッドが別々の共有メモリにトレース情報を格納し、トレース情報の格納先として各共有メモリに複数のバッファを用意するためである。これにより、ある処理にストールの可能性を検知した場合に、一斉にトレース情報を格納するバッファを変更して保存することにより、その時点までの他の処理のトレース情報も残すことができる。
【０１１０】
＜第３の実施形態＞
図１１は、本発明の第３の実施形態に係るトレース情報収集装置の構成を示すブロック図である。
【０１１１】
図２から図１１への変更点は、プロセス１００が、プロセス１０３と、プロセス１０４になったことである。すなわち、本発明の第２の実施形態は、複数のスレッドからそれぞれ別々の共有メモリにトレース情報を格納する構成としていたが、本発明の第３の実施形態は、複数のプロセス（プロセス１０３および１０４）からそれぞれ別々の共有メモリにトレース情報を格納する。
【０１１２】
以上、説明したように、第３の実施形態には、プロセス間で連携するプログラムにおいて、ストール発生の原因調査に用いる情報を採取することができるという効果がある。
【０１１３】
その理由は、各プロセスが別々の共有メモリにトレース情報を格納し、トレース情報の格納先として各共有メモリに複数のバッファを用意するためである。これにより、ある処理にストールの可能性を検知した場合に、一斉にトレース情報を格納するバッファを変更して保存することにより、その時点までの他の処理のトレース情報も残すことができる。  ＜第４の実施形態＞
図１２は、本発明の第４の実施形態に係るトレース情報収集装置の構成を示すブロック図である。
【０１１４】
本実施形態では、図１２に示すように、共有メモリごとにストール判定部７０１および７０２を設ける。
【０１１５】
ストール判定部７０１および７０２のそれぞれにストール判定条件を保持し、そのストール判定条件に基づいて、ストールの可能性の判定を行うことができる。
【０１１６】
以上、説明したように、第４の実施形態には、スレッド間で連携するマルチスレッドプログラムにおいて、あらかじめストールの定義を定め、そのストール発生の原因調査に用いる情報を採取することができるという効果がある。
【０１１７】
その理由は、各スレッドが別々の共有メモリにトレース情報を格納し、トレース情報の格納先として各共有メモリに複数のバッファを用意するためである。また、ストール判定条件をあらかじめ設定しておくためである。これにより、ある処理に、設定しておいたストール判定条件に基づいてストールの可能性を検知した場合に、一斉にトレース情報を格納するバッファを変更して保存することにより、その時点までの他の処理のトレース情報も残すことができる。
【０１１８】
（ハードウェア構成）
上述した実施形態において図１、図２、図１０、図１１および図１２に示した各部は、専用の装置によって実践してもよいが、ソフトウェアプログラムの機能（処理）単位（ソフトウェアモジュール）と捉えることができる。但し、これらの図面に示した各部の区分けは、説明の便宜上の構成であり、実装に際しては、様々な構成が想定され得る。このような場合のハードウェア環境の一例を、図１３を参照して説明する。
【０１１９】
図１３は、本発明の第１乃至第４の実施形態を実現可能なコンピュータ（情報処理装置）のハードウェア構成を例示的に説明する図である。即ち、図１、図２、図１０、図１１および図１２に示したトレース情報収集装置の全体または一部を実現可能なサーバ等のコンピュータ（情報処理装置）の構成であって、上述した実施形態における各機能を実現可能なハードウェア環境を表す。
【０１２０】
図１３に示した情報処理装置９０００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９００１、ディスプレイ９００２、通信インタフェース（Ｉ／Ｆ）９００３、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９００４、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９００５、ハードディスク装置（ＨＤ）９００６を備え、これらがバス９００７を介して接続された構成を有する。ハードディスク装置（ＨＤ）９００６には、プログラム群９００６Ａと、各種の記憶情報９００６Ｂとが格納されている。プログラム群９００６Ａは、例えば、上述した図１、図２、図１０、図１１および図１２に示した各ブロック（各部）に対応する機能を実現するためのコンピュータ・プログラムである。各種の記憶情報９００６Ｂは、例えば、図１に示した情報格納部２０、情報格納部３０等である。通信インタフェース９００３は、ネットワーク９１００を介して外部装置と通信を実現する一般的な通信手段である。
【０１２１】
そして、上述した実施形態を例に説明した本発明は、その実施形態の説明において参照したブロック構成図、あるいは、フローチャートの機能を実現可能なコンピュータ・プログラムを供給した後、そのコンピュータ・プログラムを、当該ハードウェアのＣＰＵ９００１に読み出して、図１３に示す情報処理装置９０００のハードウェア資源を用いて実行することによって達成される。具体的には、収集部１０またはトレース情報収集部２００を、情報処理装置９０００によって実現する場合、情報処理装置９０００は、図５に示すフローチャートに対応するコンピュータ・プログラムを実現すればよい。管理部４０またはバッファ管理部４００を、情報処理装置９０００によって実現する場合、情報処理装置９０００は、図６、図７および図８に示すフローチャートに対応するコンピュータ・プログラムを実現すればよい。ファイル出力部５００を、情報処理装置９０００によって実現する場合、情報処理装置９０００は、図９に示すフローチャートに対応するコンピュータ・プログラムを実現すればよい。また、情報処理装置９０００内に供給されたコンピュータ・プログラムは、読み書き可能な一時記憶メモリ（９００５）またはハードディスク装置９００６等の不揮発性の記憶デバイス（記憶媒体）に格納すれば良い。
【０１２２】
また、前記の場合において、当該装置内へのコンピュータ・プログラムの供給方法は、ＣＤ−ＲＯＭ等の各種記憶媒体を介して当該装置内にインストールする方法や、インターネット等の通信回線を介して外部からダウンロードする方法等のように、現在では一般的な手順を採用することができる。そして、このような場合において、本発明は、係るコンピュータ・プログラムを構成するコード或いは、そのコードが記録されたところの、コンピュータ読み取り可能な記憶媒体によって構成されると捉えることができる。
【符号の説明】
【０１２３】
１０    収集部
２０    情報格納部
２１    管理情報
２２    バッファ
２３    バッファ
２４    バッファ
３０    情報格納部
３１    管理情報
３２    バッファ
３３    バッファ
３４    バッファ
４０    管理部
１００    プロセス
１０１    スレッド
１０２    スレッド
１０３    プロセス
１０４    プロセス
２００    トレース情報収集部
３０１    共有メモリ
３０２    共有メモリ
３１１    管理情報
３１２    管理情報
３２１    バッファＡ
３２２    バッファＡ
３３１    バッファＢ
３３２    バッファＢ
３４１    バッファＣ
３４２    バッファＣ
３５１    バッファＤ
３５２    バッファＤ
３６１    属性
３６２    属性
４００    バッファ管理部
４０１    バッファ情報
５００    ファイル出力部
６００    ファイル
７０１    ストール判定部
７０２    ストール判定部
８１１    格納位置
８１２    バッファ開始位置
８１３    バッファ終了位置
８１４    アドレス
８１５    バッファ情報
８２１    バッファ識別名
８２２    ステータス
８２３    最終時刻
９０００    情報処理装置（コンピュータ）
９００１    ＣＰＵ
９００２    ディスプレイ
９００３    通信インタフェース（Ｉ／Ｆ）
９００４    ＲＯＭ
９００５    ＲＡＭ
９００６    ハードディスク装置（ＨＤ）
９００６Ａ    プログラム群
９００６Ｂ    各種の記憶情報
９００７    バス
９１００    ネットワーク
【図１】
2015022667.tif 000003
【図２】
2015022667.tif 000004
【図３】
2015022667.tif 000005
【図４】
2015022667.tif 000006
【図５】
2015022667.tif 000007
【図６】
2015022667.tif 000008
【図７】
2015022667.tif 000009
【図８】
2015022667.tif 000010
【図９】
2015022667.tif 000011
【図１０】
2015022667.tif 000012
【図１１】
2015022667.tif 000013
【図１２】
2015022667.tif 000014
【図１３】
2015022667.tif 000015