JP2010182237A - スタックトレース採取システム、方法およびプログラム - Google Patents

スタックトレース採取システム、方法およびプログラム Download PDF

Info

Publication number
JP2010182237A
JP2010182237A JP2009027271A JP2009027271A JP2010182237A JP 2010182237 A JP2010182237 A JP 2010182237A JP 2009027271 A JP2009027271 A JP 2009027271A JP 2009027271 A JP2009027271 A JP 2009027271A JP 2010182237 A JP2010182237 A JP 2010182237A
Authority
JP
Japan
Prior art keywords
stack trace
thread
trace
stack
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2009027271A
Other languages
English (en)
Other versions
JP5509609B2 (ja
Inventor
Hirotake Furuta
博健 古田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2009027271A priority Critical patent/JP5509609B2/ja
Publication of JP2010182237A publication Critical patent/JP2010182237A/ja
Application granted granted Critical
Publication of JP5509609B2 publication Critical patent/JP5509609B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】システムへの負荷の増大なしに、スタックトレース情報を格納するのに必要なメモリ容量を削減し、かつ、障害を起こしているプロセス/スレッドを特定する。
【解決手段】スタックトレース採取システムは、プロセスが実行単位であるスレッド毎に実行される実行部30と、トレースデータ格納部33を有する。実行部30は、実行中のスレッドが別のスレッドに切り替わる際に、該実行中のスレッドの切り替え直前における処理状態を示す第1のスタックトレース情報とスレッドの切り替え後に実行された別のスレッドの切り替え直後の処理状態を示す第2のスタックトレース情報をそれぞれ採取し、該採取した第1及び第2のスタックトレース情報をトレースデータ格納部33に格納するスタックトレース採取部31と、トレースデータ格納部33に格納された第1および第2のスタックトレース情報を外部記憶装置に出力するトレースデータ出力部32を有する。
【選択図】図9

Description

本発明は、コンピュータシステムに生じた障害の原因を究明するために必要となるスタックトレース情報の採取技術に関する。
システムに障害が発生した際に、障害の原因を究明するためにメモリダンプ情報をシステムから採取する方法が、一般に用いられている(特許文献1参照)。メモリダンプ情報は、障害発生時点におけるシステムのメモリの内容を採取した情報であるので、障害発生時点におけるシステムの動作状態(プログラムに従って実行されたプロセスのスレッドの状態)を確認することができる。
しかし、メモリ破壊を起こした障害の場合は、その障害のトリガとなった痕跡が残っていないために、メモリダンプ情報だけでは真の原因追求が困難な場合がある。
特許文献1には、上記の問題を解決するため、各プロセスにトレースセグメントを持たせて、オペレーティングシステムが各プログラムへトレース情報を書き込む方式が提案されている。この方式によれば、オペレーティングシステムのトレース制御機能が、プログラムの実行状態をトレース情報としてトレースセグメントに格納する。メモリ破壊等のシステム障害が生じた場合は、トレースセグメントに格納したトレース情報に基づいて、障害発生時からさかのぼってトレース情報を調査することができる。
特開平6−95925号公報
しかし、特許文献1に記載の方式においては、プログラムにしたがって呼び出される各関数の実行状態をトレース情報として記録しているため、トレース情報量が増大し、トレース情報を採取するために必要なメモリの容量が多くなる。このように、プロセス毎に多くのトレース情報をメモリに格納するために、大容量のメモリが必要とされるという問題がある。
また、トレース情報の欠落を防ぐために、通常、メモリに格納されたトレース情報をディスク装置等へ書き出す処理が行われるが、トレース情報が増大すると、トレース情報をメモリからディスク装置へ書き出すための処理の実行回数が増大する。その結果、システム全体の処理の負荷を増加させるという問題が生じる。
本発明の目的は、上記の各問題を解決し、システムへの負荷の増大なしに、スタックトレース情報を格納するのに必要とされるメモリ容量を削減することができ、かつ、障害を起こしているプロセス/スレッドを特定することができる、スタックトレース採取システム、方法およびプログラムを提供することにある。
上記目的を達成するため、本発明のスタックトレース採取システムは、
プログラムにより提供されるプロセスが実行単位であるスレッド毎に実行される実行部と、
トレースデータ格納部と、を有し、
前記実行部は、
実行中のスレッドが別のスレッドに切り替わる際に、該実行中のスレッドの切り替え直前における処理状態を示す第1のスタックトレース情報とスレッドの切り替え後に実行された前記別のスレッドの切り替え直後の処理状態を示す第2のスタックトレース情報をそれぞれ採取し、該採取した第1及び第2のスタックトレース情報を前記トレースデータ格納部に格納するスタックトレース採取部と、
前記トレースデータ格納部に格納された第1および第2のスタックトレース情報を外部記憶装置に出力するトレースデータ出力部と、を有することを特徴とする。
本発明のスタックトレース採取方法は、
プログラムにより提供されるプロセスを実行単位であるスレッド毎に実行し、
前記実行中のスレッドが別のスレッドに切り替わる際に、前記実行中のスレッドの切り替え直前における処理状態を示す第1のスタックトレース情報とスレッドの切り替え後に実行された前記別のスレッドの切り替え直後の処理状態を示す第2のスタックトレース情報をそれぞれ採取し、
採取した前記第1及び第2のスタックトレース情報をトレースデータ格納部に格納し、
前記トレースデータ格納部に格納された第1および第2のスタックトレース情報を外部記憶装置に出力することを特徴とする。
本発明のプログラムは、
プログラムにより提供されるプロセスを実行単位であるスレッド毎に実行する処理と、
前記実行中のスレッドが別のスレッドに切り替わる際に、前記実行中のスレッドの切り替え直前における処理状態を示す第1のスタックトレース情報とスレッドの切り替え後に実行された前記別のスレッドの切り替え直後の処理状態を示す第2のスタックトレース情報をそれぞれ採取する処理と、
採取した前記第1及び第2のスタックトレース情報をトレースデータ格納部に格納する処理と、
前記トレースデータ格納部に格納された第1および第2のスタックトレース情報を外部記憶装置に出力する処理と、をコンピュータに実行させることを特徴とする。
本発明によれば、関数が呼ばれる度にスタックトレース情報を残すのではなく、スレッドの切り替わり前後に限り、スタックトレース情報を採取する。これにより、スタックトレース情報を採取するために必要なメモリ容量を削減し、システムに与える負荷の低減を図ることができるとともに、より少ないスタックトレース情報で障害を起こしているプロセス/スレッドを特定することができる。
本発明の第1の実施形態であるスタックトレース採取システムの構成を示すブロック図である。 スレッドの切り替え時におけるスタックトレース採取部がスタックトレース情報をトレースデータ格納領域に格納する様子を示す模式図である。 スタックトレース採取部によるスタックトレース情報の格納動作を説明するためのフローチャートである。 スタックトレース監視部によるトレースデータ格納領域内の内容を出力させるための通知処理を説明するためのフローチャートである。 トレースデータ出力部によるトレースデータ出力動作を説明するためのフローチャートである。 スタックトレース出力コマンドにより実施される動作を説明するためのフローチャートである。 スタックトレース出力例を示す模式図である。 スタックトレース情報の比較結果の出力例を示す模式図である。 本発明の第2の実施形態であるスタックトレース採取システムの構成を示すブロック図である。 本発明の他の実施形態であるスタックトレース採取システムの構成を示すブロック図である。
次に、本発明の実施形態について図面を参照して説明する。
(第1の実施形態)
図1は、本発明の第1の実施形態であるスタックトレース採取システムの構成を示すブロック図である。図1を参照すると、スタックトレース採取システム1は、プログラムを実行するCPU(Central Processing Unit)1と、CPU1上で動作するオペレーティングシステム(OS)3と、メモリ8を有する。
プログラムにより提供されるプロセス2は、オペレーティングシステム3がCPU1に処理を割り当てる最小単位となるスレッド4を有する。図1中、オペレーティングシステム3外のプロセス2は、アプリケーション等のプログラムにより提供されるものであり、オペレーティングシステム3内のプロセス2は、管理プログラムにより提供されるものである。管理プログラムは、プリンタ管理プログラム、ディスク装置管理プログラム、メモリ管理プログラム等である。
1つのスレッドまたは1つのプロセスにおいて、多くの関数が呼ばれる。スレッド4を実行するために、オペレーティングシステム3によって、メモリ8内のメモリ領域の一部がスタックエリアとして割り当てられる。スレッド4が実行されると、そのスレッド4に関するオペレーティングシステム3にて処理が必要になるレジスタの値やスタック情報を含むスタックトレース情報5がメモリ8内のスタックエリアに格納される。
ハードウェアの機能(例外処理)によりスレッド切り替えが起こる。スレッド切り替えが起こる例外としては、スレッドに割り当てられたCPUの利用時間を消費することによる例外、スレッドに割り当てられたCPUの利用時間を消費しなくてもスレッドがCPUの利用をやめた際に発生する例外、および入出力デバイスからの割り込み処理によって発生する例外等がある。
スレッド切り替わり時点において、オペレーティングシステム3は、スタックエリアに残っている呼び出した関数への因数や呼び出した関数の処理が終わった際の戻り値をスタックトレース情報5としてメモリ8内のトレースデータ格納領域8aに格納する。
オペレーティングシステム3は、スタックトレース監視部6、スタックトレース採取部7およびトレースデータ出力部9を有する。
スタックトレース採取部7は、オペレーティングシステム3におけるスレッド切り替え時に呼び出される機能である。スタックトレース採取部7は、実行中のスレッドが別のスレッドに切り替わる際に、該実行中のスレッドの切り替え直前におけるスタックトレース情報5をトレースデータ格納領域8aに格納する。さらに、スレッドが別のスレッドに切り替わった後、スタックトレース採取部7は、その切り替え直後における別のスレッドのスタックトレース情報5をトレースデータ格納部8aに格納する。
図2に、スレッドの切り替え時におけるスタックトレース採取部7がスタックトレース情報5をトレースデータ格納領域8aに格納する様子を模式的に示す。
例外処理によりスレッド切り替えが起こる。図2に示す例では、スレッドがスレッド番号「1」のスレッドに切り替わり、その後、スレッド番号「2」のスレッドに切り替わる様子が示されている。スレッドがスレッド番号「1」のスレッドに切り替わると、スタックトレース採取部7は、スレッド番号「1」のスレッドの、切り替わり直後におけるスタックトレース情報をトレースデータ格納領域8aに格納する。
その後、スタックトレース採取部7は、例外処理を通じて、スレッド番号「1」のスレッドからスレッド番号「2」のスレッドへの切り替え要求を受け付ける。切り替え要求を受け付けると、スタックトレース採取部7は、現在実行中のスレッド番号「1」のスレッドの、切り替わり直前におけるスタックトレース情報をトレースデータ格納領域8aに格納する。スレッド番号「1」のスレッドからスレッド番号「2」のスレッドに切り替わると、スタックトレース採取部7は、スレッド番号「2」のスレッドの切り替わり直後におけるスタックトレース情報をトレースデータ格納領域8aに格納する。
上述のように、スタックトレース採取部7は、例外処理によりスレッドが別のスレッドに切り替わる際に、その切り替わり直前および直後のスレッドのスタックトレース情報をそれぞれ取得し、それら取得したスタックトレース情報をトレースデータ格納領域8aに格納する。スタックトレース情報は、取得日時情報、スレッドやプロセスを識別可能な情報(プロセス名/プロセス番号/スレッド番号)、切り替え直前/直後(スレッド開始/終了)を示す情報などが付与されて、取得した順番でトレースデータ格納領域8aに格納される。
なお、スタックトレース情報をトレースデータ格納領域8aに格納する際に、スタックトレース採取部7は、トレースデータ格納領域8a内にそのスタックトレース情報を格納できるだけの空き領域があるか否かを判定する。もし、空き領域が無い場合は、スタックトレース採取部7は、トレースデータ出力部9に対して、トレースデータ格納領域8a内の内容を出力させるための通知(データ出力指示)を行う。
スタックトレース監視部6は、スタックトレース採取システム1の状態を監視し、特定の状態を検出すると、トレースデータ出力部9に対して、トレースデータ格納領域8a内の内容を出力させるための通知(データ出力指示)を行う。特定の状態は、例えば、トレースデータ格納領域8aの空きがなくなった場合、スタックトレース採取システム1にエラーログが記録された場合、メモリダンプ情報が出力された場合、プロセス2が異常終了した場合、ユーザがマウスやキーボード等の入力装置21を通じてスタックトレース出力コマンド10を実行した場合などである。
スタックトレース出力コマンド10は、入力装置21にてトレースデータ格納領域8aの内容をディスクに出力するための所定の入力操作を行うことにより、入力装置21からスタックトレース監視部6に供給されるコマンド信号である。
トレースデータ出力部9は、トレースデータ監視部6およびスタックトレース採取部7からの通知(データ出力指示)に従って、トレースデータ格納領域8a内の内容(スタックトレース情報)を外部記憶装置であるディスク20に出力し、トレースデータ格納領域8aの内容をクリアする。トレースデータ格納領域8a内に格納されたスタックトレース情報は、格納された順番(古い順番)に従って、トレースデータ格納領域8a内から出力される(図2参照)。
また、トレースデータ格納領域8a内のスタックトレース情報をディスク20へ出力した際、トレースデータ出力部9は、過去にディスク20へ出力したスタックトレース情報と今回出力したスタックトレース情報とを比較する。この比較において、プロセス番号、スレッド番号、およびスレッド切り替わりの直前/直後を示す情報を検索キーとして、過去のスタックトレース情報と今回出力したスタックトレース情報との間で対応するスタックトレース情報を抽出する。そして、抽出した対応するスタックトレース情報の内容を比較する。
システム障害が生じていない場合(正常動作の場合)、プロセス番号およびスレッド番号が同一のスレッド(すなわち、同じプロセス)では、同じスタックトレース情報が得られる。一方、システム障害が生じた場合は、障害が生じたスレッドのスタックトレース情報の内容は、正常時における内容と異なる。したがって、プロセス番号およびスレッド番号が同一のスレッドの間で、スタックトレース情報の内容を比較することで、障害の原因となったスレッドを特定することができる。また、その特定したスレッドのスタックトレース情報の内容を調べることで、障害の原因を特定することできる場合もある。
上記の比較において、スタックトレース情報の内容が不一致となった場合に、トレースデータ出力部9は、その不一致となったスレッドのスタックトレース情報を、プロセス番号、スレッド番号、スレッド切り替わりの直前/直後を示す情報と一緒に、ディスク20内の障害抽出領域へ出力する。なお、システム障害が生じた場合に、例えば、全ての値が0となるといった、明らかに通常時の値とは異なる特定のスタックトレース情報が採取される場合がある。この場合、トレースデータ出力部9は、過去のスタックトレース情報との比較は行わずに、特定のスタックトレース情報を、プロセス番号、スレッド番号、スレッド切り替わりの直前/直後を示す情報と一緒に、ディスク20内の障害抽出領域へ出力してもよい。
また、トレースデータ出力部9は、スタックトレース情報の内容が不一致となった場合に、その不一致となったスレッドのスタックトレース情報を、プロセス番号、スレッド番号、スレッド切り替わりの直前/直後を示す情報と一緒に、不図示の表示装置へ出力してもよい。
さらに、CPU11が、入力装置21からの指示を受け付けて、ディスク20内の障害抽出領域に格納された情報を、不図示の表示装置に表示させてもよい。
次に、本実施形態のスタックトレース採取システム1の動作を説明する。
まず、スタックトレース採取部7の動作を説明する。
図3は、スタックトレース採取部7によるスタックトレース情報の格納動作を説明するためのフローチャートである。
例外処理を通じて、スレッド切り替えの要求を受け付けると、スタックトレース採取部7が呼び出され、スタックトレース採取部7によるスタックトレース採取処理が開始される。スタックトレース採取処理では、図3に示すように、スタックトレース採取部7は、まず、トレースデータ格納領域8a内に空き領域があるか否かを判定する(ステップS1)。
ステップS1で空き領域が無いと判定された場合は、スタックトレース採取部7は、トレースデータ出力部9に対して、トレースデータ格納領域8a内の内容を出力させるための通知(データ出力指示)を行う(ステップS2)。
ステップS1で空き領域があると判定された場合またはステップS2の実行後、スタックトレース採取部7は、現在実行中のスレッドの切り替え直前におけるスタックトレース情報をトレースデータ格納領域8aへコピーする。スタックトレース情報のコピー後、スレッドの切り替えが行われる(ステップS4)。
ステップS4でスレッド切り替えがなされると、スタックトレース採取部7は、スレッド切り替え後に実行されたスレッドにおける切り替え直後のスタックトレース情報をトレースデータ格納領域8aへコピーする(ステップS5)。その後、スタックトレース採取処理およびスレッド切り替え処理は終了する。
上述した図3の処理が、スレッドが切り替わるたびに実行される。
次に、スタックトレース監視部6の動作を説明する。
図4は、スタックトレース監視部6によるトレースデータ格納領域8a内の内容を出力させるための通知処理を説明するためのフローチャートである。
図4に示すように、スタックトレース監視部6は、スタックトレース採取システム1の状態を監視し、次の第1乃至第5の判定のいずれかが真であるか否かを判定する(ステップS21)。ここで、第1の判定は、トレースデータ格納領域8aの空き領域がなくなったか否かの判定である。第2の判定は、スタックトレース採取システム1にエラーログが記録されたか否かの判定である。第3の判定は、メモリダンプ情報が出力されたか否かの判定である。第4の判定は、プロセス2が異常終了したか否かの判定である。第5の判定は、スタックトレース出力コマンド10を受信したか否かの判定である。第1乃至第4の判定はいずれも、スタックトレース採取システム1のログ情報を調べることで行うことができる。
ステップS21で、いずれかの判定が真になった場合、スタックトレース監視部6は、トレースデータ出力部9に対して、トレースデータ格納領域8a内の内容を出力させるための通知を行う(ステップS22)。
次に、トレースデータ出力部9の動作を説明する。
図5は、トレースデータ出力部9によるトレースデータ出力動作を説明するためのフローチャートである。
スタックトレース監視部6またはスタックトレース採取部7からの通知により、トレースデータ出力部9によるトレースデータ出力処理が開始される。トレースデータ出力処理では、図5に示すように、トレースデータ格納領域8aの内容をディスク20へ出力し(ステップS11)、トレースデータ格納領域8aの内容をクリアする(ステップS12)。
次に、プロセス番号、スレッド番号、およびスレッド切り替わりの直前/直後を示す情報を検索キーとして、ディスク20へ出力した過去のスタックトレース情報と今回出力したスタックトレース情報との間で対応するスタックトレース情報を抽出する。そして、抽出した対応するスタックトレース情報の内容を比較する(ステップS13)。比較結果が不一致となった場合は、比較したスタックトレース情報の内容を、プロセス番号、スレッド番号、およびスレッド切り替わりの直前/直後を示す情報と一緒に、ディスク20内の障害抽出領域へ出力する(ステップS14)。比較結果が一致した場合は、トレースデータ出力処理を終了する。
次に、スタックトレース出力コマンド10により実施される動作について説明する。
図6は、スタックトレース出力コマンド10により実施される動作を説明するためのフローチャートである。スタックトレース監視部6に対して、スタックトレース出力コマンド10により、トレースデータ格納領域8aの内容をディスク20に出力する旨の通知がなされる(ステップS31)。この通知後、図5に示したトレースデータ出力処理が実施される。
以上説明した本実施形態のスタックトレース採取システム1によれば、例外処理を通じて、実行中のスレッドを別のスレッドへ切り替えるための要求を受け付けると、スタックトレース採取部7が、現在実行中のスレッドにおけるスレッド切り替え直前のスタックトレース情報をトレースデータ格納領域8aに格納する。さらに、スタックトレース採取部7は、スレッド切り替え後に実行された別のスレッドにおける切り替え直後のスタックトレース情報をトレースデータ格納領域8aに格納する。トレースデータ格納領域8aに格納されたスタックトレース情報は、トレースデータ出力部9によってディスク20に出力される。
図7Aに、スタックトレース出力例を示す。スタックトレース情報は、採取日時、プロセス名、スレッド番号、スレッドの切り替わりの直前/直後を示す情報等と一緒にディスク20に供給される。メモリ破壊等のシステム障害を起こした場合は、その障害にいたるまでに実行された各スレッドのスレッド切り替え直前および直後のスタックトレース情報がディスク20に格納される。このように、障害が発生する前の各スレッドの処理状態をトレースすることが可能である。したがって、ディスク20に格納されたスタックトレース情報に基づいて、障害発生時からさかのぼってスタックトレース情報を調査することにより、どの時点からメモリ破壊が起こっているか突き止めることが出来る。例えば、スレッドの切り替わり直後のスタックトレース情報、スレッドの切り替わり直前のスタックトレース情報、さらには同じスレッドの次回の切り替わり直後のスタックトレース情報を比較する。そして、ある時点のスタックトレース情報以降、それまでと大きく違いがある場合や0クリアされていた場合、メモリ破壊等の障害が生じた可能性があると判断することができる。また、障害発生時点で、どのプロセス/スレッドがどのような動作をしていたかを調べることにより、障害を起こしていると思われるプロセス/スレッドを容易に特定することができる。
また、本実施形態のスタックトレース採取システムでは、トレースデータ出力部9が、プロセス番号およびスレッド番号が同一のスレッドの間で、スタックトレース情報の内容を比較する。そして、内容が不一致となった場合に、トレースデータ出力部9が、その不一致となったスレッドのスタックトレース情報を、プロセス番号、スレッド番号、スレッド切り替わりの直前/直後を示す情報と一緒に、ディスク20内の障害抽出領域へ出力する。
図7Bに、障害抽出領域に格納されるスタックトレース情報の一例を示す。障害抽出領域に格納される情報は、採取日時、プロセス名、プロセス番号、スレッド番号、スレッドの切り替わりの直前または直後を示す情報、スレッドトレース情報の項目からなる。プロセス番号およびスレッド番号が同一のスレッドの間で、スタックトレース情報の内容が不一致となった場合、それらスレッドのスタックトレース情報が、採取日時、プロセス名、スレッド番号、スレッドの切り替わりの直前または直後を示す情報と一緒に障害抽出領域に格納される。これにより、ユーザは、ディスク20内の障害抽出領域内の情報から障害が生じたプロセスやスレッドを容易に特定することができる。なお、図7Bに示した例では、スレッドトレース情報の項目には、比較したスレッドトレース情報がともに格納されるようになっているが、これに代えて、比較したスレッドトレース情報の差分データをスレッドトレース情報の項目に格納してもよい。これにより、障害抽出領域の容量の削減を図ることが可能となる。ただし、この場合は、採取日時、プロセス名、プロセス番号、スレッド番号、スレッドの切り替わりの直前または直後を示す情報、スレッドトレース情報の差分データに基づいて、ディスク20内に格納された全スレッドトレース情報から該当するスレッドトレース情報を抽出する必要がある。この抽出処理は、CPUが実行するように構成してもよい。
また、本実施形態のスタックトレース採取システムでは、関数が呼ばれる度にスタックトレース情報を残すのではなく、スレッドの切り替わり前後に限り、スタックトレース情報を採取する。これにより、スタックトレース情報を採取するために必要なメモリ容量を削減し、システムに与える負荷の低減を図ることができる。
1つのスレッドまたは1つのプロセスでは、多くの関数が呼ばれる。関数が呼ばれるたびにスタックトレース情報を採取すると、膨大な採取データ量となる。本実施形態によれば、スレッドの切り替わり前後のスタックトレース情報のみ、即ちスレッドが実行されている間の関数呼び出しや関数の戻りのトレース情報は採取しないため、採取するデータ量は少なくて済む。
また、本実施形態のスタックトレース採取システムによれば、オペレーティングシステム3を構成する管理プログラムにより提供されるプロセス/スレッドについても、スタックトレース情報の採取対象とされている。これにより、オペレーティングシステム自身のスタックトレース情報を採取する仕組を提供することができる。
(第2の実施形態)
図8は、本発明の第2の実施形態であるスタックトレース採取システムの構成を示すブロック図である。
本実施形態のスタックトレース採取システム1は、専用CPU12を有し、トレースデータ出力部9が専用CPU12上で動作する点が第1の実施形態のものと異なる。その他の構成は、第1の実施形態と基本的に同じである。
スタックトレース採取システム1において、専用CPU12上でトレースデータ出力部9を実行する。第1の実施形態で説明したトレースデータ出力部9の処理が専用CPU12にて実行されるので、その分、CPU11の負担を軽減することができる。
(他の実施形態)
図9は、本発明の他の実施形態であるスタックトレース採取システムの構成を示すブロック図である。
図9を参照すると、本実施形態のスタックトレース採取システムは、プログラムにより提供されるプロセスが実行単位であるスレッド毎に実行される実行部30と、トレースデータ格納部33を有する。
実行部30は、実行中のスレッドが別のスレッドに切り替わる際に、該実行中のスレッドの切り替え直前における処理状態を示す第1のスタックトレース情報とスレッドの切り替え後に実行された別のスレッドの切り替え直後の処理状態を示す第2のスタックトレース情報をそれぞれ採取し、該採取した第1及び第2のスタックトレース情報をトレースデータ格納部33に格納するスタックトレース採取部31と、トレースデータ格納部33に格納された第1および第2のスタックトレース情報を外部記憶装置に出力するトレースデータ出力部32を有する。ここで、スタックトレース採取部31、トレースデータ出力部32およびトレースデータ格納部33はそれぞれ、第1または第2の実施形態における、スタックトレース採取部7、トレースデータ出力部9およびトレースデータ格納領域8aに対応する。
本実施形態によれば、関数が呼ばれる度にスタックトレース情報を残すのではなく、スレッドの切り替わり前後に限り、スタックトレース情報を採取する。これにより、より少ないスタックトレース情報で障害を起こしているプロセス/スレッドを特定することができるとともに、スタックトレース情報を採取するために必要なメモリ容量を削減し、システムに与える負荷の低減を図ることができる。
また、システム全体のスレッドの実行状態が外部記憶装置に格納される。したがって、メモリ破壊等の障害のようにメモリダンプ情報だけでは真の原因追求が困難な障害についても、障害発生時からさかのぼってスタックトレース情報を調査することにより、どの時点から障害が起こっているか突き止めることができる。さらに、障害発生時点で、どのプロセス/スレッドがどう動いていたかを調べることにより、障害の原因を特定することができる。
本実施形態において、当該スタックトレース採取システムの状態を監視し、特定の状態を検出すると、トレースデータ出力部33に対して、スタックトレース情報の出力要求を行うスタックトレース監視部をさらに有してもよい。このスタックトレース監視部は、第1または第2の実施形態におけるスタックトレース監視部6に対応する。
また、実行部30は、オペレーティングシステムを実行し、該オペレーティングシステムの機能として、スタックトレース採取部、トレースデータ出力部およびスタックトレース監視部が構成されてもよい。
さらに、実行部30は、第1および第2のCPUを有し、第1のCPUが、オペレーティングシステムを実行し、該オペレーティングシステムの機能として、スタックトレース採取部およびスタックトレース監視部が構成され、トレースデータ出力部が、第2のCPUにより構成されてもよい。
さらに、トレース対象であるプロセスは、オペレーティングシステムを構成する管理プログラムにより提供されるプロセスであってもよい。これにより、オペレーティングシステム自身のスタックトレース情報を採取する仕組も提供することができる。ここで、オペレーティングシステム自身のトレース情報とは、オペレーティングシステムの管理プログラム(プリンタ管理プログラム、ディスク装置管理プログラム、メモリ管理プログラム等)にしたがって実行されるプロセスに関するトレースデータである。
以上説明した各実施形態におけるスタックトレース採取部、トレースデータ格納部、スタックトレース監視部およびトレースデータ出力部の各動作(処理)は、プログラムをコンピュータが実行することにより実現することが可能である。そのようなプログラムは、CDやDVD等の記録媒体により提供されてもよく、また、インターネットを通じて提供されてもよい。
また、各実施形態で説明したスタックトレース採取システムは、本発明の一例であり、その構成は、発明の趣旨を逸脱しない範囲で適宜に変更することができる。
1 スタックトレース採取システム
2 プロセス
3 オペレーティングシステム
4 スレッド
5 スタックトレース情報
6 スタックトレース監視部
7、31 スタックトレース採取部
8 メモリ
8a トレースデータ格納領域
9、32 トレースデータ出力部
10 スタックトレース出力コマンド
20 ディスク
21 入力装置
30 実行部
33 トレースデータ格納部

Claims (10)

  1. プログラムにより提供されるプロセスが実行単位であるスレッド毎に実行される実行部と、
    トレースデータ格納部と、を有し、
    前記実行部は、
    実行中のスレッドが別のスレッドに切り替わる際に、該実行中のスレッドの切り替え直前における処理状態を示す第1のスタックトレース情報とスレッドの切り替え後に実行された前記別のスレッドの切り替え直後の処理状態を示す第2のスタックトレース情報をそれぞれ採取し、該採取した第1及び第2のスタックトレース情報を前記トレースデータ格納部に格納するスタックトレース採取部と、
    前記トレースデータ格納部に格納された第1および第2のスタックトレース情報を外部記憶装置に出力するトレースデータ出力部と、を有する、スタックトレース採取システム。
  2. 前記スタックトレース採取部は、採取した前記第1または第2のスタックトレース情報を格納するための空き領域が前記トレースデータ格納部に無い場合は、前記トレースデータ出力部に対して、スタックトレース情報の出力要求を行い、
    前記トレースデータ出力部は、前記スタックトレース採取部からの出力要求に従い、前記トレースデータ格納部に格納された第1および第2のスタックトレース情報を前記外部記憶装置に出力する、請求項1に記載のスタックトレース採取システム。
  3. 当該スタックトレース採取システムの状態を監視し、特定の状態を検出すると、前記トレースデータ出力部に対して、スタックトレース情報の出力要求を行うスタックトレース監視部をさらに有し、
    前記トレースデータ出力部は、前記スタックトレース監視部からの出力要求に従い、前記トレースデータ格納部に格納された第1および第2のスタックトレース情報を前記外部記憶装置に出力する、請求項1または2に記載のスタックトレース採取システム。
  4. 前記スタックトレース監視部は、前記特定の状態として、外部入力装置からの所定のコマンド信号を受信する、請求項3に記載のスタックトレース採取システム。
  5. 前記実行部は、オペレーティングシステムを実行し、該オペレーティングシステムの機能として、前記スタックトレース採取部、トレースデータ出力部およびスタックトレース監視部が構成されている、請求項3または4に記載のスタックトレース採取システム。
  6. 前記実行部は、第1および第2のCPUを有し、
    前記第1のCPUは、オペレーティングシステムを実行し、該オペレーティングシステムの機能として、前記スタックトレース採取部およびスタックトレース監視部が構成され、
    前記トレースデータ出力部は、前記第2のCPUにより構成されている、請求項3または4に記載のスタックトレース採取システム。
  7. 前記プロセスは、前記オペレーティングシステムを構成する管理プログラムにより提供されるプロセスを含む、請求項5または6に記載のスタックトレース採取システム。
  8. 前記スタックトレース採取部は、採取した前記第1または第2のスタックトレース情報に、採取対象であるプロセスおよびスレッドの識別情報と切り替えの直前および直後を識別するための直前/直後識別情報を付与し、
    前記トレースデータ出力部は、前記トレースデータ格納部に格納された第1および第2のスタックトレース情報を前記外部記憶装置に出力した場合に、前記プロセスおよびスレッドの識別情報および直前/直後識別情報を検索キーとして、過去に前記外部記憶装置へ出力したスタックトレース情報と今回出力したスタックトレース情報との間で対応するスタックトレース情報を抽出し、該抽出した対応するスタックトレース情報の内容を比較し、比較結果が不一致となった場合に、該比較したスタックトレース情報の内容を、前記プロセスおよびスレッドの識別情報および直前/直後識別情報を示す情報と一緒に、前記外部記憶装置の所定の領域へ格納する、請求項1から7のいずれか1項に記載のスタックトレース採取システム。
  9. プログラムにより提供されるプロセスを実行単位であるスレッド毎に実行し、
    前記実行中のスレッドが別のスレッドに切り替わる際に、前記実行中のスレッドの切り替え直前における処理状態を示す第1のスタックトレース情報とスレッドの切り替え後に実行された前記別のスレッドの切り替え直後の処理状態を示す第2のスタックトレース情報をそれぞれ採取し、
    採取した前記第1及び第2のスタックトレース情報をトレースデータ格納部に格納し、
    前記トレースデータ格納部に格納された第1および第2のスタックトレース情報を外部記憶装置に出力する、スタックトレース採取方法。
  10. プログラムにより提供されるプロセスを実行単位であるスレッド毎に実行する処理と、
    前記実行中のスレッドが別のスレッドに切り替わる際に、前記実行中のスレッドの切り替え直前における処理状態を示す第1のスタックトレース情報とスレッドの切り替え後に実行された前記別のスレッドの切り替え直後の処理状態を示す第2のスタックトレース情報をそれぞれ採取する処理と、
    採取した前記第1及び第2のスタックトレース情報をトレースデータ格納部に格納する処理と、
    前記トレースデータ格納部に格納された第1および第2のスタックトレース情報を外部記憶装置に出力する処理と、をコンピュータに実行させるプログラム。
JP2009027271A 2009-02-09 2009-02-09 スタックトレース採取システム、方法およびプログラム Active JP5509609B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009027271A JP5509609B2 (ja) 2009-02-09 2009-02-09 スタックトレース採取システム、方法およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009027271A JP5509609B2 (ja) 2009-02-09 2009-02-09 スタックトレース採取システム、方法およびプログラム

Publications (2)

Publication Number Publication Date
JP2010182237A true JP2010182237A (ja) 2010-08-19
JP5509609B2 JP5509609B2 (ja) 2014-06-04

Family

ID=42763782

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009027271A Active JP5509609B2 (ja) 2009-02-09 2009-02-09 スタックトレース採取システム、方法およびプログラム

Country Status (1)

Country Link
JP (1) JP5509609B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110888753A (zh) * 2019-11-08 2020-03-17 烽火通信科技股份有限公司 软件故障定位方法及系统
JP7490038B2 (ja) 2016-05-09 2024-05-24 オラクル・インターナショナル・コーポレイション ヒープをため込んでいるスタックトレースを特定するための、スレッド強度とヒープ使用量との相関

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0375940A (ja) * 1989-08-18 1991-03-29 Matsushita Electric Ind Co Ltd マルチタスクコントローラ
JPH03278135A (ja) * 1990-03-20 1991-12-09 Mitsubishi Electric Corp スタックトレース装置
JPH06149615A (ja) * 1992-11-13 1994-05-31 Toshiba Corp イベント記録方式
JPH07295862A (ja) * 1994-04-28 1995-11-10 Mitsubishi Electric Corp エラートレースによるシステム制御管理方法
JPH09185531A (ja) * 1995-12-28 1997-07-15 Hitachi Ltd トレース情報の欠落回避装置
JPH113250A (ja) * 1997-06-13 1999-01-06 Nec Corp スレッド情報採取方法及びスレッド情報採取プログラム を記録した記録媒体
JP2008204011A (ja) * 2007-02-16 2008-09-04 Seiko Epson Corp マルチスレッドシステム、スレッド動作異常検知方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0375940A (ja) * 1989-08-18 1991-03-29 Matsushita Electric Ind Co Ltd マルチタスクコントローラ
JPH03278135A (ja) * 1990-03-20 1991-12-09 Mitsubishi Electric Corp スタックトレース装置
JPH06149615A (ja) * 1992-11-13 1994-05-31 Toshiba Corp イベント記録方式
JPH07295862A (ja) * 1994-04-28 1995-11-10 Mitsubishi Electric Corp エラートレースによるシステム制御管理方法
JPH09185531A (ja) * 1995-12-28 1997-07-15 Hitachi Ltd トレース情報の欠落回避装置
JPH113250A (ja) * 1997-06-13 1999-01-06 Nec Corp スレッド情報採取方法及びスレッド情報採取プログラム を記録した記録媒体
JP2008204011A (ja) * 2007-02-16 2008-09-04 Seiko Epson Corp マルチスレッドシステム、スレッド動作異常検知方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSND200600457017; 青柳龍也: 'JMXによるJVMの監視/管理機能を試す' Java WORLD 第9巻、第10号, 20051001, pp.169-178, (株)IDGジャパン *
JPN6013008322; 青柳龍也: 'JMXによるJVMの監視/管理機能を試す' Java WORLD 第9巻、第10号, 20051001, pp.169-178, (株)IDGジャパン *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7490038B2 (ja) 2016-05-09 2024-05-24 オラクル・インターナショナル・コーポレイション ヒープをため込んでいるスタックトレースを特定するための、スレッド強度とヒープ使用量との相関
CN110888753A (zh) * 2019-11-08 2020-03-17 烽火通信科技股份有限公司 软件故障定位方法及系统

Also Published As

Publication number Publication date
JP5509609B2 (ja) 2014-06-04

Similar Documents

Publication Publication Date Title
US8418149B2 (en) Differential comparison system and method
KR101393992B1 (ko) 정보 처리 장치, 정보 처리 방법, 및 프로그램을 기록한 컴퓨터 판독가능한 기록 매체
US20090193298A1 (en) System and method of fault detection, diagnosis and prevention for complex computing systems
US20080276129A1 (en) Software tracing
US9164846B2 (en) Restarting a software system
JP2010086364A (ja) 情報処理装置、動作状態監視装置および方法
US10740166B2 (en) Thread based dynamic data collection
JP2013206147A (ja) ロギング装置、ロギング方法及びプログラム
JP5623557B2 (ja) 診断データを収集するためのマルチスレッド化コンピューティング環境における方法、装置、およびコンピュータ・プログラム
US8489938B2 (en) Diagnostic data capture in a computing environment
JP5509609B2 (ja) スタックトレース採取システム、方法およびプログラム
JP6880961B2 (ja) 情報処理装置、およびログ記録方法
US8271711B2 (en) Program status detecting apparatus and method
US20050166089A1 (en) Method for processing a diagnosis of a processor, information processing system and a diagnostic processing program
US20180173728A1 (en) Information processing apparatus and method
JP2009223714A (ja) 演算回路及び演算回路の異常解析方法
WO2012137239A1 (ja) 計算機システム
JP2007172414A (ja) 組込機器向けのコンパクトコアダンププログラム及びコンパクトコアダンプを用いた方法
WO2009147738A1 (ja) 情報処理装置及びその制御方法並びにモニタプログラム
JP5921306B2 (ja) 情報処理装置および情報処理方法およびプログラム
US8447949B2 (en) Detection of zero address events in address formation
US20220237073A1 (en) Information processing apparatus, non-transitory computer readable medium storing program, and method
US8614799B2 (en) Memory paging
JP5832408B2 (ja) 仮想計算機システム及びその制御方法
JP5221477B2 (ja) 組込機器向けのメモリ領域保存プログラム及びメモリ領域保存方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120112

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130213

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130226

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130425

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130910

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140225

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140310

R150 Certificate of patent or registration of utility model

Ref document number: 5509609

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150