JP6536374B2 - 情報処理装置、情報処理方法及びプログラム - Google Patents

情報処理装置、情報処理方法及びプログラム Download PDF

Info

Publication number
JP6536374B2
JP6536374B2 JP2015224794A JP2015224794A JP6536374B2 JP 6536374 B2 JP6536374 B2 JP 6536374B2 JP 2015224794 A JP2015224794 A JP 2015224794A JP 2015224794 A JP2015224794 A JP 2015224794A JP 6536374 B2 JP6536374 B2 JP 6536374B2
Authority
JP
Japan
Prior art keywords
thread
monitoring
abnormality
processing
identifier
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.)
Active
Application number
JP2015224794A
Other languages
English (en)
Other versions
JP2017091444A (ja
Inventor
直之 吉見
直之 吉見
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2015224794A priority Critical patent/JP6536374B2/ja
Publication of JP2017091444A publication Critical patent/JP2017091444A/ja
Application granted granted Critical
Publication of JP6536374B2 publication Critical patent/JP6536374B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Description

本発明は、システムの監視技術に関する。
サーバやストレージ等の装置が複数存在する環境においては、これらの装置とは別に管理サーバを用意し、管理サーバにこれらの装置を一括で監視させることが一般的に行われる。管理サーバによる監視は、例えば、各装置の状態に関する情報等を一定の間隔で取得する処理を実行するための常駐型プログラムを管理サーバにインストールして、管理サーバに実行させることによって実現される。
ここで、管理サーバにインストールされた常駐型プログラムのスレッドが異常によって停止すると、装置の監視を行うことができなくなってしまう。そのため、このようなスレッドの異常(以下、スレッド異常と呼ぶ)を検出するための機構をシステム内に設けることも行われる。
スレッド異常を検出するための機構によって多くのリソースが使用されることは、他の処理が使用するリソースを不足させることになるため、又は、より多くのリソースをシステムに導入しなければならなくなるため、好ましくない。しかし、このような問題に着目した従来技術は存在しない。
特開2008−3770号公報 特開2000−99480号公報
従って、本発明の目的は、1つの側面では、スレッド異常の検出に要するリソースの量を削減するための技術を提供することである。
本発明に係る情報処理方法は、プログラムの第1スレッドが動作中であり且つプログラムの第2スレッドが動作中ではない場合に、第1スレッドと第2スレッドとが共通に使用する記憶領域から読み出した識別子が第2スレッドの識別子であるか否かに基づき、第2スレッドに異常があるか否かの判定を行い、判定の後第1スレッドの処理が完了した場合に、記憶領域に格納されている識別子を第1スレッドの識別子で更新する処理を含む。
1つの側面では、スレッド異常の検出に要するリソースの量を削減できるようになる。
図1は、ウオッチドッグによる監視の一例を示す図である。 図2は、ウオッチドッグによる監視の一例を示す図である。 図3は、単一のスレッドによって装置の監視を行う例を示す図である。 図4は、二重化されたスレッドによって装置の監視を行う例を示す図である。 図5は、本実施の形態のシステム概要を示す図である。 図6は、メモリ領域に格納されるデータの一例を示す図である。 図7は、メインの処理フローを示す図である。 図8は、監視スレッドの実行時刻の設定について説明するための図である。 図9は、監視スレッドの処理の処理フローを示す図である。 図10は、異常フラグについて説明するための図である。 図11は、監視処理の処理フローを示す図である。 図12は、メモリ領域に格納されるデータの一例を示す図である。 図13は、管理サーバの動作の具体例を示す図である。 図14は、管理サーバの動作の具体例を示す図である。 図15は、管理サーバの動作の具体例を示す図である。 図16は、管理サーバの動作の具体例を示す図である。 図17は、二重化されたスレッドによって装置の監視を行うシステムにおいて行われる処理の処理フローを示す図である。 図18は、コンピュータの機能ブロック図である。
管理サーバが常駐型プログラムを長時間実行している場合、管理サーバのハードウエアの障害や故障、或いはリソースの不足等によって常駐型プログラムが正常に動作しない場合がある。このような場合に備えるための技術としてウオッチドッグが知られている。
図1に、ウオッチドッグによる監視の一例を示す。図1においては、管理サーバが装置1a乃至3aと定期的に通信を行い、装置1a乃至3aの情報を取得する。また、管理サーバとは別にウオッチドッグサーバが設けられており、ウオッチドッグサーバにおけるウオッチドッグ部が管理サーバに対して問い合わせを行う。管理サーバにおける常駐型プログラム(以下、単にプログラムと呼ぶ)は、プログラムのスレッドに異常が無い場合には正常であることを示す応答を返すが、プログラムのスレッドが異常である場合にはスレッド異常が発生したことを示す応答を返すか又は応答自体を返すことができない。これによってウオッチドッグサーバのウオッチドッグ部はスレッド異常を検出することができる。
しかし、この方法はウオッチドッグ部として動作させるプログラムを別途用意しなければ実現することができない。また、図2に示すように、例えばスレッドの時刻調整処理が失敗した場合或いはメモリ不足により処理を実行できない場合等、スレッド異常が発生している環境においてプログラムがスレッド異常を検出できない場合には、正常であることを示す応答がウオッチドッグサーバに送信される。従って、ウオッチドッグサーバのウオッチドッグ部はスレッド異常を検出することができない。
別の方法として、プログラム内部のスレッドを二重で起動し、起動した2つのスレッドに同時並行で処理を実行させ、両スレッドの処理結果を比較することでスレッド異常を検出する方法が考えられる。しかし、この方法には、使用するリソースの量が増えるという問題と、プログラムの潜在的なバグにより両方のスレッドで同じ障害が同時に発生することがあるという問題とが有る。
例えば図3に示すように、単一のスレッドによって装置1aの監視を実行する場合、監視の実行結果を保存する1つのメモリ領域(ここではメモリ領域1m)を用意すればよい。また、ネットワークを介して管理サーバと監視対象の装置とが通信を行う場合においても、ネットワークリソース(例えば帯域)が1スレッド分だけ消費される。
一方、図4に示すように2つのスレッドによって装置1aの監視を実行する場合、監視の実行結果を保存する2つのメモリ領域(ここではメモリ領域1m及び2m)を用意することになる。また、ネットワークリソースは2スレッド分消費される。さらに、装置1aは2つのスレッドからアクセスされるため処理負荷が倍になる。なお、ここでは管理サーバ及び装置1aに2つのCPUが存在するが、必ずしも物理的に分離された2つのCPUである必要は無い。
また、管理サーバ及び装置1aそれぞれのプロトコルに有効なセッション数が設定されている場合が有り、たとえ二重でスレッドを実行する場合であっても使用できるセッション数の関係で片方のスレッドしか通信をすることができない場合がある。この場合、冗長構成を実現することはできない。
また、特定の条件(例えば時刻或いはタイミング)でスレッドが終了するバグ又はスレッド内部の処理が無限ループに陥るバグが含まれている場合、両方のスレッドで同じ障害が発生する。このようなバグとしては、例えば、閏秒の時刻でプログラム内の時刻調整処理が失敗してスレッドを実行できなくなるバグや負荷が過剰である場合にメモリ不足によってスレッドを実行できないバグが有る。
そこで、以下では、プログラムが上記のようなバグを含む場合においてもスレッド異常を検出できるようにしつつ、且つ、スレッド異常の検出をスレッドの二重動作時より少ないリソースで実現する方法を説明する。
図5に、本実施の形態のシステム概要を示す。本実施の形態の主要な処理を実行する管理サーバ1は、例えばLAN(Local Area Network)であるネットワーク3を介して監視対象である装置1a乃至3aと接続される。管理サーバ1は、ネットワーク3を介して装置1a乃至3aの状態に関する情報等を収集し、装置1a乃至3aを監視する。なお、図5において装置の数は3であるが、数に限定は無い。
管理サーバ1は、時刻管理部11と、起動制御部12と、異常処理部13と、例えばメインメモリの領域であるメモリ領域14と、初期化処理部15と、監視スレッド1t及び2tとを含む。
時刻管理部11は、監視スレッド1t及び2tを実行する時刻を管理する。起動制御部12は、監視スレッド1t及び2tの起動を制御する。監視スレッド1t及び2tは、メモリ領域14に格納されたデータに基づきスレッド異常が発生したか判定する処理を実行し、スレッド異常が発生した場合には異常処理部13に通知を行う。異常処理部13は、スレッド異常が検出された場合に管理者に通知を行う(例えばメールを送信する)処理及び異常が発生した監視スレッドの再起動等を実行する。初期化処理部15は、後述する初期化処理を実行する。
図6に、メモリ領域14に格納されるデータの一例を示す。図6の例では、装置の識別情報と、取得処理の実行結果(例えば、装置から取得された情報等)と、監視スレッドの識別情報であるスレッドID(IDentification information)とが格納される。本データは、監視スレッド1t及び2tによって更新される。メモリ領域14は、監視スレッド1t及び2tに共通で使用される。
次に、図7乃至図12を用いて、管理サーバ1が実行する処理を説明する。本処理は、例えば管理サーバ1の起動後に実行される。
まず、初期化処理部15は、監視スレッド1t及び2tの実行時刻を設定する(図7:ステップS1)。実行時刻は、例えば図8に示すように、監視スレッド1tの処理及び監視スレッド2tの処理が交互に実行されるように制御される。例えば、監視スレッド1tの実行時刻は19時00分、19時20分、19時40分・・・・で且つ監視スレッド2tの実行時刻は19時10分、19時30分、19時50分・・・・のように設定される。なお、各監視スレッドは処理の実行後にスリープ状態に移行する。
初期化処理部15は、監視スレッド1t及び2tのスレッドIDを生成し(ステップS3)、メモリ領域14を初期化する(ステップS5)。本実施の形態においては、監視スレッド1tに対してスレッドID「01」が生成され、監視スレッド2tに対してスレッドID「02」が生成されるとする。
初期化処理部15は、監視スレッド1t及び2tを生成する(ステップS7)。具体的には、初期化処理部15は起動制御部12に監視スレッド1t及び2tを起動させる処理を実行する。但し、ステップS7の時点においては監視スレッド1t及び2tはスリープ状態であり、処理の実行指令が出力されるまで処理は実行されない。そして、初期化処理部15は、監視スレッド1t及び2tを生成したことを時刻管理部11に通知する。
時刻管理部11は、例えばOS(Operating System)のシステム時計等が示す時刻を監視する(ステップS9)。そして、監視スレッド1tの実行時刻になった場合、時刻管理部11は、監視スレッド1tの処理の実行指令を出力する(ステップS11)。これに応じ、管理サーバ1は監視スレッド1tの処理を実行する(ステップS13)。監視スレッド1tの処理が完了した後、監視スレッド1tはスリープ状態に移行する。スリープ状態の間は、リソースは全く消費されないか又は消費されたとしてもごくわずかである。
時刻管理部11は、例えばOSのシステム時計等が示す時刻を監視する(ステップS15)。そして、監視スレッド2tの実行時刻になった場合、時刻管理部11は、監視スレッド2tの処理の実行指令を出力する(ステップS17)。これに応じ、管理サーバ1は監視スレッド2tの処理を実行する(ステップS19)。監視スレッド2tの処理が完了した後、監視スレッド2tはスリープ状態に移行する。
その後は、ステップS9乃至S19の処理が繰り返される。これにより、監視スレッド1tの処理と監視スレッド2tの処理とが交互に行われるようになる。なお、監視スレッド1tの処理に要する時間及び監視スレッド2tの処理に要する時間は、実行指令が出力される間隔よりも短いものとする。すなわち、或る監視スレッドの処理が完了する前に他方の監視スレッドの処理が開始することはないものとする。
以上のように、本実施の形態においては、監視スレッド1tと監視スレッド2tとが同時並行で処理を実行することはないので、使用されるリソース(例えば、メモリリソース及びネットワークリソース)の量を減らすことができるようになる。また、監視の際に生成されるセッションの数を増加させることがない。さらに、監視対象である装置1a乃至3aは、2つのスレッドから同時にアクセスされることがないので、処理負荷の増大が抑制される。
ここで、図9乃至図12を用いて、監視スレッド1tの処理及び監視スレッド2tの処理について説明する。但し、両者は全く同じ処理であるので、ここでは監視スレッド1tの処理を例にして説明をする。
まず、監視スレッド1tは、異常フラグを「OFF」に設定する(図9:ステップS21)。管理サーバ1は、例えば図10に示すような異常フラグをメモリ領域14において管理しているとする。異常フラグが「ON」に設定されている場合にはスレッド異常が発生しており、異常フラグが「OFF」に設定されている場合にはスレッド異常が発生していない。
監視スレッド1tは、未処理の装置を1台特定し(ステップS23)、特定された装置について監視処理を実行する(ステップS25)。監視処理については、図11を用いて説明する。
まず、監視スレッド1tは、ステップS23において特定された装置(以下では、対象装置と呼ぶ)の識別情報に関連付けられたスレッドIDをメモリ領域14から読み出す(図11:ステップS41)。
監視スレッド1tは、読み出されたスレッドIDは他スレッド(ここでは、監視スレッド2t)のスレッドIDであるか判定する(ステップS43)。読み出されたスレッドIDが監視スレッド2tのスレッドIDではない場合(ステップS43:Noルート)、監視スレッド2tの処理が適切に行われておらず、監視スレッド2tに異常が発生したと推定される。従って、監視スレッド1tは、異常フラグを「ON」に設定する(ステップS45)。そしてステップS47の処理に移行する。
一方、読み出されたスレッドIDが監視スレッド2tのスレッドIDである場合(ステップS43:Yesルート)、監視スレッド1tは、リトライ回数を表す変数retry_countをretry_count=0と設定する(ステップS47)。
監視スレッド1tは、取得処理を実行する(ステップS51)。取得処理とは、対象装置の状態に関する情報等を対象装置から取得する処理である。
監視スレッド1tは、情報の取得に成功したか判定する(ステップS53)。情報の取得に成功した場合(ステップS53:Yesルート)、監視スレッド1tは、メモリ領域14に、対象装置についての取得処理の実行結果と監視スレッド1tのスレッドIDとを書き込む(ステップS55)。そして呼び出し元の処理に戻る。例えば、図6に示したようなデータがメモリ領域14に格納されている場合において、各スレッドIDが「02」から「01」に変更された場合、図12に示すようなデータがメモリ領域14に格納される。
一方、情報の取得に成功しなかった場合(ステップS53:Noルート)、監視スレッド1tは、retry_count≦閾値(例えば5)が成立するか判定する(ステップS57)。retry_count≦閾値が成立する場合(ステップS57:Yesルート)、リトライを継続すべきであるので、retry_countを1インクリメントし(ステップS59)、ステップS51の処理に戻る。一方、retry_count≦閾値が成立しない場合(ステップS57:Noルート)、監視スレッド1tは、メモリ領域14に、対象装置についての取得処理が失敗したことを示す情報と監視スレッド1tのスレッドIDとを書き込む(ステップS61)。そして呼び出し元の処理に戻る。スレッドIDは、監視スレッド1tである場合には「01」であり、監視スレッド2tである場合には「02」である。
スレッド異常が発生し監視スレッドによる情報取得が実行されない場合には、監視スレッド2tのスレッドIDは格納されない。従って、他方の監視スレッドのスレッドIDがメモリ領域14に格納されているか否かに基づいて、スレッド異常を検出することができる。
図9の説明に戻り、監視スレッド1tは、未処理の装置が有るか判断する(ステップS27)。未処理の装置が有る場合(ステップS27:Yesルート)、ステップS23の処理に戻る。
一方、未処理の装置が無い場合(ステップS27:Noルート)、監視スレッド1tは、異常フラグが「ON」であるか判断する(ステップS29)。異常フラグが「ON」ではない場合(ステップS29:Noルート)、監視スレッド1tはスリープ状態に移行する(ステップS33)。そして処理は終了する。
一方、異常フラグが「ON」である場合(ステップS29:Yesルート)、監視スレッド1tは、スレッド異常が発生したことを異常処理部13に通知する(ステップS31)。そして処理は終了する。
なお、監視スレッド1tから通知を受けた異常処理部13は、スレッド異常が検出された場合に管理者に通知を行う。これに応じ、管理者はGUI(Graphical User Interface)によって監視スレッドの異常を確認する。また、異常処理部13は、異常が発生した監視スレッドの再起動等を、例えば初期化処理部15によって決定された実行時刻に実行する。
以上のような処理を実行すれば、監視スレッド1tと監視スレッド2tとが同時並行で処理を実行しない場合であっても、監視スレッドの異常を漏れなく検出できるようになる。また、特定の条件(例えば時刻或いはタイミング)でスレッドが終了するバグ又はスレッド内部の処理が無限ループに陥るバグが含まれている場合であっても、監視スレッドによる監視が停止することがない。
次に、図13乃至図16のシーケンス図を用いて、管理サーバ1の動作の具体例を説明する。まず、正常時における管理サーバ1の動作を説明する。
19時00分になると監視スレッド1tは起動され、監視スレッド1tは異常フラグを「OFF」に設定する(図13:ステップS101)。
監視スレッド1tは、装置1aの識別情報に対応付けられたスレッドIDを確認する(ステップS103)。スレッドIDが「02」であれば監視スレッド2tに異常は発生していない。ここでは、スレッドIDが「02」であるので監視スレッド2tに異常は発生しておらず、監視スレッド1tは装置1aの状態に関する情報等を取得する(ステップS105)。情報の取得に成功した場合、監視スレッド1tは、メモリ領域14に、装置1aについての取得処理の実行結果とスレッドID「01」とを書き込む(ステップS107)。これにより、「02」から「01」へスレッドIDが変更される。
監視スレッド1tは、装置2aの識別情報に対応付けられたスレッドIDを確認する(ステップS109)。スレッドIDが「02」であれば監視スレッド2tに異常は発生していない。ここでは、スレッドIDが「02」であるので監視スレッド2tに異常は発生しておらず、監視スレッド1tは装置2aの状態に関する情報等を取得する(ステップS111)。情報の取得に成功した場合、監視スレッド1tは、メモリ領域14に、装置2aについての取得処理の実行結果とスレッドID「01」とを書き込む(ステップS113)。これにより、「02」から「01」へスレッドIDが変更される。
監視スレッド1tは、装置3aの識別情報に対応付けられたスレッドIDを確認する(ステップS115)。スレッドIDが「02」であれば監視スレッド2tに異常は発生していない。ここでは、スレッドIDが「02」であるので監視スレッド2tに異常は発生しておらず、監視スレッド1tは装置3aの状態に関する情報等を取得する(ステップS117)。情報の取得に成功した場合、監視スレッド1tは、メモリ領域14に、装置3aについての取得処理の実行結果とスレッドID「01」とを書き込む(ステップS119)。これにより、「02」から「01」へスレッドIDが変更される。
監視スレッド1tは異常フラグを確認するが、異常フラグは「OFF」であるので、監視スレッド1tはスリープ状態に移行する(ステップS121)。
そして、19時10分になると監視スレッド2tは起動され、監視スレッド2tは、異常フラグを「OFF」に設定する(図14:ステップS131)。なお、既に異常フラグが「OFF」であれば、本ステップは省略される。
監視スレッド2tは、装置1aの識別情報に対応付けられたスレッドIDを確認する(ステップS133)。スレッドIDが「01」であれば監視スレッド1tに異常は発生していない。ここでは、スレッドIDが「01」であるので監視スレッド1tに異常は発生しておらず、監視スレッド2tは装置1aの状態に関する情報等を取得する(ステップS135)。情報の取得に成功した場合、監視スレッド2tは、メモリ領域14に、装置1aについての取得処理の実行結果とスレッドID「02」とを書き込む(ステップS137)。これにより、「01」から「02」へスレッドIDが変更される。
監視スレッド2tは、装置2aの識別情報に対応付けられたスレッドIDを確認する(ステップS139)。スレッドIDが「01」であれば監視スレッド1tに異常は発生していない。ここでは、スレッドIDが「01」であるので監視スレッド1tに異常は発生しておらず、監視スレッド2tは装置2aの状態に関する情報等を取得する(ステップS141)。情報の取得に成功した場合、監視スレッド2tは、メモリ領域14に、装置2aについての取得処理の実行結果とスレッドID「02」とを書き込む(ステップS143)。これにより、「01」から「02」へスレッドIDが変更される。
監視スレッド2tは、装置3aの識別情報に対応付けられたスレッドIDを確認する(ステップS145)。スレッドIDが「01」であれば監視スレッド1tに異常は発生していない。ここでは、スレッドIDが「01」であるので監視スレッド1tに異常は発生しておらず、監視スレッド2tは装置3aの状態に関する情報等を取得する(ステップS147)。情報の取得に成功した場合、監視スレッド2tは、メモリ領域14に、装置3aについての取得処理の実行結果とスレッドID「02」とを書き込む(ステップS149)。これにより、「01」から「02」へスレッドIDが変更される。
監視スレッド2tは異常フラグを確認するが、異常フラグは「OFF」であるので、監視スレッド2tはスリープ状態に移行する(ステップS151)。
次に、スレッド異常発生時における管理サーバ1の動作を説明する。まず、19時00分になると監視スレッド1tは起動され、監視スレッド1tは異常フラグを「OFF」に設定する(図15:ステップS161)。
監視スレッド1tは、装置1aの識別情報に対応付けられたスレッドIDを確認する(ステップS163)。スレッドIDが「02」であれば監視スレッド2tに異常は発生していない。ここでは、スレッドIDが「02」であるので監視スレッド2tに異常は発生しておらず、監視スレッド1tは装置1aの状態に関する情報等を取得する(ステップS165)。情報の取得に成功した場合、監視スレッド1tは、メモリ領域14に、装置1aについての取得処理の実行結果とスレッドID「01」とを書き込む(ステップS167)。これにより、「02」から「01」へスレッドIDが変更される。
監視スレッド1tは、装置2aの識別情報に対応付けられたスレッドIDを確認する(ステップS169)。スレッドIDが「02」であれば監視スレッド2tに異常は発生していない。ここでは、スレッドIDが「02」であるので監視スレッド2tに異常は発生しておらず、監視スレッド1tは装置2aの状態に関する情報等を取得する(ステップS171)。情報の取得に成功した場合、監視スレッド1tは、メモリ領域14に、装置2aについての取得処理の実行結果とスレッドID「01」とを書き込む(ステップS173)。これにより、「02」から「01」へスレッドIDが変更される。
ここで、スレッド異常の発生によって監視スレッド1tの処理が停止したとする。この場合、処理はステップS175に移行し、監視スレッド1tはスリープ状態に移行する(ステップS175)。従って、装置3aについては取得処理が実行されず、スレッドIDは「02」のままである。
そして、19時10分になると監視スレッド2tは起動され、監視スレッド2tは、異常フラグを「OFF」に設定する(図16:ステップS181)。なお、既に異常フラグが「OFF」であれば、本ステップは省略される。
監視スレッド2tは、装置1aの識別情報に対応付けられたスレッドIDを確認する(ステップS183)。スレッドIDが「01」であれば監視スレッド1tに異常は発生していない。ここでは、スレッドIDが「01」であるので監視スレッド1tに異常は発生しておらず、監視スレッド2tは装置1aの状態に関する情報等を取得する(ステップS185)。情報の取得に成功した場合、監視スレッド2tは、メモリ領域14に、装置1aについての取得処理の実行結果とスレッドID「02」とを書き込む(ステップS187)。これにより、「01」から「02」へスレッドIDが変更される。
監視スレッド2tは、装置2aの識別情報に対応付けられたスレッドIDを確認する(ステップS189)。スレッドIDが「01」であれば監視スレッド1tに異常は発生していない。ここでは、スレッドIDが「01」であるので監視スレッド1tに異常は発生しておらず、監視スレッド2tは装置2aの状態に関する情報等を取得する(ステップS191)。情報の取得に成功した場合、監視スレッド2tは、メモリ領域14に、装置2aについての取得処理の実行結果とスレッドID「02」とを書き込む(ステップS193)。これにより、「01」から「02」へスレッドIDが変更される。
監視スレッド2tは、装置3aの識別情報に対応付けられたスレッドIDを確認する(ステップS195)。スレッドIDが「01」であれば監視スレッド1tに異常は発生していない。ここでは、スレッドIDが「02」であるので監視スレッド1tに異常が発生したと判定され、監視スレッド2tは異常フラグを「ON」に設定する(ステップS197)。そして、監視スレッド2tは、装置3aの状態に関する情報等を取得する(ステップS199)。情報の取得に成功した場合、監視スレッド2tは、メモリ領域14に、装置3aについての取得処理の実行結果とスレッドID「02」とを書き込む(ステップS200)。ここでは、スレッドIDは「02」のままである。
監視スレッド2tは異常フラグを確認するが、異常フラグは「ON」であるので、監視スレッド2tは、異常処理部13にスレッド異常が発生したことを通知する(ステップS202)。これに応じ、スレッド異常への対処(例えば、監視スレッド1tの再起動等)が実行される。
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した管理サーバ1の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
また、上で説明したデータ保持構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
[付録]
本付録では、図4に示した、二重化されたスレッドによって装置の監視を行うシステムの動作をより詳細に説明する。
まず、初期化処理部15は、監視スレッド1t及び2tの実行時刻を設定する(図17:ステップS201)。監視スレッド1t及び2tの実行時刻は、両監視スレッドが同時並行で処理を実行するように設定される。
初期化処理部15は、異常処理部13の実行時刻を設定する(ステップS203)。異常処理部13の実行時刻は、監視スレッド1t及び2tの処理の後に異常処理部13の処理が実行されるように設定される。
初期化処理部15は、監視スレッド1t及び2tを生成する(ステップS205)。具体的には、初期化処理部15は起動制御部12に監視スレッド1t及び2tを起動させる処理を実行する。但し、ステップS205の時点においては監視スレッド1t及び2tはスリープ状態であり、処理の実行指令が出力されるまで処理は実行されない。そして、初期化処理部15は、監視スレッド1t及び2tを生成したことを時刻管理部11に通知する。
時刻管理部11は、例えばOSのシステム時計等が示す時刻を監視する(ステップS207)。そして、監視スレッド1t及び2tの実行時刻になった場合、時刻管理部11は、監視スレッド1tの処理の実行指令と監視スレッド2tの処理の実行指令とを出力する(ステップS209)。これに応じ、管理サーバ1は監視スレッド1tの処理と監視スレッド2tの処理とを実行する。監視スレッド1tの実行結果はメモリ領域14におけるメモリ領域1mに格納され、監視スレッド2tの実行結果はメモリ領域14におけるメモリ領域2mに格納される(ステップS211及びS213)。監視スレッド1t及び2tは、処理が完了した後にスリープ状態に移行する(ステップS215及びS217)。
時刻管理部11は、例えばOSのシステム時計等が示す時刻を監視する(ステップS219)。そして、異常処理部13の実行時刻になった場合、時刻管理部11は、異常処理部13の処理の実行指令を出力する(ステップS221)。
これに応じ、異常処理部13はメモリ領域1m及び2mから取得処理の実行結果を読み出す(ステップS223)。
異常処理部13は、メモリ領域1mから読み出した実行結果とメモリ領域2mから読み出した実行結果とに差異が有るか判定する(ステップS225)。差異が有る場合(ステップS225:Yesルート)、スレッド異常が発生したことを管理者に通知する(ステップS227)。或いは、ステップS227において、異常処理部13が異常に対処するための処理を実行してもよい。
一方、差異が無い場合(ステップS225:Noルート)、異常処理部13はスリープ状態に移行する(ステップS229)。そして、ステップS207乃至S229の処理が繰り返される。
以上で付録を終了する。
なお、上で述べた管理サーバ1は、コンピュータ装置であって、図18に示すように、メモリ2501とCPU(Central Processing Unit)2503とハードディスク・ドライブ(HDD:Hard Disk Drive)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、アプリケーション・プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
以上述べた本発明の実施の形態をまとめると、以下のようになる。
本実施の形態の第1の態様に係る情報処理方法は、(A)プログラムの第1スレッドが動作中であり且つプログラムの第2スレッドが動作中ではない場合に、第1スレッドと第2スレッドとが共通に使用する記憶領域から読み出した識別子が第2スレッドの識別子であるか否かに基づき、第2スレッドに異常があるか否かの判定を行い、(B)判定の後第1スレッドの処理が完了した場合に、記憶領域に格納されている識別子を第1スレッドの識別子で更新する処理を含む。
このようにすれば、たとえ第1スレッドと第2スレッドとが同時並行で動作していなくてもスレッドの異常を検出することができる。すなわち、スレッドの異常を検出することに要するリソースの量を削減することができるようになる。
また、本情報処理方法は、(C)記憶領域に格納されている識別子を第1スレッドの識別子に更新した後、第1スレッドをスリープ状態に移行する処理をさらに含んでもよい。これにより、第1スレッドによって消費されるリソース量を減らすことができるようになる。
また、本情報処理方法は、(D)第1スレッドがスリープ状態に移行した後、所定の時刻に第2スレッドのスリープ状態を解除し、第2スレッドの動作を開始する処理をさらに含んでもよい。これにより、第1スレッドの処理と第2スレッドの処理とが交互に実行されるようになる。
また、本情報処理方法は、(E)第2スレッドに異常があると判定された場合に、当該異常に対処するための処理を実行する処理をさらに含んでもよい。これにより、異常の拡大等を抑制できるようになる。
また、第1スレッドの処理は、複数の装置の動作を監視する処理であってもよい。
また、第2スレッドに異常があるか否かの判定を行う処理において、(a1)記憶領域から読み出した識別子が第2スレッドの識別子である場合、第2スレッドに異常が無いと決定し、記憶領域から読み出した識別子が第2スレッドの識別子ではない場合、第2スレッドに異常が有ると決定してもよい。
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
プログラムであって、
前記プログラムの第1スレッドが動作中であり且つ前記プログラムの第2スレッドが動作中ではない場合に、前記第1スレッドと前記第2スレッドとが共通に使用する記憶領域から読み出した識別子が前記第2スレッドの識別子であるか否かに基づき、前記第2スレッドに異常があるか否かの判定を行い、
前記判定の後前記第1スレッドの処理が完了した場合に、前記記憶領域に格納されている識別子を前記第1スレッドの識別子で更新する、
処理をコンピュータに実行させるプログラム。
(付記2)
前記コンピュータに、
前記記憶領域に格納されている識別子を前記第1スレッドの識別子に更新した後、前記第1スレッドをスリープ状態に移行する、
処理をさらに実行させる付記1記載のプログラム。
(付記3)
前記コンピュータに、
前記第1スレッドがスリープ状態に移行した後、所定の時刻に前記第2スレッドのスリープ状態を解除し、前記第2スレッドの動作を開始する、
処理をさらに実行させる付記2記載のプログラム。
(付記4)
前記コンピュータに、
前記第2スレッドに異常があると判定された場合に、当該異常に対処するための処理を実行する、
処理をさらに実行させる付記1乃至3のいずれか1つ記載のプログラム。
(付記5)
前記第1スレッドの処理は、複数の装置の動作を監視する処理である、
付記1乃至4のいずれか1つ記載のプログラム。
(付記6)
前記第2スレッドに異常があるか判定する処理において、
前記記憶領域から読み出した識別子が前記第2スレッドの識別子である場合、前記第2スレッドに異常が無いと決定し、前記記憶領域から読み出した識別子が前記第2スレッドの識別子ではない場合、前記第2スレッドに異常が有ると決定する、
付記1乃至5のいずれか1つ記載のプログラム。
(付記7)
コンピュータが、
プログラムの第1スレッドが動作中であり且つ前記プログラムの第2スレッドが動作中ではない場合に、前記第1スレッドと前記第2スレッドとが共通に使用する記憶領域から読み出した識別子が、前記第2スレッドの識別子であるか否かに基づき、前記第2スレッドに異常があるか否かの判定を行い、
前記判定の後前記第1スレッドの処理が完了した場合に、前記記憶領域に格納されている識別子を前記第1スレッドの識別子で更新する、
処理を実行する情報処理方法。
(付記8)
複数のスレッドが共通で使用する記憶装置と、
プロセッサと、
を有し、
前記プロセッサが、
プログラムの第1スレッドが動作中であり且つ前記プログラムの第2スレッドが動作中ではない場合に、前記記憶装置から読み出した識別子が、前記第2スレッドの識別子であるか否かに基づき、前記第2スレッドに異常があるか否かの判定を行い、
前記判定の後前記第1スレッドの処理が完了した場合に、前記記憶領域に格納されている識別子を前記第1スレッドの識別子で更新する、
処理を実行する情報処理装置。
1 管理サーバ 11 時刻管理部
12 起動制御部 13 異常処理部
14 メモリ領域 15 初期化処理部
1t,2t 監視スレッド 3 ネットワーク
1a,2a,3a 装置

Claims (6)

  1. プログラムであって、
    前記プログラムの第1スレッドが動作中であり且つ前記プログラムの第2スレッドが動作中ではない場合に、前記第1スレッドと前記第2スレッドとが共通に使用する記憶領域から読み出した識別子が前記第2スレッドの識別子であるか否かに基づき、前記第2スレッドに異常があるか否かの判定を行い、
    前記判定の後前記第1スレッドの処理が完了した場合に、前記記憶領域に格納されている識別子を前記第1スレッドの識別子で更新する、
    処理をコンピュータに実行させるプログラム。
  2. 前記コンピュータに、
    前記記憶領域に格納されている識別子を前記第1スレッドの識別子に更新した後、前記第1スレッドをスリープ状態に移行する、
    処理をさらに実行させる請求項1記載のプログラム。
  3. 前記コンピュータに、
    前記第1スレッドがスリープ状態に移行した後、所定の時刻に前記第2スレッドのスリープ状態を解除し、前記第2スレッドの動作を開始する、
    処理をさらに実行させる請求項2記載のプログラム。
  4. 前記コンピュータに、
    前記第2スレッドに異常があると判定された場合に、当該異常に対処するための処理を実行する、
    処理をさらに実行させる請求項1乃至3のいずれか1つ記載のプログラム。
  5. コンピュータが、
    プログラムの第1スレッドが動作中であり且つ前記プログラムの第2スレッドが動作中ではない場合に、前記第1スレッドと前記第2スレッドとが共通に使用する記憶領域から読み出した識別子が、前記第2スレッドの識別子であるか否かに基づき、前記第2スレッドに異常があるか否かの判定を行い、
    前記判定の後前記第1スレッドの処理が完了した場合に、前記記憶領域に格納されている識別子を前記第1スレッドの識別子で更新する、
    処理を実行する情報処理方法。
  6. 複数のスレッドが共通で使用する記憶装置と、
    プロセッサと、
    を有し、
    前記プロセッサが、
    プログラムの第1スレッドが動作中であり且つ前記プログラムの第2スレッドが動作中ではない場合に、前記記憶装置から読み出した識別子が、前記第2スレッドの識別子であるか否かに基づき、前記第2スレッドに異常があるか否かの判定を行い、
    前記判定の後前記第1スレッドの処理が完了した場合に、前記記憶装置に格納されている識別子を前記第1スレッドの識別子で更新する、
    処理を実行する情報処理装置。
JP2015224794A 2015-11-17 2015-11-17 情報処理装置、情報処理方法及びプログラム Active JP6536374B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015224794A JP6536374B2 (ja) 2015-11-17 2015-11-17 情報処理装置、情報処理方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015224794A JP6536374B2 (ja) 2015-11-17 2015-11-17 情報処理装置、情報処理方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2017091444A JP2017091444A (ja) 2017-05-25
JP6536374B2 true JP6536374B2 (ja) 2019-07-03

Family

ID=58768475

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015224794A Active JP6536374B2 (ja) 2015-11-17 2015-11-17 情報処理装置、情報処理方法及びプログラム

Country Status (1)

Country Link
JP (1) JP6536374B2 (ja)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0354644A (ja) * 1989-07-24 1991-03-08 Meidensha Corp Cpu異常処理方法
JPH05324355A (ja) * 1992-05-21 1993-12-07 Hokuriku Nippon Denki Software Kk タスク間実行制御装置
JP2006185232A (ja) * 2004-12-28 2006-07-13 Hitachi Ltd 複数のプログラムの実行方法、プログラム変換方法及びこれを用いたコンパイラプログラム
JP5335552B2 (ja) * 2009-05-14 2013-11-06 キヤノン株式会社 情報処理装置、その制御方法、及びコンピュータプログラム
JP5776776B2 (ja) * 2011-08-05 2015-09-09 富士通株式会社 データ処理システム、およびデータ処理方法
JP5601724B2 (ja) * 2011-11-25 2014-10-08 楽天株式会社 情報処理装置、情報処理方法、情報処理プログラム、及び情報処理プログラムが記録された記録媒体

Also Published As

Publication number Publication date
JP2017091444A (ja) 2017-05-25

Similar Documents

Publication Publication Date Title
US7213246B1 (en) Failing over a virtual machine
US8458534B1 (en) Method and system for providing high availability to computer applications
JP2004295738A (ja) 耐障害計算機システム、プログラム並列実行方法およびプログラム
WO2015169199A1 (zh) 分布式环境下虚拟机异常恢复方法
CN110071821A (zh) 备用节点的指定
US10379922B1 (en) Error recovery in a virtual machine-based development environment
US20070174746A1 (en) Tuning core voltages of processors
US20130138998A1 (en) Method for switching application server, management computer, and storage medium storing program
US9256489B2 (en) Synchronized debug information generation
US20140143768A1 (en) Monitoring updates on multiple computing platforms
US20030221141A1 (en) Software-based watchdog method and apparatus
US10169137B2 (en) Dynamically detecting and interrupting excessive execution time
US7373542B2 (en) Automatic startup of a cluster system after occurrence of a recoverable error
US20170039118A1 (en) Cluster system, server device, cluster system management method, and computer-readable recording medium
JP6558037B2 (ja) 運用管理プログラム、運用管理方法、および運用管理装置
US9612935B2 (en) Enhanced resiliency testing by enabling state level control for request
US10353729B1 (en) Managing service dependencies across virtual machines in a development environment
US10860411B2 (en) Automatically detecting time-of-fault bugs in cloud systems
KR101063720B1 (ko) 피어 프로그램 가능 하드웨어 장치에 대한 자동화 펌웨어 복구
JP2009223582A (ja) 情報処理装置、情報処理装置の制御方法および制御プログラム
JP6536374B2 (ja) 情報処理装置、情報処理方法及びプログラム
JP5909948B2 (ja) 情報処理装置および情報処理装置の試験方法
US20100023801A1 (en) Method to recover from ungrouped logical path failures
WO2008004330A1 (fr) Système à processeurs multiples
CN114217905A (zh) 虚拟机高可用恢复处理方法及系统

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180706

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190320

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190402

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190405

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: 20190507

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190520

R150 Certificate of patent or registration of utility model

Ref document number: 6536374

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150