(57)【特許請求の範囲】
【請求項１】
クライアントコンピュータから出力される要求に対して応答処理を実行する情報処理装置であって、
前記情報処理装置に、前記クライアントコンピュータから出力される要求に対する応答処理を実行させるための第１プログラムを格納する記憶装置と、
前記クライアントコンピュータから第１要求を受け取ると、前記第１プログラム及び前記第１要求を複製し、前記第１プログラムの複製である第２プログラムを実行して、前記第１要求に対する前記第１プログラムの応答処理を監視し、前記第１プログラムの応答処理の障害を検出した場合、前記第２プログラムを実行して、前記第１要求の複製である第２要求に対する応答処理を行う、演算処理装置と、
を備え、
前記演算処理装置は、前記第２要求に対する前記第２プログラムの応答処理が終了すると、前記第２プログラムを複製して第３プログラムを生成し、
前記演算処理装置は、前記第２プログラムの複製の後に、前記第２プログラムを前記記憶装置から削除する、
ことを特徴とする情報処理装置。
【請求項２】
前記演算処理装置による前記第１プログラムの複製は、前記第１プログラムに含まれるネイティブコードの複製を含む、請求項１に記載の情報処理装置。
【請求項３】
前記演算処理装置は、前記第１プログラム及び第２プログラムの実行とともに、前記第１プログラム又は前記第２プログラムの実行に対する経過情報の量や出力対象となるデータの数を少なくとも特定するログレベルに従ってログファイルを生成し、
前記第２プログラムのログレベルは、前記第１プログラムのログレベルより高い、請求項１又は２に記載の情報処理装置。
【請求項４】
前記第２プログラムの複製である第３プログラムの前記ログレベルは、前記第１プログラムのログレベルと同じである、請求項３に記載の情報処理装置。
【請求項５】
前記演算処理装置は、前記第２要求に対する前記第２プログラムの応答が終了すると、前記第２プログラムの前記ログレベルを、前記第１プログラムのログレベルと同じにする、請求項３に記載の情報処理装置。
【請求項６】
要求に対する応答処理を実行する情報処理装置を制御する方法であって、
前記情報処理装置が第１要求を受け取ると、前記情報処理装置の演算処理装置が、前記第１要求に対する応答処理を行う第１プログラム、及び前記第１要求を複製し、
前記演算処理装置が、前記第１プログラムの複製である第２プログラムを実行して、前記第１要求に対する前記第１プログラムの応答処理を監視し、
前記第１プログラムの応答処理の障害を検出した場合、前記演算処理装置が、前記第２プログラムを実行して、前記第１要求の複製である第２要求に対する応答処理を行い、
前記第２要求に対する前記第２プログラムの応答処理が終了すると、前記演算処理装置が前記第２プログラムを複製して第３プログラムを生成し、
前記第２プログラムの複製の後に、前記演算処理装置が前記第２プログラムを前記記憶装置から削除する、
ことを特徴とする制御方法。
【請求項７】
要求に対する応答処理を行うとともに、前記応答処理の異常を監視するプログラムであって、情報処理装置の演算処理装置に、
第１要求を受け取ると、前記演算処理装置が前記プログラムの複製元のプログラムを実行して行う前記第１要求に対する応答処理を監視する手順と、
前記複製元のプログラムの応答処理に障害が生じたことを検出した場合、前記第１要求の複製である第２要求に対する応答処理を行う手順と、
前記第２要求に対する前記第２プログラムの応答処理が終了すると、前記第２プログラムを複製して第３プログラムを生成する手順と、
前記第２プログラムの複製の後に、前記第２プログラムを前記記憶装置から削除する手順、
を実行させるためのプログラム。
【請求項８】
前記プログラムは、前記複製元のプログラムに含まれるネイティブコードの複製を含む、請求項７に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、情報処理装置、及び情報処理装置の制御方法に関する。
【背景技術】
【０００２】
クライアントサーバシステムが知られている。クライアントサーバシステムは、「サーバ」と呼ばれるコンピュータと、サーバが提供するサービスを利用する「クライアント」と呼ばれるコンピュータとを有する。サーバが提供するサービスによっては、サーバは、高い稼動性が求められる。例えば、製造業における受発注管理や生産管理のシステム、金融業における預金管理などの業務サービスを提供するサーバは、高稼動性が求められる。
【０００３】
サーバは、障害により、サービスを提供するためのプロセスの実行が出来なくなった場合、サーバは、障害があったプロセスを停止し、そのプロセスの再起動を行うように動作することで、クライアントに対する稼動性を維持する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１１−１５６７８号公報
【特許文献２】特開平１０−９１４７８号公報
【特許文献３】特開平１１−１３６９６１号公報
【特許文献４】特開２００９−１３４６９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、クライアントからのサービス要求と、要求に対するサーバの応答との間に、プロセス障害が生じた場合、プロセスを再起動すると、サーバが保持していたクライアントからの要求が消去される。そのため、クライアントは、サーバから要求に対する応答を受信することが出来ないため、再度、サーバに対してサービスの要求をしなくてはならない。このように、プロセス障害が生じると、クライアントに対するサーバの稼動性は低下していた。そこで、１つの側面では、本発明は、可動性の低下の抑制を図ることを目的とする。
【課題を解決するための手段】
【０００６】
クライアントコンピュータから出力される要求に対して応答処理を実行する情報処理装置であって、記憶装置と演算処理装置とを有する情報処理装置が提供される。前記記憶装置は、前記クライアントコンピュータから出力される要求に対する応答処理を実行させるための第１プログラムを格納する。前記演算処理装置は、前記クライアントコンピュータから第１要求を受け取ると、前記第１プログラム及び前記第１要求を複製し、前記第１プログラムの複製である第２プログラムを実行して、前記第１要求に対する前記第１プログラムの応答処理を監視し、前記第１プログラムの応答処理の障害を検出した場合、前記第２プログラムを実行して、前記第１要求の複製である第２要求に対する応答処理を行う。
【発明の効果】
【０００７】
稼働性の低下の抑制が図られる。
【図面の簡単な説明】
【０００８】
【図１】情報処理装置が適用されるシステムの一例を示す図である。
【図２】ＡＰサーバのハードウェア構成の一例を示す図である。
【図３】主記憶装置のメモリマップの一例を示す図である。
【図４】監視プロセスを用いたプロセス監視の従来例を示す図である。
【図５】要求ディスパッチプログラムの情報処理の一例を示す図である。
【図６】プロセス管理テーブルの一例を示す図である。
【図７】プロセス管理プログラムの正常処理の一例を示す図である。
【図８】プロセス異常終了時におけるプロセス管理プログラムの情報処理の第１例を示す図である。
【図９】プロセス及びプロセス管理プログラムの処理フローの第１例を示す図である。
【図１０】プロセス管理プログラムの処理フローの第１例を示す図である。
【図１１】プロセス管理プログラムのソースコードの一例を示す図である。
【図１２】プロセス異常終了時におけるプロセス管理プログラムの情報処理の第２例を示す図である。
【図１３】プロセス及びプロセス管理プログラムの処理フローの第２例を示す図である。
【図１４】プロセス管理プログラムに対応するソースコードの一例を示す図である。
【発明を実施するための形態】
【０００９】
以下、図面を参照して、プロセス管理プログラム、制御方法、及び情報処理装置を説明する。
【００１０】
まず、情報処理装置が適用されるシステムの概要を説明する。
【００１１】
［１  システム］
図１は、情報処理装置が適用されるシステムの一例を示す図である。図１に示すシステムは、クライアント３００、Ｗｅｂサーバ４００、及び、ＡＰサーバ５００を有する。ＡＰ（ＡＰｐｌｉｃａｔｉｏｎ：アプリケーション）サーバ５００は、例えば、クライアント３００に対するサービスを提供する情報処理装置としてのサーバコンピュータである。ＡＰサーバ５００のハードウェア構成は、図２を用いて後述し、ＡＰサーバ５００が提供するサービスや機能は、図５〜図１３を用いて後述する。
【００１２】
なお、図１に示すクライアント３００の台数は、「１」に限定されない。また、図１には、ＡＰサーバ５００は、Ｗｅｂサーバ４００と別個のサーバとして示されているが、ＡＰサーバ５００は、Ｗｅｂサーバ４００の提供する機能を有して、Ｗｅｂサーバ４００として動作してもよい。
【００１３】
クライアントコンピュータとしてのクライアント３００は、インターネット等のネットワーク２００及びＷｅｂサーバ４００を介して、ＡＰサーバ５００が提供するサービスに対する要求を、ＡＰサーバ５００に送信する。クライアント３００は、図１には示さない、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、メインメモリ、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）、及び、図１に示すディスプレイ３１０及び入力装置３２０を有する。入力装置３２０は、例えば、キーボードである。クライアント３００のＣＰＵは、Ｗｅｂブラウザを実行し、入力装置３２０からの入力情報に従ってＡＰサーバ５００への要求を生成する。クライアント３００のＣＰＵは、ＮＩＣを制御して、要求を送信し、要求に対する応答をＡＰサーバ５００から受信する。クライアント３００のＣＰＵは、ＡＰサーバ５００から応答を受信すると、Ｗｅｂブラウザを実行して、応答をディスプレイ３１０に表示するようにディスプレイ３１０を制御する。
【００１４】
Ｗｅｂサーバ４００は、サーバコンピュータである。Ｗｅｂサーバ４００は、ＨＴＴＰ（Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）等の通信プロトコルに従い、クライアント３００にＨＴＭＬ（ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）や画像オブジェクトなどの表示を提供する。Ｗｅｂサーバ４００が提供するＨＴＭＬのボディ部や画像オブジェクトは、ＡＰサーバ５００から提供される応答が含まれる。Ｗｅｂサーバ４００は、例えば、ファイアウォールによって外部ネットワークからも内部ネットワークからも隔離された区域であるＤＭＺ（ＤｅＭｉｌｉｔａｒｉｚｅｄ  Ｚｏｎｅ）に配置される。Ｗｅｂサーバ４００は、例えば、Ａｐａｃｈｅ  ＨＴＴＰ  Ｓｅｒｖｅｒ等のＷｅｂサーバソフトウェアを実行して、上記の機能を実現する。
【００１５】
なお、Ｗｅｂサーバ４００のハードウェア構成は、図２を用いて後述するＡＰサーバ５００のハードウェア構成であってもよい。
【００１６】
次に、ＡＰサーバ５００のハードウェア構成について説明する。
【００１７】
［２  ＡＰサーバ］
図２は、ＡＰサーバのハードウェア構成の一例を示す図である。図２に示すように、ＡＰサーバ５００は、演算処理装置５１０、主記憶装置５２０、通信部５３０、２次記憶装置５４０、及びＩ／Ｏコントローラ５６０を有する。また、ドライブ装置５５０を有していてもよい。
【００１８】
演算処理装置５１０は、Ｉ／Ｏコントローラ５６０を介して、通信部５３０、２次記憶装置５４０、及びドライブ装置５５０に接続する。
【００１９】
［２．１  演算処理装置］
演算処理装置５１０は、主記憶装置５２０に記憶されたプログラムを実行することで、主記憶装置５２０からデータをロードし、ロードしたデータを演算して、主記憶装置５２０に演算結果をストアする。演算処理装置５１０は、例えば、ＣＰＵである。
【００２０】
［２．２  Ｉ／Ｏコントローラ］
Ｉ／Ｏコントローラ５６０は、演算処理装置５１０と、他の接続装置との接続を制御する装置である。Ｉ／Ｏコントローラ５６０は、例えば、ＡＧＰ（Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）又はＰＣＩ  Ｅｘｐｒｅｓｓ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）などの規格に従って動作する。
【００２１】
［２．３  主記憶装置］
主記憶装置５２０は、データやプログラムを記憶する装置である。演算処理装置５１０は、Ｉ／Ｏコントローラ５６０を介することなく、主記憶装置５２０にアクセスすることができる。主記憶装置５２０は、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。なお、図３を用いて、主記憶装置５２０のメモリマップの一例を後述する。
【００２２】
［２．４  ２次記憶装置］
２次記憶装置５４０は、電源供給が無くても情報を保持可能であり、主記憶装置５２０に格納されるプログラム及びデータを記憶する装置である。２次記憶装置５４０は、磁気ディスクを用いたディスクアレイ、又は、フラッシュメモリを用いたＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等である。
【００２３】
［２．５  通信部］
通信部５３０は、通信経路としてのネットワーク４５０と接続し、ネットワーク４５０に接続された他の情報処理装置との間でデータを送受信する装置である。通信部５３０は、例えば、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃｏｎｔｒｏｌｌｅｒ）である。
【００２４】
［２．６  ドライブ装置］
ドライブ装置５５０は、例えば、フロッピー（登録商標）ディスクやＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）などの記憶媒体５９０を読み書きする装置である。ドライブ装置５５０は、記憶媒体５９０を回転させるモータや記憶媒体５９０上でデータを読み書きするヘッド等を含む。なお、記憶媒体５９０は、プログラムを格納することができる。ドライブ装置５５０は、ドライブ装置５５０にセットされた記憶媒体５９０からプログラムを読み出す。演算処理装置５１０は、ドライブ装置５５０により読み出されたプログラムを、主記憶装置５２０又は２次記憶装置５４０に格納する。なお、記憶媒体５９０に記憶されるプログラム又はデータとは、例えば、図３を用いて後述するプログラム又はデータである。
【００２５】
入力部５７０は、入力信号を演算処理装置５１０に出力する装置であり、例えば、キーボードやマウスである。出力部５８０は、演算処理装置５１０から出力される出力信号を表示する装置であり、例えば、ディスプレイである。
【００２６】
［３  主記憶装置］
図３は、主記憶装置のメモリマップの一例を示す図である。主記憶装置５２０は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）９１０、プロセス９４０Ａ及び９４０Ｂ、要求ディスパッチプログラム９５０、プロセス管理テーブル９６０、及びログファイル９７０を格納する。
【００２７】
図３に示されるＯＳ９１０、プロセス９４０Ａ及び９４０Ｂ、要求ディスパッチプログラム９５０等のプログラムは、演算処理装置５１０により実行される。そのため、これらのプログラムの実行主体は、演算処理装置５１０である。しかしながら、例えば、演算処理装置５１０がプロセス９４０Ａを実行して実現する機能を説明するために、「プロセス９４０Ａを実行する演算処理装置は、・・・という情報処理を実行する」と記載すると、説明が冗長になる。そのため、以下の記載では、演算処理装置５１０がプログラムを実行して実現する機能は、プログラムの名称を用いて説明する。例えば、「プロセス９４０Ａを実行する演算処理装置は、・・・という情報処理を実行する」は、「プロセス９４０Ａは、・・・という情報処理を実行する」と説明する。
【００２８】
［３．１  ＯＳ］
ＯＳ９１０は、キーボード入力や画面出力といった入出力機能やディスクやメモリの管理など、多くのアプリケーションから共通して利用される基本的な機能を提供し、ハードウェア資源全体を管理するソフトウェアである。ＯＳ９１０は、例えば、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）  Ｓｅｒｖｅｒである。
【００２９】
［３．２  プロセス］
プロセス９４０Ａは、クライアント３００からの要求に対する応答処理を実行するアプリケーションプログラムであり、例えば、業務サービスに関するアプリケーションプログラムである。
【００３０】
業務サービスに関するアプリケーションプログラムは、プロセス９４０Ａだけでなく、９４０Ａ’、９４０Ａ’’と複数あってもよい。これらのプロセスはプロセス管理テーブル９６０で管理される。
【００３１】
プロセス９４０Ａは、要求を受け取ると、要求をデータとして自プロセス内に含める。そのため、図３に示すように、プロセス９４０Ａは、要求９４２Ａを含む。
【００３２】
プロセス９４０Ａは、例えば、ＪＶＭ（Ｊａｖａ（登録商標）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）と、ＪＶＭにより実行されるＪａｖａ（登録商標）プログラムである。変換プログラム９４９Ａは、ＪＶＭに相当する。
【００３３】
業務サービスに関するアプリケーションプログラムは、図３に示されるネイティブコード９４４Ａ、又は、中間コード９４６Ａである。中間コード９４６Ａは、実行時にコンパイルされるコードであり、ＯＳの種類に依存しないコードである。
【００３４】
ＪＶＭは、Ｊａｖａ（登録商標）プログラムを実行する際に、中間コード９４６ＡとしてのＪａｖａ（登録商標）バイトコードの一部を選択し、選択した中間コードを演算処理装置５１０で実行可能なネイティブコード９４４Ａに変換して、実行する。
変換プログラム９４９Ａ及び９４９Ｂは、中間コード９４６Ａ及び９４６Ｂを、演算処理装置５１０が実行可能なネイティブコード９４４Ａ又は９４４Ｂに変換するためのプログラムである。演算処理装置５１０が中間コード９４６Ａ及び９４６Ｂの実行直前に、変換プログラム９４９Ａ及び９４９Ｂを実行して、中間コード９４６Ａ及び９４６Ｂを、ネイティブコード９４４Ａ又は９４４Ｂに変換する。なお、このように、実行時に、演算処理装置に実行可能な形式にコンパイルする方式を、「動的コンパイル」という。中間コード９４６Ａ及び９４６Ｂ、及び、ネイティブコード９４４Ａ又は９４４Ｂは、クライアントからの要求に応じた所定の処理を実行して、応答結果を算出するためのプログラムである。
【００３５】
上記のように、中間コードの一部は、ネイティブコード９４４Ａに変換されるので、プロセス９４０Ａは、中間コード９４６Ａとネイティブコード９４４Ａとを含む。
【００３６】
プロセス９４０Ａは、プロセス管理プログラム９４５Ａを含む。プロセス管理プログラム９４５Ａは、少なくともプロセス９４０Ａを複製する機能を有するプログラムである。プロセス９４０Ａは、クライアント３００からの要求９４２Ａを受け取ると、自プロセス内のプロセス管理プログラム９４５Ａを呼び出して、自プロセスの複製プロセスであるプロセス９４０Ｂを生成する。プロセス管理プログラム９４５Ａで実行されるプロセスの複製処理は、例えば、ｆｏｒｋ（）処理であり、ＯＳの機能を呼び出すシステムコールである。
【００３７】
プロセス管理プログラム９４５Ａは、例えば、ＣやＣ＋＋で書かれたプログラムであり、ネイティブコードである。プロセス管理プログラム９４５Ａは、変換プログラム９４９Ａが提供されるＪＮＩ（Ｊａｖａ（登録商標）  Ｎａｔｉｖｅ  Ｉｎｔｅｒｆａｃｅ）によって、ネイティブコード９４４Ａ又は中間コード９４６Ａから呼び出される。
【００３８】
［３．３  複製プロセス］
プロセス９４０Ｂは、プロセス９４０Ａのプロセス管理プログラム９４５Ａによって複製されたプロセスである。プロセス９４０Ａは、要求９４２Ａを受け取ると、要求９４２Ａをデータとして自プロセス内に含める。その後、プロセス９４０Ａは、プロセス管理プログラム９４５Ａによって自プロセスの複製であるプロセス９４０Ｂを生成するので、プロセス９４０Ｂは要求９４２Ａの複製である要求９４２Ｂを含む。
【００３９】
プロセス９４０Ｂは、プロセス９４０Ａの複製であるので、プロセス９４０Ａ内にあるプログラム及びデータを全て複製する。よって、プロセス管理プログラム９４５Ａは、プロセス９４０Ａ内に含まれる中間コード９４６Ａ、ネイティブコード９４４Ａ、プロセス管理プログラム９４５Ａ、データ９４８Ａ、及び変換プログラム９４９Ａを複製して、プロセス９４０Ｂを生成する。そのため、プロセス９４０Ｂは、図３に示されるように、中間コード９４６Ｂ、ネイティブコード９４４Ｂ、プロセス管理プログラム９４５Ｂ、中間コード９４６Ｂ、データ９４８Ｂ、及び、変換プログラム９４９Ｂを含む。
【００４０】
なお、後述するように、プロセス９４０Ｂは、プロセス９４０Ａに障害が生じると、プロセス９４０Ａの代わりに要求を処理するバックアッププロセスとして動作する。
【００４１】
また、図３に示されるプロセス９４０Ｃは、プロセス管理プログラム９４５Ｂによって生成されるプロセス９４０Ｂの複製プロセスである。上記したプロセス９４０Ｂ同様に複製されるので、プロセス９４０Ｃは、プロセス９４０Ｂ内にあるプログラム及びデータを全て複製する。よって、図３に示されるように、プロセス９４０Ｃは、中間コード９４６Ｃ、ネイティブコード９４４Ｃ、プロセス管理プログラム９４５Ｃ、中間コード９４６Ｃ、データ９４８Ｃ、及び、変換プログラム９４９Ｃを含む。ただし、後述するように複製のタイミングにおいて要求９４２Ｂはプロセス９４０Ｂに存在しないため、要求９４２Ｂはプロセス９４０Ｃに複製されない。
【００４２】
以下において、障害が生じたプロセスの代わりとなって動作するプロセスを「バックアッププロセス」という。また、複製の元となったプロセスを「親プロセス」、「親プロセス」の複製プロセスを「子プロセス」、「子プロセス」の複製プロセスを「孫プロセス」という。
【００４３】
図４は、監視プロセスを用いたプロセス監視の従来例を示す図である。図４には、プロセス９０１と、監視プロセス９０２と、要求ディスパッチプログラムのプロセス９０４と、プロセス管理テーブル９０５と、プロセス９０１の障害後に、プロセス９０１の代替処理を行うプロセス９０３が示される。要求ディスパッチプログラムのプロセス９０４は、クライアント３００からの要求を送る先を、プロセス管理テーブル９０５を参照して（Ｓ４５）決定し、プロセス９０１へ送る（Ｓ４１）。プロセス９０１は、要求（Ｓ４１）に対して応答処理を実行する。
【００４４】
監視プロセス９０２は、プロセス９０１の生存を監視し（Ｓ４２）、プロセス９０１の生存を監視できなくなった場合、プロセス９０１に代わって代替処理を行うプロセス９０３を生成する（Ｓ４３）。監視プロセス９０２は、その後、プロセス管理テーブル９０５にプロセス９０３のＰＩＤを登録して、同時にプロセス管理テーブル９０５からプロセス９０１のＰＩＤを削除する（Ｓ４６）。プロセス管理テーブル９０５は、図６で示すプロセス管理テーブル９６０の例と比して、バックアッププロセスＩＤの列がない。
【００４５】
従来例では、プロセス９０１の障害時に、プロセスを新たに生成する場合、新たに生成されたプロセス９０３は、クライアント３００からの要求を有さない。そのため、新たに生成されたプロセス９０３は、要求待ちになる。その場合、クライアント３００は、要求ディスパッチプログラムのプロセス９０４からのエラー応答、もしくはサーバからの応答待ちのタイムアウトを契機に、要求を再送することで（Ｓ４４）、プロセス９０３は要求を受け取り、プロセス９０１の代替処理を行なう。このように、プロセス障害後にプロセスを生成すると、クライアント３００に対する待ち時間を生じさせ、ＡＰサーバ５００の稼働性が下がる。
【００４６】
しかしながら、本実施形態に係るプロセス９４０Ｂは、プロセス９４０Ａの要求９４２Ａの複製である要求９４２Ｂを含むので、クライアント３００に再度の要求処理を要求することなく、要求９４２Ｂを処理して、クライアント３００に応答を返す。このように、プロセス９４０Ｂが、プロセス９４０Ａに代わってクライアント３００の要求に対する応答処理を実行することで、ＡＰサーバ５００によるクライアント３００の要求に対する応答処理の迅速化に寄与し、ＡＰサーバ５００の稼動性を上げる。
【００４７】
また、上記の「動的コンパイル」方式は、事前コンパイル方式と比べ、実行時のコンパイル処理の分だけ演算処理装置５１０に対する処理負荷となる。図４に示す従来例のように、プロセス障害時に、障害が生じたプロセスの複製プロセスを新たに生成する場合、中間コードからネイティブコードへのコンパイル処理が再度必要になり、当該コンパイル処理は、演算処理装置５１０に対する処理負荷となる。そのため、プロセス９０１の実行に際して、障害が生じ、プロセス９０３を新たに生成する場合、クライアント３００に対する待ち時間を生じさせる。この待ち時間が、ＡＰサーバ５００の稼働性を下げる。
【００４８】
しかしながら、本実施形態に係るプロセス９４０Ｂは、プロセス９４０Ａがクライアントからの要求を受けると同時に、プロセス９４０Ａを複製して生成される複製プロセスである。そのため、プロセス９４０Ｂはプロセス９４０Ａのネイティブコード９４４Ａの複製であるネイティブコード９４４Ｂを含み、プロセス９４０Ｂがプロセス９４０Ａの代わりに実行することで、中間コードからネイティブコードへの「動的コンパイル」が不要となる。よって、プロセス９４０Ｂが、プロセス９４０Ａに代わってクライアント３００の要求に対する応答処理を実行することで、ＡＰサーバ５００によるクライアント３００の要求に対する応答処理の迅速化に寄与し、ＡＰサーバの稼動性を上げる。
【００４９】
なお、生成するプロセスはプロセス９４０Ａ及び９４０Ｂに限定されない。例えば、後述する子プロセスであるプロセス９４０Ｂの孫プロセスも生成されると、主記憶装置５２０は、孫プロセスも記憶する。
【００５０】
要求ディスパッチプログラム９５０は、クライアント３００から要求を受け取ると、プロセス管理テーブル９６０を参照して、要求を処理する実行中のプロセスを検索し、検索したプロセスと通信して、要求を送信する処理を行う。要求ディスパッチプログラム９５０の詳細は、図５を用いて後述する。
【００５１】
プロセス管理テーブル９６０は、実行中プロセスのＰＩＤ（Ｐｒｏｃｅｓｓ  ＩＤｅｎｔｉｆｉｅｒ）と、バックアッププロセスとしての複製プロセスのＰＩＤとの対応関係を示すテーブルである。なお、図６を用いて、プロセス管理テーブル９６０の詳細例について後述する。
【００５２】
中間コード９４６Ａ及び９４６Ｂは、処理の実行経過のログを出力する機能を有する。実行経過としてのログは、ログファイル９７０として、主記憶装置５２０に記録される。主記憶装置５２０に記録されたログファイル９７０は、ＯＳ９１０がＩ／Ｏコントローラ５６０を介して２次記憶装置５４０へ記録する。ログファイル９７０は、例えば、プロセスの正常実行を妨げる原因が発生していないか、プロセス９４０Ａが正常処理しているか否か等を調べるために用いられる。プロセス９４０Ａ及び９４０Ｂは、ログレベルという変数により、経過情報の量や、出力対象となるデータを変える。例えば、ログレベルが低い時、経過情報の量や、出力対象となるデータの数が少なくなり、ログレベルが高い時、経過情報の量や、出力対象となるデータの数が多くなる。
【００５３】
ログレベルが上がると、ログファイル９７０のサイズが大きくなる。そのため、低ログレベルと比して、演算処理装置５１０及び主記憶装置５２０のリソースを要する。また、主記憶装置５２０と比して低速な２次記憶装置５４０への書き込みに時間を要する。一方で、ログファイル９７０内の情報が増えるために、低ログレベルのときと比して、障害原因等の判断において、有益な情報を得ることができる。後述するように、一実施形態によれば、バックアッププロセスが親プロセスの実行を継続するときに、親プロセスより高いログレベルでログファイル９７０を生成することで、異常時のときのみ、高いログレベルで異常判断の有益な情報を生成する。
【００５４】
［４  要求ディスパッチプログラム］
図５は、要求ディスパッチプログラムの情報処理の一例を示す図である。図６は、プロセス管理テーブルの一例を示す図である。図５及び図６を用いて、要求ディスパッチプログラムの情報処理を説明する。
【００５５】
図５に示すように、要求ディスパッチプログラム９５０を実行するＡＰサーバ５００は、クライアント３００から要求を受け取ると（Ｓ５１）、プロセス管理テーブル９６０を参照して（Ｓ５２）、要求を実行中のプロセスに振分ける（Ｓ５３）。
【００５６】
図６に示すプロセス管理テーブル９６０は、実行中のプロセスが登録されるテーブルである。プロセス管理テーブル９６０は、有効プロセスＩＤ列９６１と、バックアッププロセスＩＤ列９６２との対応関係を示す。有効プロセスＩＤ列９６１には、有効プロセスとして、実行中のプロセスが登録される。バックアッププロセスＩＤ列９６２には、同一エントリに入力される実行中のプロセスをバックアップするバックアッププロセスのＰＩＤが入力される。
【００５７】
要求ディスパッチプログラム９５０は、実行中のプロセスと通信して、プロセス管理テーブル９６０に入力されるプロセスの登録又は削除の管理を行う。例えば、要求ディスパッチプログラム９５０は、プロセスが生成されると、有効プロセスＩＤ列９６１にプロセスＩＤを登録する。又は、要求ディスパッチプログラム９５０は、プロセスが異常終了や削除されると有効プロセスＩＤ列９６１及びバックアッププロセスＩＤ列９６２からプロセスＩＤを削除する。
【００５８】
［５  プロセス管理プログラムの正常処理］
図７は、プロセス管理プログラムの正常処理の一例を示す図である。図７には、要求ディスパッチプログラム９５０、プロセス９４０Ａ及び９４０Ｂと、プロセス管理テーブル９６０とが示される。Ｓ７１〜Ｓ８０は、要求ディスパッチプログラム９５０、プロセス９４０Ａ及び９４０Ｂ、及びプロセス管理プログラム９４５Ａ及び９４５Ｂによる通信処理又は情報処理を示す。
【００５９】
要求ディスパッチプログラム９５０は、クライアント３００から要求を受け取る（Ｓ７１）。要求ディスパッチプログラム９５０は、要求を受け取ると、プロセス管理テーブル９６０を参照して、要求を処理する実行中のプロセスを検索する（Ｓ７２）。次に、要求ディスパッチプログラム９５０は、要求を処理する実行中のプロセスであるプロセス９４０Ａに要求を送信する（Ｓ７３）。プロセス９４０Ａに含まれるプロセス管理プログラム９４５Ａは、プロセス９４０Ａの複製プロセスであるプロセス９４０Ｂを生成する（Ｓ７４）。複製プロセスであるプロセス９４０Ｂは自身をプロセス管理テーブルに登録する（Ｓ７５）。例えば、図６の矢印９６４に示す有効プロセスＩＤ１２３４が登録される。プロセス９４０Ａは、クライアント３００からの要求を処理して（Ｓ７６）、要求の処理が完了すると、プロセス９４０Ｂを削除して（Ｓ７７）、プロセス管理テーブル９６０のエントリからも削除する（Ｓ７８）。要求ディスパッチプログラム９５０は、プロセス９４０Ａの処理結果を、応答としてクライアント３００に送信する（Ｓ７９、Ｓ８０）。なお、Ｓ７８の削除処理は無くてもよい。
【００６０】
［６  プロセス異常終了時のプロセス管理プログラムの情報処理の第１例］
図８は、プロセス異常終了時におけるプロセス管理プログラムの情報処理の第１例を示す図である。図８には、要求ディスパッチプログラム、プロセス、プロセス管理プログラムと、プロセス管理テーブル９６０が示される。Ｓ８１〜Ｓ９２は、図７に示す要求に対する処理（Ｓ７１〜Ｓ７５）の後の情報処理であり、プロセス異常終了時の情報処理を示す。
【００６１】
プロセス９４０Ａが異常終了すると（Ｓ８１）、要求ディスパッチプログラム９５０は、プロセス９４０Ａに障害が生じたことを確認する（Ｓ８２）。例えば、要求ディスパッチプログラム９５０と、プロセス９４０Ａは、ＩＰアドレスとポートから構成されるソケットにより通信を行っている場合、要求ディスパッチプログラム９５０は、ソケットがクローズすることにより、プロセス９４０Ａの障害を確認する。
【００６２】
また、プロセス９４０Ｂのプロセス管理プログラム９４５Ｂは、プロセス９４０Ａの生存監視を行い、プロセス９４０Ａが生存していないことを検知すると、要求ディスパッチプログラム９５０からの要求処理の依頼を待つ（Ｓ８３）。プロセス管理プログラム９４５Ｂのプロセス生存監視は、例えば、ＯＳ９１０のプロセス監視処理を利用して、ＯＳ９１０にプロセス９４０Ａの応答を問い合わせることでなされる。
【００６３】
要求ディスパッチプログラム９５０は、プロセス管理テーブル９６０から異常終了したプロセス９４０Ａのエントリを削除し、複製プロセスであるプロセス９４０Ｂを有効にする（Ｓ８４）。例えば、図６の矢印９６３に示す有効プロセスＩＤ１００１は、要求ディスパッチプログラム９５０によって削除され、図６の矢印９６５に示すように、プロセス９４０ＢのＰＩＤ１２３４は、有効プロセスとしてプロセス管理テーブル９６０に追加登録される。
【００６４】
要求ディスパッチプログラム９５０は、プロセス９４０Ｂに通信再開する（Ｓ８５）。プロセス９４０Ｂは、要求を正常処理して（Ｓ８６）、応答を要求ディスパッチプログラム９５０に送信する（Ｓ８７）。要求ディスパッチプログラム９５０は、応答を、クライアント３００に送信する（Ｓ８８）。
【００６５】
プロセス管理プログラム９４５Ｂは、正常処理を確認すると、プロセス９４０Ｂの複製プロセスである孫プロセスを生成する（Ｓ８９）。孫プロセス９４０Ｃのプロセス管理プログラム９４５Ｃは、孫プロセス９４０Ｃを実行中の有効プロセスとしてプロセス管理テーブル９６０に登録する（Ｓ９０）。そして、孫プロセス９４０Ｃのプロセス管理プログラム９４５Ｃは、プロセス９４０Ｂの演算処理装置５１０による実行を終了し、主記憶装置５２０から削除する（Ｓ９１）。
【００６６】
要求ディスパッチプログラム９５０は、プロセス９４０Ｂの終了を、ソケットクローズ等により検知すると（Ｓ９２）、プロセス９４０Ｂのエントリをプロセス管理テーブル９６０から削除する（Ｓ９３）。孫プロセスは、クライアント３００からの要求に対応するプロセスとして、プロセス９４０Ａの代わりのプロセスとして、クライアント３００からの要求を待つ（Ｓ９４）。
【００６７】
なお、一実施形態によれば、障害時に親プロセスであるプロセス９４０Ａをバックアップする子プロセスであるプロセス９４０Ｂは、プロセス９４０Ａよりもログレベルを上げる。これは、子プロセスを実行することで、障害時に、要求データに起因する再現性の難しい詳細なログを取得することができ、解析を容易にする。また、図７で説明したように、親プロセスに障害が発生してないときには、子プロセスは要求を処理せずに削除されるので、ログレベルを低くして親プロセスの実行性能を向上させる。
【００６８】
次に、図９〜図１１を用いて、プロセス及びプロセス管理プログラムの処理フローの第１例について説明する。図９は、プロセス及びプロセス管理プログラムの処理フローの第１例を示す図である。図１０は、プロセス管理プログラムの処理フローの第１例を示す図である。図１１には、プロセス管理プログラムのソースコード一例を示す図である。図１１には、図１０で説明する各ステップに対応するプログラムコードの一例が示される。
【００６９】
なお、演算処理装置５１０は、図１１に示すプロセス管理プログラムのソースコードをもとに予めコンパイルされたバイナリコードを主記憶上にロードして、プロセス管理プログラム９４５Ａを生成する。９４５Ｂ、および９４５Ｃは９４５Ａの複製である。図１０に示すプロセス管理プログラムの処理フローは、プロセス管理プログラムを実行して実現するプロセス管理プログラム９４５Ａ〜９４５Ｃの何れかによる処理である。よって、プロセス管理プログラム９４５Ａ〜９４５Ｃは、共通のソースコードに基づくが、実行される変数の違い等によって、異なる処理を実行する。以下では、「６．１  親プロセスによる複製プロセス生成処理」として、プロセス管理プログラム９４５Ａの処理フローを説明し、「６．２  子プロセスによる親プロセスのバックアップ処理」として、プロセス管理プログラム９４５Ｂの処理フローを説明する。さらに、「６．３  孫プロセスによる親プロセス代替処理」として、プロセス管理プログラム９４５Ｃの処理フローを説明する。
【００７０】
［６．１  親プロセスによる複製プロセス生成処理］
図９に示されるように、プロセス９４０Ａは、まず、初期値を設定する（Ｓ１１０１）。図１１に示すように、プロセス９４０Ａは、初期値として、デバッグフラグ（ｄｅｂｕｇ＿ｆｌｇ）を「ｆａｌｓｅ（０）」に、ログレベル（ｌｏｇ＿ｌｅｖｅｌ）を「１」に設定する。なお、これらの初期値は、例えばグローバル変数であり、プロセス管理プログラム９４５からアクセス可能な変数である。他のプロセス管理プログラム９４５Ｂ及び９４５Ｃからは、プロセス９４０Ｂ、及びプロセス９４０Ｃにそれぞれコピーされた領域がアクセス可能になる。
【００７１】
初期値の設定後、プロセス９４０Ａは、要求ディスパッチプログラム９５０からの要求の受信を待つ（Ｓ１００１）。プロセス９４０Ａは、要求を受け取ると、子プロセス９４０Ｂを生成する（Ｓ１００２）。Ｓ１００２の処理は、図１０に詳細に示される。
【００７２】
プロセス管理プログラム９４５Ａは、プロセス９４０ＡのＰＩＤを取得する（Ｓ１１０２）。これは複製されるプロセス９４０Ｂにとって親プロセスのＰＩＤ、すなわちＰＰＩＤ（Ｐａｒｅｎｔ  Ｐｒｏｃｅｓｓ  ＩＤｅｎｔｉｆｉｅｒ）である。プロセス管理プログラム９４５Ａは、プロセス９４０Ａの複製プロセスとしてのプロセス９４０Ｂを生成して、生成したプロセス９４０ＢのＰＩＤを取得する（Ｓ１１０３）。
【００７３】
プロセス管理プログラム９４５Ａは、実行中のプロセスが、複製プロセスか否か判断する（Ｓ１１０４）。実行中のプロセスが複製プロセスではない場合（Ｓ１１０４  Ｎｏ）、つまり、プロセス９４０Ａのプロセス管理プログラム９４５Ａの場合は、自プロセスに対しては、プロセス監視処理を実行しない。
【００７４】
［６．２  子プロセスによる親プロセスのバックアップ処理］
プロセス９４０Ｂは、プロセス管理プログラム９４５ＡのＳ１１０３により生成され、プロセス管理プログラム９４５ＢのＳ１１０３直後から実行される。なお、プロセス管理プログラム９４５ＢにおいてＳ１１０３で得られるｐｉｄは、「０」になる。
実行中のプロセスが複製プロセスである場合（Ｓ１１０４  Ｙｅｓ）とは、子プロセスであるプロセス９４０Ｂが実行する場合である。実行中のプロセスが複製プロセスである場合（Ｓ１１０４  Ｙｅｓ）、プロセス管理プログラム９４５Ｂは、自プロセスのデバッグフラグ（ｄｅｂｕｇ＿ｆｌｇ）を、親プロセスと逆のデバッグフラグにする（Ｓ１１０５）。例えば、プロセス管理プログラム９４５Ｂは、Ｓ１１０１で設定されたデバッグフラグ（ｄｅｂｕｇ＿ｆｌｇ）は「０（ｆａｌｓｅ）」であるので、Ｓ１１０５で、デバッグフラグ（ｄｅｂｕｇ＿ｆｌｇ）は「１（Ｔｒｕｅ）」になる。
【００７５】
プロセス管理プログラム９４５Ｂは、デバッグフラグ（ｄｅｂｕｇ＿ｆｌｇ）の値を確認する（Ｓ１１０６）。デバッグフラグ（ｄｅｂｕｇ＿ｆｌｇ）が「１（Ｔｒｕｅ）」の場合（Ｓ１１０６  Ｔｒｕｅ）、プロセス管理プログラム９４５Ｂは、バックアッププロセスの初期化処理を行う。当該初期化プロセスでは、例えば、プロセス管理プログラム９４５Ｂは、子プロセスの変数ｐｉｄを、Ｓ１１０３で得られたｐｉｄ「０」ではなく、子プロセス自身を識別可能なＰＩＤにする。例えば、図６に示すＰＩＤ「１２３４」にする。次に、プロセス管理プログラム９４５Ｂは、複製プロセスのログレベルを上げる（Ｓ１１１２）。
【００７６】
デバッグフラグ（ｄｅｂｕｇ＿ｆｌｇ）は「０（ｆａｌｓｅ）」の場合（Ｓ１１０６  ｆａｌｓｅ）、プロセス管理プログラムは、ログレベルを下げるが（Ｓ１１２１）、当該処理については、プロセス管理プログラム９４５Ｃが行なうので、後述の孫プロセスの生成で説明する。
【００７７】
Ｓ１１０５で、デバッグフラグ（ｄｅｂｕｇ＿ｆｌｇ）は「１（Ｔｒｕｅ）」であるので、プロセス管理プログラム９４５Ｂは、バックアッププロセスであるプロセス９４０Ｂのログレベルを上げる。プロセス管理プログラム９４５Ｂは、プロセス管理テーブル９６０にプロセス９４０ＢのＰＩＤを登録する（Ｓ１１１３）。プロセス管理プログラム９４５Ｂは、親プロセス９４０Ａが起動中か否かを監視し、親プロセス９４０Ａが終了するまで待つ（Ｓ１１１４  Ｙｅｓ）。親プロセス９４０Ａが終了すると（Ｓ１１１４  Ｎｏ）、要求ディスパッチプログラム９５０からの通信（Ｓ１１３０）に従い、プロセス９４０Ｂは、自プロセス内の要求を処理する（Ｓ１００３）。このようにして、親プロセス障害時のバックアップがプロセス９４０Ｂによって実行される。
【００７８】
プロセス管理プログラムの処理が終了し、図９に示す処理に戻ると、プロセス９４０Ｂは、処理の結果としての応答を、クライアント３００に送信する（Ｓ１００４）。プロセス９４０Ｂは、デバッグフラグ（ｄｅｂｕｇ＿ｆｌｇ）が、「０（ｆａｌｓｅ）」か「１（Ｔｒｕｅ）」か、を判断する（Ｓ１００５）。Ｓ１１０５で、デバッグフラグ（ｄｅｂｕｇ＿ｆｌｇ）は「１（Ｔｒｕｅ）」になっているので（Ｓ１００５  Ｔｒｕｅ）、プロセス９４０Ｂは、要求受付停止処理を行う（Ｓ１００７）。そして、孫プロセスを生成するためのプロセス管理プログラム処理が実行される（Ｓ１００８）。
【００７９】
一方で、親プロセスであるプロセス９４０Ａに障害がなく、プロセス９４０Ａが落ちて無い場合、プロセス管理プログラム９４５Ｂは、図１０で説明したように、プロセス９４０Ａが終了するのを待つ（Ｓ１１１４  Ｙｅｓ）。プロセス９４０Ａは、自プロセス内の業務処理に対する要求を処理する（Ｓ１００３）。プロセス９４０Ａは、処理の結果としての応答を、クライアント３００に送信する（Ｓ１００４）。プロセス９４０Ａは、自プロセスのデバッグフラグ（ｄｅｂｕｇ＿ｆｌｇ）が「０（ｆａｌｓｅ）」である（Ｓ１００５  ｆａｌｓｅ）、つまり障害を生じることなく応答処理を完了したので、待機中のプロセス９４０Ｂを削除する（Ｓ１００６）。このように、ログレベルの高いプロセス９４０Ｂは、親プロセスが落ちない限り実行されないため、正常終了時には、高いログレベルのログファイル９７０は生成されず、主記憶装置５２０の記憶領域を高いログレベルのログファイル９７０が記憶されることはない。
【００８０】
［６．３  孫プロセスによる親プロセス代替処理］
Ｓ１００８により再度プロセス管理プログラムの処理が実行される。図１０に示すように、プロセス管理プログラム９４５Ｂは、親プロセスとしてのＰＰＩＤ（Ｐａｒｅｎｔ  Ｐｒｏｃｅｓｓ  ＩＤｅｎｔｉｆｉｅｒ）を取得する（Ｓ１１０２）。なお、ここで親プロセスは、子プロセスであるプロセス９４０Ｂである。
【００８１】
プロセス管理プログラム９４５Ｂは、子プロセスの複製プロセスである孫プロセス９４０Ｃを生成して、孫プロセス９４０ＣのＰＩＤを取得する（Ｓ１１０３）。なお、複製されたプロセス管理プログラム９４５ＣではＳ１１０３の結果として得られるｐｉｄは「０」である。孫プロセスは複製プロセスであるので（Ｓ１１０４  Ｙｅｓ）、親プロセスであるプロセス９４０Ｂと逆のデバッグフラグ（ｄｅｂｕｇ＿ｆｌｇ）「０（ｆａｌｓｅ）」になる。
【００８２】
プロセス管理プログラム９４５Ｃは、孫プロセスのデバッグフラグ（ｄｅｂｕｇ＿ｆｌｇ）「０（ｆａｌｓｅ）」であるので（Ｓ１１０６  ｆａｌｓｅ）、プロセスの初期化処理を行う（Ｓ１１２０）。当該初期化プロセスでは、孫プロセスがバックアッププロセスではなく通常プロセスとして実行可能にするための初期化処理がなされる。例えば、プロセス管理プログラム９４５Ｃは、孫プロセスの変数ｐｉｄを、Ｓ１１０３で得られたｐｉｄ「０」ではなく、プロセス自身のＰＩＤにする。
【００８３】
次に、プロセス管理プログラム９４５Ｃは、孫プロセスのログレベルを下げる（Ｓ１１２１）。このように、通常プロセスとして動作させる孫プロセスのログレベルを下げることで、通常処理時に高いログレベルでログファイル９７０を保存するという状態を回避できる。プロセス管理プログラム９４５Ｃは、孫プロセスのＰＩＤをプロセス管理テーブル９６０に登録して（Ｓ１１２２）、親プロセスであるプロセス９４０Ｂを停止し、主記憶装置５２０からプロセス９４０Ｂを削除する（Ｓ１１２３）。要求ディスパッチプログラム９５０から通信が再開すると（Ｓ１１３０）、プロセス管理プログラム９４５Ｃは、再度要求を待つ（Ｓ１００１）。
【００８４】
以上説明したように、プロセス管理プログラム９４５Ａは、親プロセスを複製し、プロセス管理プログラム９４５Ｂは、生成した子プロセスを、親プロセスの異常後に、クライアントからの要求を処理するバックアッププロセスとして動作させる。そして、プロセス管理プログラム９４５Ｂは、バックアッププロセスのログレベルを上げることで、障害発生時にハイレベルで生成したログを残すことができる。さらに、プロセス管理プログラム９４５Ｃは、子プロセスを複製して生成した孫プロセスを、ログレベルを下げた通常プロセスとして動作させることで、業務処理を継続して実施することが出来るとともに、正常時にハイレベルで生成したログを残さない。
【００８５】
なお、図１１は、Ｃ言語で書かれたソースコードＰ１１０１及びＰ１１０２であり、ＵＮＩＸ（登録商標）  ＯＳを呼び出すシステムコールであるｆｏｒｋ（）を示す。しかしながら、図１１は、例示であり、プロセス管理プログラム９４５Ａ〜９４５Ｃは、Ｃ言語及びＵＮＩＸ（登録商標）  ＯＳに対するシステムコールに限定されない。
【００８６】
［７  プロセス異常終了時のプロセス管理プログラムの情報処理の第２例］
図１２は、プロセス異常終了時におけるプロセス管理プログラムの情報処理の第２例を示す図である。図１２には、要求ディスパッチプログラム、プロセス、プロセス管理プログラムと、プロセス管理テーブル９６０が示される。Ｓ８１Ａ〜Ｓ１０２は、図７に示す要求に対する処理（Ｓ７１〜Ｓ７５）の後の情報処理であり、プロセス異常終了時のプロセス管理プログラムによる情報処理を示す。また、Ｓ８１Ａ〜Ｓ８８Ａは、図８に示すＳ８１〜Ｓ８８と同じ情報処理であるので、説明を省略する。
【００８７】
バックアッププロセスであるプロセス９４０Ｂは、クライアント３００への応答処理を正常終了すると、自プロセスのログレベルを下げる（Ｓ１０１）。そして、プロセス９４０Ｂは、次のクライアント３００からの要求に対しては、プロセス９４０Ａの代わりに動作する（Ｓ１０２）。このように、図１２に示す第２例では、図８に示す第１例と異なり、孫プロセスを生成しない。そのため、孫プロセス生成の演算処理装置５１０の処理負荷が生じない。
【００８８】
次に、図１３及び図１４を用いて、プロセス及びプロセス管理プログラムの処理フローの第２例について説明する。図１３は、プロセス及びプロセス管理プログラムの処理フローの第２例を示す図である。図１４には、プロセス管理プログラムに対応するソースプログラムコードの一例であるＰ１４０１〜Ｐ１４０３が示される。
【００８９】
図１３に示されるステップＳ１００１、Ｓ１００３〜Ｓ１００７は、図９に示す同ステップと同じであるので、説明を省略する。Ｓ１３０１では、Ｐ１１０２とＰ１４０２に示したプロセス管理プログラムの処理の異なる部分が実行されないため、Ｓ１００２と同じ処理がなされる。Ｓ１３０２は、親プロセスの障害により子プロセスが代替で要求の応答を完了した後の処理であるが、子プロセスは自プロセスのログレベルを下げる（Ｐ１４０３）。このように、図１３に示す第２例では、図９に示す第１例と異なり、孫プロセスを生成しない。そのため、孫プロセス生成の演算処理装置５１０の処理負荷を生じさせない。
【００９０】
図１４に示すソースコードは、図１１に示すソースコードと比して、Ｓ１１２０に対応するプログラムがプロセスの複製に依存しない。
【００９１】
以上の実施形態に関し、更に以下の付記を開示する。
［付記１］
クライアントコンピュータから出力される要求に対して応答処理を実行する情報処理装置であって、
前記情報処理装置に、前記クライアントコンピュータから出力される要求に対する応答処理を実行させるための第１プログラムを格納する記憶装置と、
前記クライアントコンピュータから第１要求を受け取ると、前記第１プログラム及び前記第１要求を複製し、前記第１プログラムの複製である第２プログラムを実行して、前記第１要求に対する前記第１プログラムの応答処理を監視し、前記第１プログラムの応答処理の障害を検出した場合、前記第２プログラムを実行して、前記第１要求の複製である第２要求に対する応答処理を行う、演算処理装置と、
を備えることを特徴とする情報処理装置。
［付記２］
前記演算処理装置による前記第１プログラムの複製は、前記第１プログラムに含まれるネイティブコードの複製を含む、付記１に記載の情報処理装置。
［付記３］
前記演算処理装置は、前記第１プログラム及び第２プログラムの実行とともに、前記第１プログラム又は前記第２プログラムの実行に対する経過情報の量や出力対象となるデータの数を少なくとも特定するログレベルに従ってログファイルを生成し、
前記第２プログラムのログレベルは、前記第１プログラムのログレベルより高い、付記１又は２に記載の情報処理装置。
［付記４］
前記演算処理装置は、前記第２要求に対する前記第２プログラムの応答処理が終了すると、前記第２プログラムを複製し、
前記演算処理装置は、前記第２プログラムの複製の後に、前記第２プログラムを前記記憶装置から削除し、
前記第２プログラムの複製である第３プログラムの前記ログレベルは、前記第１プログラムのログレベルと同じである、付記３に記載の情報処理装置。
［付記５］
前記演算処理装置は、前記第２要求に対する前記第２プログラムの応答が終了すると、前記第２プログラムの前記ログレベルを、前記第１プログラムのログレベルと同じにする、付記３に記載の情報処理装置。
［付記６］
要求に対する応答処理を実行する情報処理装置を制御する方法であって、
前記情報処理装置が第１要求を受け取ると、前記情報処理装置の演算処理装置が、前記第１要求に対する応答処理を行う第１プログラム、及び前記第１要求を複製し、
前記演算処理装置が、前記第１プログラムの複製である第２プログラムを実行して、前記第１要求に対する前記第１プログラムの応答処理を監視し、
前記第１プログラムの応答処理の障害を検出した場合、前記演算処理装置が、前記第２プログラムを実行して、前記第１要求の複製である第２要求に対する応答処理を行うこと、を有することを特徴とする制御方法。
［付記７］
前記演算処理装置による前記第１プログラムの複製は、前記第１プログラムに含まれるネイティブコードの複製を含む、付記６に記載の制御方法。
［付記８］
前記演算処理装置は、前記第１プログラム及び第２プログラムの実行とともに、前記第１プログラム又は前記第２プログラムの実行に対する経過情報の量や出力対象となるデータの数を少なくとも特定するログレベルに従ってログファイルを生成することをさらに有し、
前記第２プログラムのログレベルは、前記第１プログラムのログレベルより高い、付記６又は７に記載の制御方法。
［付記９］
前記演算処理装置は、前記第２要求に対する前記第２プログラムの応答処理が終了すると、前記第２プログラムを複製し、
前記演算処理装置は、前記第２プログラムの複製の後に、前記第２プログラムを前記記憶装置から削除することをさらに有し、
前記第２プログラムの複製である第３プログラムの前記ログレベルは、前記第１プログラムのログレベルと同じである、付記８に記載の制御方法。
［付記１０］
前記演算処理装置は、前記第２要求に対する前記第２プログラムの応答が終了すると、前記第２プログラムの前記ログレベルを、前記第１プログラムのログレベルと同じにすることをさらに有する、付記８に記載の制御方法。
［付記１１］
要求に対する応答処理を行うとともに、前記応答処理の異常を監視するプログラムであって、情報処理装置の演算処理装置に、
第１要求を受け取ると、前記演算処理装置が前記プログラムの複製元のプログラムを実行して行う前記第１要求に対する応答処理を監視する手順と、
前記複製元のプログラムの応答処理に障害が生じたことを検出した場合、前記第１要求の複製である第２要求に対する応答処理を行う手順と、を実行させるためのプログラム。
［付記１２］
前記プログラムは、前記複製元のプログラムに含まれるネイティブコードの複製を含む、付記１１に記載のプログラム。
［付記１３］
前記演算処理装置に、前記第１プログラム及び第２プログラムの実行とともに、前記第１プログラム又は前記第２プログラムの実行に対する経過情報の量や出力対象となるデータの数を少なくとも特定するログレベルに従ってログファイルを生成する手順をさらに実行させ、
前記第２プログラムのログレベルは、前記第１プログラムのログレベルより高い、付記１１又は１２に記載のプログラム。
［付記１４］
前記演算処理装置に、前記第２要求に対する前記第２プログラムの応答処理が終了すると、前記第２プログラムを複製する手順と、
前記第２プログラムの複製の後に、前記第２プログラムを前記記憶装置から削除する手順とをさらに実行させ、
前記第２プログラムの複製である第３プログラムの前記ログレベルは、前記第１プログラムのログレベルと同じである、付記１３に記載のプログラム。
［付記１５］
前記演算処理装置に、前記第２要求に対する前記第２プログラムの応答が終了すると、前記第２プログラムの前記ログレベルを、前記第１プログラムのログレベルと同じにする手順をさらに実行させる、付記１３に記載のプログラム。
【符号の説明】
【００９２】
１０    システム
３００    クライアント
４００    Ｗｅｂサーバ
５００    ＡＰサーバ
５１０    演算処理装置
５２０    主記憶装置
５３０    通信部
５４０    ２次記憶装置
５５０    ドライブ装置
５６０    Ｉ／Ｏコントローラ
５９０    記憶媒体
９４０Ａ、９４０Ｂ    プロセス
９４２Ａ、９４２Ｂ    要求
９４４Ａ、９４４Ｂ    ネイティブコード
９４６Ａ、９４６Ｂ    中間コード
９４８Ａ、９４８Ｂ    データ
９４９Ａ、９４９Ｂ    変換プログラム
９５０    要求ディスパッチプログラム
９６０    プロセス管理テーブル
９７０    ログファイル
【図１】
0005565153.tif 000002
【図２】
0005565153.tif 000003
【図３】
0005565153.tif 000004
【図４】
0005565153.tif 000005
【図５】
0005565153.tif 000006
【図６】
0005565153.tif 000007
【図７】
0005565153.tif 000008
【図８】
0005565153.tif 000009
【図９】
0005565153.tif 000010
【図１０】
0005565153.tif 000011
【図１１】
0005565153.tif 000012
【図１２】
0005565153.tif 000013
【図１３】
0005565153.tif 000014
【図１４】
0005565153.tif 000015