(57)【特許請求の範囲】
【請求項１】
情報処理装置が、
前記情報処理装置で実行されるプロセスの異常を検知する検知ステップと、
プロセスの異常が検知された場合、当該プロセスを停止させ、前記情報処理装置が有するメモリの前記プロセスに対応するメモリ領域に格納された情報を保持する停止制御ステップと、
前記停止制御ステップによって保持された前記メモリ領域に記憶された情報のうち停止させた前記プロセスの状態を示す情報を前記メモリと異なる記憶装置に記録する記録ステップと、
前記情報処理装置の停止指示を受けた場合に、停止させた前記プロセスの状態を示す情報の前記記憶装置への記録を停止し、停止させた前記プロセスの状態を示す情報を含む前記停止制御ステップによって前記メモリ領域に保持された情報を、前記メモリと異なる前記記憶装置に複製する複製ステップと、
を実行することを特徴とする制御方法。
【請求項２】
請求項１記載の制御方法であって、
前記情報処理装置が、
前記情報処理装置を停止させる装置停止ステップ、
を実行することを特徴とする制御方法。
【請求項３】
請求項２記載の制御方法であって、
前記情報処理装置が、
前記記録ステップによるコアファイルの記録が完了した後に、前記装置停止ステップを実行する、
ことを特徴とする制御方法。
【請求項４】
請求項２または３に記載の制御方法であって、
前記情報処理装置が、
前記装置停止ステップによる前記情報処理装置の停止指示を受けたとき、前記複製ステ
ップを実行する、
ことを特徴とする制御方法。
【請求項５】
情報処理装置に、
前記情報処理装置で実行されるプロセスの異常を検知する検知ステップと、
プロセスの異常が検知された場合、当該プロセスを停止させ、前記情報処理装置が有するメモリの前記プロセスに対応するメモリ領域に格納された情報を保持する停止制御ステップと、
前記停止制御ステップによって保持された前記メモリ領域に記憶された情報のうち停止させた前記プロセスの状態を示す情報を前記メモリと異なる記憶装置に記録する記録ステップと、
前記情報処理装置の停止指示を受けた場合に、停止させた前記プロセスの状態を示す情報の前記記憶装置への記録を停止し、停止させた前記プロセスの状態を示す情報を含む前記停止制御ステップによって前記メモリ領域に保持された情報を、前記メモリと異なる前記記憶装置に複製する複製ステップと、
を実行させることを特徴とする制御プログラム。
【請求項６】
請求項５記載の制御プログラムであって、
前記停止制御ステップは、コアファイルの記録が完了するまで前記メモリ領域を保持することを特徴とする制御プログラム。
【請求項７】
情報処理装置で実行させるプロセスの異常を検知する検知部と、
前記プロセスの異常が検知された場合、前記プロセスを停止させ、前記情報処理装置が有するメモリの前記プロセスに対応するメモリ領域に格納された情報を保持する停止制御部と、
前記停止制御部によって保持された前記メモリ領域に記憶された情報のうち停止させた前記プロセスの状態を示す情報を前記メモリと異なる記憶装置に記録する記録部と、
前記情報処理装置の停止指示を受けた場合に、停止させた前記プロセスの状態を示す情報の前記記憶装置への記録を停止し、停止させた前記プロセスの状態を示す情報を含む前記停止制御部によって前記メモリ領域に保持された情報を、前記メモリと異なる記憶装置に複製する複製部と、
を備えることを特徴とする情報処理装置。
【請求項８】
請求項７に記載の情報処理装置であって、
前記停止制御部は、コアファイルの記録が完了するまで前記メモリ領域を保持することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、所定の業務を実行するプロセスの異常を検出する異常検出方法、異常検出プログラム及び情報処理装置に関する。
【背景技術】
【０００２】
運用系サーバで所定の業務が継続できない場合、待機系サーバに所定の業務を引き継がせることにより、待機系サーバで所定の業務の継続が行われる。例えば、所定の業務を実行するプロセスに異常が発生した場合、運用系サーバでは所定の業務を継続できなくなる。異常が発生したプロセスを終了し、運用系サーバを強制停止（強制パニックともいう）することにより、待機系サーバに所定の業務を引き継がせている。
【０００３】
ＵＮＩＸ（登録商標）系のオペレーティングシステムは、/procファイルシステムを備
えている。この/procファイルシステムには、カーネルや実行中のプロセスに関する情報
がテキスト形式で格納される。/procファイルシステムのプロセス構造体をポーリング型
で監視することによって、メモリ上にプロセスが存在しているかどうかを確認する。そして、メモリ上にプロセスが存在していないことを検知した場合、運用系サーバを強制停止させる。プロセスの終了状態を取得する技術が知られている（特許文献１参照）。
【特許文献１】特開２００７−１３３６０３
【発明の開示】
【発明が解決しようとする課題】
【０００４】
運用系サーバを強制停止する直前のメモリやレジスタ等の主記憶装置内のプロセスの情報を磁気ディスク等の副記憶装置に書き込み、プロセスの異常が発生した原因を究明する方法がある。主記憶装置内のプロセスの情報を副記憶装置に書き込んだ後に、運用系サーバを強制停止させた場合、副記憶装置には主記憶装置内のプロセスの情報が完全な状態で書き込まれる。この場合、主記憶装置内のプロセスの情報が副記憶装置に書き込まれるまで、運用系サーバの強制停止が行われず、待機系サーバへの業務の引き継ぎが遅延する問題がある。また、主記憶装置内のプロセスの情報が副記憶装置に書き込まれる前に、運用系サーバを強制停止させた場合、副記憶装置には主記憶装置内のプロセスの情報が完全な状態で書き込まれない。そのため、副記憶装置に書き込まれた内容からプロセスの異常が発生した原因を究明できない問題がある。
【０００５】
主記憶装置内の記憶内容の全部を副記憶装置に書き込み、副記憶装置に書き込まれた記憶内容からプロセスの異常が発生した原因を究明する方法がある。メモリ上にプロセスが存在しないことを検知し、運用系サーバを強制停止させた場合、強制停止後のメモリ上にはプロセス状態を知るための情報が残らない。そのため、強制停止後に主記憶装置内の記憶内容の全部を副記憶装置に書き込んだ場合、副記憶装置に書き込まれた記憶内容からプロセスの異常が発生した原因を究明できない問題がある。
【０００６】
本発明は、上記問題に鑑みてなされたものであり、運用系サーバから待機系サーバへの高速フェイルオーバ及びプロセスの異常が発生した原因の究明を両立させる技術の提供を目的とする。
【課題を解決するための手段】
【０００７】
本発明は前記課題を解決するために、以下の手段を採用した。すなわち、本発明は、ユーザー空間とカーネル空間とで分けられている記憶領域を有する情報処理装置が、前記ユーザー空間に存在するプロセスのコアファイルを作成する作成ステップと、前記コアファ
イルの作成が開始された前記プロセスを前記ユーザー空間に保持する保持ステップと、前記プロセスに割り当てられている識別番号を受け取ることで前記プロセスの異常を検知する監視部に、前記コアファイルの作成が開始された前記プロセスの識別番号を通知する通知ステップと、を実行する異常検知方法である。
【０００８】
本異常検知方法は、プロセスの識別番号を監視部に通知し、監視部はプロセスの識別番号を受け取ることによりユーザー空間に存在するプロセスの異常を検知する。監視部に通知されるプロセスの識別番号は、コアファイルの作成が開始されたプロセスの識別番号である。したがって、監視部はコアファイルの作成と連動してプロセスの識別番号を受け取るため、より高速にプロセスの異常を検知することが可能となる。コアファイルの作成が開始されたプロセスはユーザー空間に保持されているため、コアファイルやユーザー空間に保持されているプロセスからプロセス異常が発生した原因を究明することが可能となる。
【０００９】
また、本発明は、以上のいずれかの処理を実行するコンピュータその他の装置、機械等であってもよい。また、本発明は、コンピュータその他の装置、機械等に、以上のいずれかの機能を実現させるプログラムであってもよい。また、本発明は、そのようなプログラムをコンピュータ等が読み取り可能な記録媒体に記録したものでもよい。
【発明の効果】
【００１０】
本発明によれば、運用系サーバから待機系サーバへの高速フェイルオーバ及びプロセス異常が発生した原因の究明を両立させることが可能となる。
【発明を実施するための最良の形態】
【００１１】
以下、図面に基づいて、本発明を実施するための最良の形態（以下、実施形態という）に係るクラスタシステム（以下、システムという）について説明する。以下の実施形態の構成は例示であり、本発明は実施形態の構成には限定されない。
【００１２】
＜システムの概要＞
本システムの構成を図１に示す。本システムは、情報処理装置である運用系サーバ（運用系ノードともいう）１及び待機系サーバ（待機系ノードともいう）２を有しており、運用系サーバ１と待機系サーバ２とはＬＡＮ等のネットワーク３により接続されている。運用系サーバ１は、所定の業務を実行するサーバである。運用系サーバ１では、所定の業務を実行するために業務アプリケーション４が起動される。待機系サーバ２は、運用系サーバ１でハードウェア故障、アプリケーション異常等の業務継続不可のトラブルが発生した場合、運用系サーバ１で実行されていた業務を引き継ぐサーバである。待機系サーバ２では、所定の業務を実行するために業務アプリケーション５が起動される。
【００１３】
運用系サーバ１で業務継続不可のトラブルが発生した場合、運用系サーバ１は、業務継続不可のトラブルを検知する。運用系サーバ１で業務継続不可のトラブルが検知された場合、運用系サーバ１では、業務アプリケーション４を停止、あるいは運用系サーバ１自身を強制停止させる。待機系サーバ２では、業務アプリケーション５が起動され、運用系サーバ１で実行されていた業務を引き継ぐことにより、所定の業務が実行される。このように、本システムでは、運用系サーバ１で業務継続不可のトラブルが発生した場合、待機系サーバ２で業務を引き継ぐことにより、業務の高可用性を実現する。運用系サーバ１で業務継続不可のトラブルが発生した場合、待機系サーバ２で業務を引き継ぐことをクラスタ切り替えとも呼ぶ。
【００１４】
図２に、本実施形態に係る運用系サーバ１のハードウェア構成を示す。なお、待機系サーバ２も運用系サーバ１と同様のハードウェア構成を備えている。図２に示す運用系サー
バ１は、例えば、パーソナルコンピュータやワークステーション、メインフレーム等である。図２に示すように、運用系サーバ１は、コンピュータプログラムを実行し、運用系サーバ１を制御するCentral Processing Unit（ＣＰＵ）１０と、ＣＰＵ１０で実行される
コンピュータプログラムやＣＰＵ１０で処理されるデータを記憶するメモリ１１を有する。また、図２に示すように、運用系サーバ１は、ＣＰＵ１０と各種の装置とを接続するインターフェース１２、磁気ディスク駆動装置１３、可搬媒体駆動装置１４、入力装置１５及び表示装置１６を有する。
【００１５】
メモリ１１は、例えば、揮発性のRandom Access Memory（ＲＡＭ）、不揮発性のRead Only Member（ＲＯＭ）である。インターフェース１２は、Universal Serial Bus（ＵＳＢ）等のシリアルインターフェース、あるいは、Peripheral Component Interconnect（Ｐ
ＣＩ）等のパラレルインターフェースのいずれでもよい。なお、ＣＰＵ１０と各装置とをインターフェース１２で接続しているが、ＣＰＵ１０と各装置との間を異なるインターフェースで接続してもよい。また、複数のインターフェースをブリッジ接続してもよい。
【００１６】
磁気ディスク駆動装置１３は、磁気ディスク１７を備えている。磁気ディスク駆動装置１３は、磁気ディスク１７上にデータを記録し、磁気ディスク１７上に記録されるデータを読み取る。磁気ディスク１７には、メモリ１１にロードされるプログラムが格納される。また、磁気ディスク１７には、ＣＰＵ１０で処理されるデータが記憶される。
【００１７】
可搬媒体駆動装置１４は、例えば、Compact Disc（ＣＤ）、Digital Versatile Disk（ＤＶＤ）、ＨＤ−ＤＶＤ、ブルーレイディスク等の駆動装置である。また、可搬媒体駆動装置１４は、フラッシュメモリ等の不揮発性メモリを有するカード媒体の入出力装置であってもよい。可搬媒体駆動装置１４が駆動する媒体は、例えば、磁気ディスク１７にインストールされるコンピュータプログラム、入力データ等を格納する。入力装置１５は、例えば、キーボード、マウス、ポインティングデバイス、ワイヤレスリモコン等である。
【００１８】
表示装置１６は、ＣＰＵ１０で処理されるデータやメモリ１１に記憶されるデータを表示する。表示装置１６は、例えば、液晶表示装置、プラズマディスプレイパネル、Cathode Ray Tube（ＣＲＴ）、エレクトロルミネッセンスパネル等である。
【００１９】
図３は、運用系サーバ１が備えるメモリ１１の記憶領域の説明図である。図３に示すように、メモリ１１の記憶領域は、ユーザー空間とカーネル空間とに分かれている。ＣＰＵ１０は、実行モードとして、特権モードであるカーネルモードと、非特権モードであるユーザーモードを持つ。カーネル空間は、カーネルモードでＣＰＵ１０がアクセス可能なアドレス空間であり、運用系サーバ１の基本サービスを提供するオペレーティングシステムが動作する。ユーザー空間は、ユーザーモードでＣＰＵ１０がアクセス可能なアドレス空間であり、業務アプリケーション４やクラスタ制御デーモン２０が動作する。
【００２０】
カーネル２１（図３では図示せず）は、オペレーティングシステムの核となる部分であり、コアダンプ採取共通ルーチン２２及びコアダンプ発生デバイスドライバ２３を有している。また、カーネルは、プロセス管理やメモリ管理、ファイルシステム、ネットワーク、デバイスドライバ等の機能を提供する。
【００２１】
カーネル２１は、監視対象プロセス２４の異常を検知する。カーネル２１は、監視対象プロセス２４の異常を検知した場合、監視対象プロセス２４を停止させる。そして、カーネル２１は、監視対象プロセス２４を停止させた場合、監視対象プロセス２４のコアファイルの作成を開始する。コアファイルを作成することをコアダンプともいう。例えば、実行中の監視対象プロセス２４が本来書き込んではいけないメモリ領域にデータを書き込もうとした場合、カーネル２１は、監視対象プロセス２４の異常を検知する。コアファイル
は、停止直前の監視対象プロセス２４のプロセス状態を知るための情報をファイル形式のデータとしたものである。停止直前の監視対象プロセス２４のプロセス状態を知るための情報（以下、プロセス状態情報という）は、例えば、監視対象プロセス２４が停止する直前のメモリ１１のスタック上のデータやＣＰＵ１０のレジスタ上のデータである。
【００２２】
クラスタ制御デーモン２０は、運用系サーバ１の業務継続不可のトラブルを検知した場合、必要に応じて業務アプリケーション４を停止、あるいは運用系サーバ１を強制停止させるプログラムである。クラスタ制御デーモン２０は運用系サーバ１を強制停止させた場合、運用系サーバ１によって実行されていた業務を待機系サーバ２に引き継がせる。
【００２３】
監視対象プロセス２４は、業務アプリケーション４がＣＰＵ１０及びメモリ１１等によって実行される場合に生成されるプロセスである。監視プロセス２５Ａは、監視対象プロセス２４が生成された場合、クラスタ制御デーモン２０によって起動（生成）されるプロセスである。監視プロセス２５Ｂ（監視部に相当）は、監視対象プロセス２４によって起動（生成）されるプロセスである。監視対象プロセス２４、監視プロセス２５Ａ及び監視プロセス２５Ｂはユーザー空間に存在する。
【００２４】
カーネル２１は、監視対象プロセス２４、監視プロセス２５Ａ及び監視プロセス２５Ｂに一意の識別番号であるプロセスＩＤを割り当てる。カーネル２１は、監視対象プロセス２４、監視プロセス２５Ａ及び監視プロセス２５Ｂ等の各プロセスを管理するためのプロセス管理ファイル（／ｐｒｏｃ）を、メモリ１１の記憶領域に作成する。プロセス管理ファイル（／ｐｒｏｃ）には、各プロセスについてのプロセスＩＤやグループＩＤ等のプロセス管理情報が記録される。
【００２５】
監視プロセス２５Ａは、カーネル２１に問い合わせを行うことにより自プロセス（監視対象プロセス２５Ａ）のプロセスＩＤを取得する。監視プロセス２５Ａは、プロセス管理ファイル（／ｐｒｏｃ）をポーリング型で定期的に調べることにより、ユーザー空間に監視対象プロセス２４が存在しているか否かを監視する。したがって、監視対象プロセス２４は監視プロセス２５Ａの監視下に置かれる。
【００２６】
監視プロセス２５Ａは、監視対象プロセス２４のコアダンプ監視を開始するために監視プロセス２５Ｂを起動する。従って、監視プロセス２５Ａと監視プロセス２５Ｂとの関係においては、監視プロセス２５Ａが親プロセスであり、監視プロセス２５Ｂが子プロセスである。
【００２７】
監視プロセス２５Ｂは、カーネル２１に問い合わせを行うことにより自プロセス（監視プロセス２５Ｂ）のプロセスＩＤを取得する。また、監視プロセス２５Ｂは、自プロセス（監視プロセス２５Ｂ）を起動した監視プロセス２５Ａの監視下に置かれている監視対象プロセス２４のプロセスＩＤを、監視プロセス２５Ａから取得する。
【００２８】
監視プロセス２５Ｂは、監視対象プロセス２４のプロセスＩＤ及び自プロセスＩＤ（監視プロセス２５ＢのプロセスＩＤ）の登録依頼をコアダンプ発生デバイスドライバ２３に行うとともに、コアダンプ発生デバイスドライバ２３からのコアダンプ発生の通知を待つ。すなわち、監視プロセス２５Ｂは、監視対象プロセス２４のプロセスＩＤ及び監視プロセス２５ＢのプロセスＩＤをコアダンプ発生デバイスドライバ２３に通知し、非同期に監視対象プロセス２４のコアダンプ発生を待つ。
【００２９】
例えば、監視プロセス２５Ｂは、コアダンプ発生デバイスドライバ２３に対して、監視対象プロセス２４のプロセスＩＤを指定してioctlを発行する。すなわち、監視プロセス
２５Ｂは、監視対象プロセス２４のプロセスＩＤの登録依頼を指示するシステムコールを
発行する。そして、監視プロセス２５Ｂは、コアダンプ発生デバイスドライバ２３から監視対象プロセス２４のコアダンプ発生の通知を待ち合わせる状態になる。この場合、コアダンプ発生の通知は、監視対象プロセス２４のコアダンプ発生を示すメッセージであってもよいし、監視対象プロセス２４のプロセスＩＤであってもよい。
【００３０】
コアダンプ発生デバイスドライバ２３は、監視プロセス２５Ｂから監視対象プロセス２４のプロセスＩＤ及び監視プロセス２５ＢのプロセスＩＤの登録依頼があった場合、監視対象プロセス２４のプロセスＩＤ及び監視プロセス２５ＢのプロセスＩＤをコアダンプ待ちテーブル４０（記憶部に相当）に登録する。コアダンプ待ちテーブル４０は、メモリ１１又は磁気ディスク１７の記憶領域に作成されるリスト型のテーブルであり、コアダンプ発生デバイスドライバ２３により管理される。
【００３１】
コアダンプ待ちテーブル４０には、監視対象プロセス２４のプロセスＩＤと監視プロセス２５ＢのプロセスＩＤとが関連付けられて登録される。すなわち、コアダンプ発生デバイスドライバ２３は、監視プロセス２５Ｂから登録依頼を受けた監視対象プロセス２４のプロセスＩＤ及び監視プロセス２５ＢのプロセスＩＤを二項組要素として、コアダンプ待ちテーブル４０に登録する。図４に、コアダンプ待ちテーブル４０に監視対象プロセス２４のプロセスＩＤ及び監視プロセス２５ＢのプロセスＩＤを二項組要素として登録した場合の例を示す。ここでは、２つの監視対象プロセス２４及び２つの監視プロセス２５Ｂがユーザー空間に存在する場合を想定している。
【００３２】
図４のコアダンプ待ちテーブル４０の行１には、「プロセスＩＤ−Ａ」及び「プロセスＩＤ−Ｃ」が登録されている。「プロセスＩＤ−Ａ」は、ユーザー空間に存在する２つの監視プロセス２５Ｂのうちの一方のプロセスＩＤである。「プロセスＩＤ−Ｃ」は、ユーザー空間に存在する２つの監視プロセス２５Ｂのうちの他方のプロセスＩＤである。「プロセスＩＤ−Ａ」が割り当てられている監視プロセス２５Ｂは、「プロセスＩＤ−Ｂ」が割り当てられている監視対象プロセス２４を監視する。
【００３３】
図４のコアダンプ待ちテーブル４０の行２には、「プロセスＩＤ−Ｂ」及び「プロセスＩＤ−Ｄ」が登録されている。「プロセスＩＤ−Ｂ」は、ユーザー空間に存在する２つの監視対象プロセス２４のうちの一方のプロセスＩＤである。「プロセスＩＤ−Ｄ」は、ユーザー空間に存在する２つの監視対象プロセス２４のうちの他方のプロセスＩＤである。「プロセスＩＤ−Ｃ」が割り当てられている監視プロセス２５Ｂは、「プロセスＩＤ−Ｄ」が割り当てられている監視対象プロセス２４を監視する。
【００３４】
図４のコアダンプ待ちテーブル４０の要素１の列には、「プロセスＩＤ−Ａ」及び「プロセスＩＤ−Ｂ」が二項組要素として登録されている。図４のコアダンプ待ちテーブル４０の要素２の列には、「プロセスＩＤ−Ｃ」及び「プロセスＩＤ−Ｄ」が二項組要素として登録されている。
【００３５】
このように、コアダンプ待ちテーブル４０に、複数の監視対象プロセス２４及び複数の監視プロセス２５Ｂを登録してもよい。コアダンプ発生デバイスドライバ２３は、監視プロセス２５Ｂから登録依頼を受ける毎に、監視対象プロセス２４のプロセスＩＤ及び監視プロセス２５ＢのプロセスＩＤを二項組要素として、コアダンプ待ちテーブル４０に登録する。
【００３６】
コアダンプ採取共通ルーチン２２は、監視対象プロセス２４のコアダンプが発生した場合、カーネル２１により呼び出されるプログラムである。コアダンプ採取共通ルーチン２２は、カーネル２１のフック機能を使用して、コアダンプ発生デバイスドライバ２３を呼び出す。
【００３７】
コアダンプ採取共通ルーチン２２は、コアダンプが発生した監視対象プロセス２４のプロセスＩＤをカーネル２１から取得する。コアダンプが発生した監視対象プロセス２４を、コアファイルの作成が開始された監視対象プロセス２４ともいう。そして、コアダンプ採取共通ルーチン２２は、コアダンプが発生した監視対象プロセス２４のプロセスＩＤをコアダンプ発生デバイスドライバ２３に渡す。
【００３８】
コアダンプ発生デバイスドライバ２３は、コアダンプが発生した監視対象プロセス２４のプロセスＩＤをコアダンプ採取共通ルーチン２２から取得する。コアダンプ発生デバイスドライバ２３は、監視対象プロセス２４のコアダンプ発生の通知を待ち合わせている監視プロセス２５Ｂにコアダンプ発生の通知を送る。上述のように、コアダンプ発生の通知は、監視対象プロセス２４のコアダンプ発生を示すメッセージであってもよいし、監視対象プロセス２４のプロセスＩＤであってもよい。
【００３９】
監視プロセス２５Ｂは、監視対象プロセス２４のコアダンプ発生を示すメッセージ又は監視対象プロセス２４のプロセスＩＤを受け取ることにより、監視対象プロセス２４のコアダンプ発生を検知する。
【００４０】
監視プロセス２５Ｂは、監視対象プロセス２４のコアダンプ発生を検知した場合、クラスタ制御デーモン２０に監視対象プロセス２４の異常を報告する。この場合、監視対象プロセス２４の異常を示すメッセージ又は監視対象プロセス２４のプロセスＩＤを送ることにより、監視対象プロセス２４の異常を報告してもよい。
【００４１】
クラスタ制御デーモン２０は、監視対象プロセス２４の異常の報告を受けることにより、運用系サーバ１に業務継続不可のトラブルが発生したことを検知する。そして、クラスタ制御デーモン２０は、必要に応じて、運用系サーバ１を強制停止させる。
【００４２】
コアダンプ採取共通ルーチン２２及びコアダンプ発生デバイスドライバ２３は、カーネル２１のソースコードに予め登録されていてもよいし、モジュールとしてカーネル２１に組み込んでもよい。クラスタ制御デーモン２０、カーネル２１、コアダンプ採取共通ルーチン２２、コアダンプ発生デバイスドライバ２３、監視プロセス２５Ａ及び監視プロセス２５Ｂ等が、ＣＰＵ１０及びメモリ１１等によって実行されることにより、上述の機能を実現することができる。
【００４３】
図５は、カーネル２１の機能ブロック図である。図５に示すように、カーネル２１は、プロセス保持部５０、プロセス異常検知部５１、コアファイル作成部５２及びコアダンプ発生通知部５３を備えている。
【００４４】
プロセス保持部５０は、監視対象プロセス２４、監視プロセス２５Ａ及び監視プロセス２５Ｂのプロセス管理情報をプロセス管理ファイル（／ｐｒｏｃ）に記録する。また、プロセス保持部５０は、監視対象プロセス２４、監視プロセス２５Ａ及び監視プロセス２５Ｂのプロセス管理情報をプロセス管理ファイル（／ｐｒｏｃ）から削除する。
【００４５】
プロセス異常検知部５１は、監視対象プロセス２４の異常を検知する。例えば、実行中の監視対象プロセス２４がメモリ１１の書き込み禁止領域にデータを書き込もうとした場合、プロセス異常検知部５１は、監視対象プロセス２４の異常を検知する。
【００４６】
プロセス保持部５０は、プロセス異常検知部５１により監視対象プロセス２４の異常が検知された場合、監視対象プロセス２４を停止させる。この場合、プロセス保持部５０は、停止指示シグナルを監視対象プロセス２４に通知し、監視対象プロセス２４を停止させ
る。そして、プロセス保持部５０は、監視対象プロセス２４をユーザー空間に保持する。すなわち、監視対象プロセス２４のプロセス管理情報をプロセス管理ファイル（／ｐｒｏｃ）から削除せずに、監視対象プロセス２４を停止状態にする。プロセス保持部５０は、運用系サーバ１の操作者等から監視対象プロセス２４を終了させる指示があった場合、終了指示シグナルを監視対象プロセス２４に通知し、監視対象プロセス２４を終了させる。そして、監視対象プロセス２４のプロセス管理情報をプロセス管理ファイル（／ｐｒｏｃ）から削除する。
【００４７】
コアファイル作成部５２は、監視対象プロセス２４のコアファイルを作成する。コアダンプ発生通知部５３は、監視対象プロセス２４のコアファイルの作成が開始された場合、コアダンプ採取共通ルーチン２２を呼び出す。そして、コアダンプ発生通知部５３は、コアダンプが発生した監視対象プロセス２４のプロセスＩＤをコアダンプ採取共通ルーチン２２に渡す。
【００４８】
ここで、同期書き込みモード及び非同期書き込みモードについて説明する。コアファイル作成部５２は、同期書き込みモード又は非同期書き込みモードで監視対象プロセス２４のコアファイルを作成する。
【００４９】
同期書き込みモードで監視対象プロセス２４のコアファイルを作成する場合、コアファイル作成部５２は、コアファイルを磁気ディスク１７の記憶領域に作成した後、クラスタ制御デーモン２０にコアファイル作成の完了を通知する。
【００５０】
コアファイル作成部５２が同期書き込みモードで監視対象プロセス２４のコアファイルを作成する場合、クラスタ制御デーモン２０は、コアファイル作成部５２からコアファイル作成の完了の通知を受け取ってから運用系サーバ１を強制停止させる。すなわち、クラスタ制御デーモン２０は、監視対象プロセス２４の異常の報告を受けている場合であっても、コアファイル作成部５２からコアファイル作成の完了の通知を受け取るまで運用系サーバ１を強制停止させない。同期書き込みモードの場合、クラスタ制御デーモン２０が運用系サーバ１を強制停止させた時点で監視対象プロセス２４のコアファイルの作成が完了しているため、プロセス状態情報がほぼ完全な形でコアファイルとして磁気ディスク１７に保存される。
【００５１】
非同期書き込みモードで監視対象プロセス２４のコアファイルを作成する場合、コアファイル作成部５２は、プロセス状態情報をメモリ１１のキャッシュ領域に一旦保存しておき、キャッシュ領域の内容を一定間隔で磁気ディスク１７に書き込む。すなわち、コアファイル作成部５２は、一定間隔で、監視対象プロセス２４のコアファイルを磁気ディスク１７の記憶領域に作成する。
【００５２】
非同期書き込みモードで監視対象プロセス２４のコアファイルを作成する場合、クラスタ制御デーモン２０が運用系サーバ１を強制停止した時点で、コアファイル作成部５２は監視対象プロセス２４のコアファイルの作成を終了する。
【００５３】
クラスタ制御デーモン２０が運用系サーバ１を強制停止した時点で監視対象プロセス２４のコアファイルの作成が完了していた場合、プロセス状態情報がほぼ完全な形でコアファイルとして磁気ディスク１７に保存される。
【００５４】
クラスタ制御デーモン２０が運用系サーバ１を強制停止した時点で監視対象プロセス２４のコアファイルの作成が完了していない場合、プロセス状態情報の一部がコアファイルとして磁気ディスク１７に保存される。この場合、プロセス状態情報は、メモリ１１のキャッシュ領域に保存されている状態である。
【００５５】
監視対象プロセス２４がユーザー空間に保持された状態で、運用系サーバ１の強制停止が行われる。運用系サーバ１の強制停止が行われた時点で、監視対象プロセス２４のコアファイルの作成が完了している場合、プロセス状態情報がほぼ完全な形でコアファイルとして磁気ディスク１７に保存される。磁気ディスク１７に保存されている監視対象プロセス２４のコアファイルを解析することにより、監視対象プロセス２４の異常の原因を究明することが可能となる。
【００５６】
運用系サーバ１の強制停止が行われた時点で、監視対象プロセス２４のコアファイルの作成が完了していない場合、プロセス状態情報はメモリ１１のキャッシュ領域に保存されている。この場合、メモリダンプにより、メモリ１１上のデータをメモリダンプデータとして、磁気ディスク１７に作成する。監視対象プロセス２４はユーザー空間に保持された状態である。すなわち、監視プロセス２４のプロセス管理情報がプロセス管理ファイル（／ｐｒｏｃ）に記録された状態である。プロセス管理ファイル（／ｐｒｏｃ）に記録されている監視プロセス２４のプロセス管理情報を参照することにより、メモリダンプデータからプロセス状態情報を取り出し、監視対象プロセス２４のコアファイルを作成することができる。
【００５７】
本実施形態では、メモリ１１上のすべてのデータをファイルとして所定の記憶領域に作成することを、メモリダンプという。所定の記憶領域は、運用系サーバ１の磁気ディスク１７の記憶領域であってもよいし、運用系サーバ１とは別の記憶装置の記憶領域であってもよい。また、本実施形態では、メモリダンプを行って作成されるファイル形式のデータを、メモリダンプデータという。メモリダンプデータから取り出して作成される監視対象プロセス２４のコアファイルを解析することにより、監視対象プロセス２４の異常の原因を究明することが可能となる。また、メモリダンプデータに含まれるプロセス状態情報を解析することにより、監視対象プロセス２４の異常の原因を究明することが可能となる。
【００５８】
図６は、監視プロセス２５Ａが監視対象プロセス２４を監視する処理の流れを示すフローである。クラスタ制御デーモン２０によって監視プロセス２５Ａが起動された場合、監視プロセス２５Ａは図６に示す処理を実行する。
【００５９】
まず、監視プロセス２５Ａは、監視プロセス２５Ｂを起動する（Ｓ６０１）。次に、監視プロセス２５Ａは、終了指示シグナルが発生しているか否かを判定する（Ｓ６０２）。この終了指示シグナルは、クラスタ制御デーモン２０が、監視プロセス２５Ａを終了させるためのシグナルである。終了指示シグナルは、クラスタ制御デーモン２０から監視対象プロセス２４に送信される。
【００６０】
終了指示シグナルが発生している場合（Ｓ６０２の処理でＹＥＳ）、監視プロセス２５Ａは、監視対象プロセス２４の監視を終了する（Ｓ６０３）。Ｓ６０３の処理において、監視プロセス２５Ｂが起動している場合、監視プロセス２５Ａは、監視プロセス２５Ｂを終了させた後に監視対象プロセス２４の監視を終了する。
【００６１】
一方、終了指示シグナルが発生していない場合（Ｓ６０２の処理でＮＯ）、監視プロセス２５Ａは、監視対象プロセス２４がユーザー空間に存在しているか否かを判定する（Ｓ６０４）。この場合、監視プロセス２５Ａは、ポーリング型でプロセス管理ファイル（／ｐｒｏｃ）を調べることにより、監視対象プロセス２４がユーザー空間に存在しているか否かを判定してもよい。
【００６２】
監視対象プロセス２４がユーザー空間に存在している場合（Ｓ６０４の処理でＹＥＳ）、監視プロセス２５Ａは監視プロセス２５Ｂが起動しているかを判定する（Ｓ６０５）。
監視プロセス２５Ｂが起動している場合（Ｓ６０５の処理でＹＥＳ）、監視プロセス２５ＡはＳ６０２の処理に進む。この場合、監視プロセス２５Ａは、所定時間経過後にＳ６０２の処理に進んでもよい。所定時間は、任意に設定できる時間であり、所定時間として数秒を設定してもよい。
【００６３】
一方、監視プロセス２５Ｂが起動していない場合（Ｓ６０５の処理でＮＯ）、監視プロセス２５ＡはＳ６０１の処理に進む。この場合、監視プロセス２５Ａは、所定時間経過後にＳ６０１の処理に進んでもよい。所定時間は、任意に設定できる時間であり、所定時間として数秒を設定してもよい。
【００６４】
また、監視対象プロセス２４がユーザー空間に存在していない場合（Ｓ６０４の処理でＮＯ）、監視プロセス２５Ａは、クラスタ制御デーモン２０に監視対象プロセス２４の異常を報告する（Ｓ６０６）。例えば、監視対象プロセス２４のハングアップ等の理由により監視対象プロセス２４が終了状態となり、監視対象プロセス２４がユーザー空間に存在しなくなる場合がある。このような場合、監視プロセス２５Ａは、クラスタ制御デーモン２０に監視対象プロセス２４の異常を報告する。そして、監視プロセス２５Ａは、監視対象プロセス２４の監視を終了する。
【００６５】
図７は、監視プロセス２５Ｂが監視対象プロセス２４のコアダンプ発生を非同期に待ち合わせる処理の流れを示すフローである。監視プロセス２５Ａによって監視プロセス２５Ｂが起動された場合、監視プロセス２５Ｂは図７に示す処理を実行する。
【００６６】
まず、監視プロセス２５Ｂは、監視対象プロセス２４のプロセスＩＤ及び監視プロセス２５ＢのプロセスＩＤ（自プロセスＩＤ）をコアダンプ発生デバイスドライバ２３に通知する（Ｓ７０１）。具体的には、監視プロセス２５Ｂは、ioctlを使用して、コアダンプ
発生デバイスドライバ２３に監視対象プロセス２４のプロセスＩＤ及び監視プロセス２５ＢのプロセスＩＤの登録を行うコマンドを発行する。すなわち、監視プロセス２５Ｂは、監視対象プロセス２４のプロセスＩＤ及び監視プロセス２５ＢのプロセスＩＤをコアダンプ待ちテーブル４０に登録する依頼をコアダンプ発生デバイスドライバ２３に行う。依頼を受けたコアダンプ発生デバイスドライバ２３は、監視対象プロセス２４のプロセスＩＤ及び監視プロセス２５ＢのプロセスＩＤを二項組要素として、コアダンプ待ちテーブル４０に登録する。
【００６７】
次に、監視プロセス２５Ｂは、終了指示シグナルが発生しているか否かを判定する（Ｓ７０２）。この終了指示シグナルは、クラスタ制御デーモン２０が、監視プロセス２５Ｂを終了させるためのシグナルである。終了指示シグナルは、クラスタ制御デーモン２０から監視プロセス２５Ｂに送信される。
【００６８】
終了指示シグナルが発生している場合（Ｓ７０２の処理でＹＥＳ）、監視プロセス２５Ｂは、監視対象プロセス２４のプロセスＩＤ及び監視プロセス２５ＢのプロセスＩＤの削除依頼をコアダンプ発生デバイスドライバ２３に行う（Ｓ７０３）。具体的には、監視プロセス２５Ｂは、ioctlを使用して、監視対象プロセス２４のプロセスＩＤ及び監視プロ
セス２５ＢのプロセスＩＤをコアダンプ待ちテーブル４０から削除するコマンドを発行する。依頼を受けたコアダンプ発生デバイスドライバ２３は、コアダンプ待ちテーブル４０から監視対象プロセス２４のプロセスＩＤ及び監視プロセス２５ＢのプロセスＩＤを削除する。監視プロセス２５Ｂは、Ｓ７０３の処理を行った場合、監視対象プロセス２４のコアダンプ発生を非同期に待ち合わせる処理を終了する。
【００６９】
一方、終了指示シグナルが発生していない場合（Ｓ７０２の処理でＮＯ）、監視プロセス２５Ｂは、コアダンプ発生デバイスドライバ２３からコアダンプ発生の通知を受けてい
るか否かを判定する（Ｓ７０４）。例えば、監視プロセス２５Ｂは、コアダンプ発生デバイスドライバ２３から監視対象プロセス２４のコアダンプ発生を示すメッセージ又は監視対象プロセス２４のプロセスＩＤを受け取っているかを判定する。
【００７０】
コアダンプ発生デバイスドライバ２３からコアダンプ発生の通知を受けている場合（Ｓ７０４の処理でＹＥＳ）、監視プロセス２５Ｂは、クラスタ制御デーモン２０に監視対象プロセス２４の異常を報告する（Ｓ７０５）。そして、監視プロセス２５Ｂは、監視対象プロセス２４のコアダンプ発生を非同期に待ち合わせる処理を終了する。一方、コアダンプ発生デバイスドライバ２３からコアダンプ発生の通知を受けていない場合（Ｓ７０４の処理でＮＯ）、監視プロセス２５Ｂは、Ｓ７０２の処理に進む。
【００７１】
図８は、コアダンプ発生デバイスドライバ２３が監視プロセス２５Ｂにコアダンプ発生の通知を行う処理（以下、コアダンプ発生通知処理という）の流れを示すフローである。コアダンプ採取共通ルーチン２２によりコアダンプ発生デバイスドライバ２３が呼び出された場合、コアダンプ発生デバイスドライバ２３は図８に示す処理を実行する。
【００７２】
まず、コアダンプ発生デバイスドライバ２３は、コアダンプ採取共通ルーチン２２からコアダンプが発生した監視対象プロセス２４のプロセスＩＤを取得する（Ｓ８０１）。
【００７３】
次に、コアダンプ発生デバイスドライバ２３は、コアダンプ待ちテーブル４０から二項組要素の一つを取り出す（Ｓ８０２）。すなわち、コアダンプ発生デバイスドライバ２３は、二項組要素として登録されている監視対象プロセス２４のプロセスＩＤ及び監視プロセス２５ＢのプロセスＩＤをコアダンプ待ちテーブル４０から取り出す。この場合、コアダンプ発生デバイスドライバ２３は、コアダンプ待ちテーブル４０の最初に登録されている二項組要素を取り出してもよい。
【００７４】
次に、コアダンプ発生デバイスドライバ２３は、Ｓ８０１の処理で取得した監視対象プロセス２４のプロセスＩＤと、Ｓ８０２の処理で取り出した二項組要素に含まれている監視対象プロセス２４のプロセスＩＤとが一致するか否かを判定する（Ｓ８０３）。
【００７５】
Ｓ８０１の処理で取得した監視対象プロセス２４のプロセスＩＤと、Ｓ８０２の処理で取り出した二項組要素に含まれている監視対象プロセス２４のプロセスＩＤとが一致する場合（Ｓ８０３の処理でＹＥＳ）、コアダンプ発生デバイスドライバ２３はＳ８０４の処理に進む。
【００７６】
コアダンプ発生デバイスドライバ２３は、監視プロセス２５Ｂに監視対象プロセス２４のコアダンプ発生を通知する（Ｓ８０４）。そして、コアダンプ発生デバイスドライバ２３は、監視対象プロセス２４のプロセスＩＤが一致する二項組要素をコアダンプ待ちテーブル４０から削除する（Ｓ８０５）。
【００７７】
一方、Ｓ８０１の処理で取得した監視対象プロセス２４のプロセスＩＤと、Ｓ８０２の処理で取り出した二項組要素に含まれている監視対象プロセス２４のプロセスＩＤとが一致しない場合（Ｓ８０３の処理でＮＯ）、コアダンプ発生デバイスドライバ２３はＳ８０６の処理に進む。
【００７８】
次に、コアダンプ発生デバイスドライバ２３は、コアダンプ待ちテーブル４０に未確認の二項組要素があるか否かを判定する（Ｓ８０６）。コアダンプ待ちテーブル４０に未確認の二項組要素がある場合（Ｓ８０６の処理でＹＥＳ）、コアダンプ発生デバイスドライバ２３はＳ８０２の処理に進む。この場合、Ｓ８０２の処理において、コアダンプ発生デバイスドライバ２３は、コアダンプ待ちテーブル４０から未確認の二項組要素の一つを取
り出す。
【００７９】
一方、コアダンプ待ちテーブル４０に未確認の二項組要素がない場合（Ｓ８０６の処理でＮＯ）、コアダンプ発生デバイスドライバ２３はコアダンプ発生通知処理を終了する。
【００８０】
このように、コアファイル作成部５２による監視対象プロセス２４のコアファイルの作成開始をトリガとして、監視対象プロセス２４の異常をクラスタ制御デーモン２０に報告する。そして、クラスタ制御デーモン２０は、監視プロセス２５Ｂから監視対象プロセス２４の異常の報告を受けた場合、必要に応じて運用系サーバ１を強制停止させる。
【００８１】
ポーリング型監視による監視対象プロセス２４の異常の検知は所定間隔（例えば、数秒間隔）で行われる。したがって、監視対象プロセス２４に異常が発生してから監視対象プロセス２４の異常が検知されるのに数秒を要する場合がある。したがって、ポーリング型監視では、監視対象プロセス２４の異常がクラスタ制御デーモン２０に報告されるまで数秒を要する場合がある。
【００８２】
本実施形態に係るコアダンプ発生による監視対象プロセス２４の異常の報告は、監視対象プロセス２４のコアダンプが発生すると速やかに行われる。すなわち、監視対象プロセス２４のコアダンプの発生に連動して、監視対象プロセス２４の異常がクラスタ制御デーモン２０に報告される。したがって、ポーリング型監視による監視対象プロセス２４の異常の検知よりも高速に監視対象プロセス２４の異常を検知することができる。
【００８３】
〈コンピュータ読み取り可能な記録媒体〉
コンピュータに上記いずれかの機能を実現させるプログラムをコンピュータが読み取り可能な記録媒体に記録することができる。そして、コンピュータに、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。ここで、コンピュータ読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータから読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータから取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ＤＡＴ、８ｍｍテープ、メモリカード等がある。また、コンピュータに固定された記録媒体としてハードディスクやＲＯＭ等がある。
【図面の簡単な説明】
【００８４】
【図１】本システムの構成を示す図である。
【図２】運用系サーバ１のハードウェア構成を示す図である。
【図３】メモリ１１の記憶領域の説明図である。
【図４】コアダンプ待ちテーブル４０の説明図である。
【図５】カーネル２１の機能ブロック図である。
【図６】監視プロセス２５Ａが監視対象プロセス２４を監視する処理の流れを示すフローである。
【図７】監視プロセス２５Ｂが監視対象プロセス２４のコアダンプ発生を非同期に待ち合わせる処理の流れを示すフローである。
【図８】コアダンプ発生デバイスドライバ２３が監視プロセス２５Ｂにコアダンプ発生の通知を行う処理の流れを示すフローである。
【符号の説明】
【００８５】
１    運用系サーバ
２    待機系サーバ
３    ネットワーク
４、５    業務アプリケーション
１０  ＣＰＵ
１１  メモリ
１２  インターフェース
１３  磁気ディスク駆動装置
１４  可搬媒体駆動装置
１５  入力装置
１６  表示装置
１７  磁気ディスク
２０  クラスタ制御デーモン
２１  カーネル
２２  コアダンプ採取共通ルーチン
２３  コアダンプ発生デバイスドライバ
２４  監視対象プロセス
２５Ａ、２５Ｂ  監視プロセス
４０  コアダンプ待ちテーブル
５０  プロセス保持部
５１  プロセス異常検知部
５２  コアファイル作成部
５３  コアダンプ発生通知部
【図１】
0005286942.tif 000002
【図２】
0005286942.tif 000003
【図３】
0005286942.tif 000004
【図４】
0005286942.tif 000005
【図５】
0005286942.tif 000006
【図６】
0005286942.tif 000007
【図７】
0005286942.tif 000008
【図８】
0005286942.tif 000009