JP6019995B2 - 分散システム、サーバ計算機、及び障害発生防止方法 - Google Patents

分散システム、サーバ計算機、及び障害発生防止方法 Download PDF

Info

Publication number
JP6019995B2
JP6019995B2 JP2012209911A JP2012209911A JP6019995B2 JP 6019995 B2 JP6019995 B2 JP 6019995B2 JP 2012209911 A JP2012209911 A JP 2012209911A JP 2012209911 A JP2012209911 A JP 2012209911A JP 6019995 B2 JP6019995 B2 JP 6019995B2
Authority
JP
Japan
Prior art keywords
failure
interface
server
application
component
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
JP2012209911A
Other languages
English (en)
Other versions
JP2014067089A (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.)
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 JP2012209911A priority Critical patent/JP6019995B2/ja
Priority to CN201310439457.8A priority patent/CN103685459B/zh
Priority to US14/035,311 priority patent/US9342426B2/en
Publication of JP2014067089A publication Critical patent/JP2014067089A/ja
Priority to US15/096,422 priority patent/US10157110B2/en
Application granted granted Critical
Publication of JP6019995B2 publication Critical patent/JP6019995B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing
    • G06F11/273Tester hardware, i.e. output processing circuits
    • G06F11/2736Tester hardware, i.e. output processing circuits using a dedicated service processor for test
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0709Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a distributed system consisting of a plurality of standalone computer nodes, e.g. clusters, client-server systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • G06F11/076Error or fault detection not based on redundancy by exceeding limits by exceeding a count or rate limit, e.g. word- or bit count limit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0772Means for error signaling, e.g. using interrupts, exception flags, dedicated error registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1438Restarting or rejuvenating

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は分散システム、サーバ計算機、分散管理サーバ及び障害発生防止方法に関する。
業務システムにおいて、アプリケーションサーバに実装された業務アプリケーションのプログラムの欠陥を原因とする障害が発生することにより、業務システム全体の障害が引き起こされるケースがしばしば発生する。業務アプリケーションにおける障害は、例えば以下の通りである。
第1に、デッドロックが挙げられる。これは、アプリケーションロジックを実行する複数のスレッド間で、互いの排他制御(ロックの獲得など)が交差することにより、それぞれのスレッドの実行がブロックされたままの状態になることである。この場合、ブラウザなど、アプリケーションの呼び出し元となるクライアントアプリケーションにおいては、リクエストの応答が返らず、画面が更新されないなどの問題を引き起こす。
第2に、過剰なメモリの消費が挙げられる。これは、業務に関するクエリ処理などで大量のデータを扱うアプリケーションロジックにおいて、1回のロジックの実行により、アプリケーションサーバで使用可能なメモリ領域を圧迫する状態に陥ることである。この状況では、同じプロセス上で並行して動作する他のアプリケーションロジックを実行中のスレッドにおいて、処理の遅延が発生したり、処理実行時にメモリ不足によるエラーが発生したりすることがある。そして、最悪の場合、アプリケーションサーバのプロセス自体が異常終了する。
第3に、過剰なCPU(Central Processing Unit)の消費(過剰なCPU使用率の高さ)が挙げられる。これは、無限ループの発生や、冗長なアプリケーションロジックにより、必要以上にCPUを使用する状態になることである。この場合、アプリケーションの呼び出し元においては、リクエストの応答が返らず、画面が更新されないなどの問題を引き起こす。また、同じプロセス上で並行して動作する他のアプリケーションロジックを実行中のスレッドにおいて、処理の遅延が発生するなどの弊害を引き起こす。
このような事象の発生時には、大抵の場合、障害が発生したアプリケーションサーバを再起動することにより解消できる。しかし、いずれの場合も、根本解決には対象となるアプリケーションのプログラムの改修が必須である。そのため、改修後のアプリケーションが用意できるまでの間、システム運用者は、上記のような障害の再発を防ぐため、定期的なアプリケーションサーバの再起動や、アプリケーションサーバに対するパラメータのチューニングなどの暫定対応に迫られることがある。
障害処理の技術として、特許文献1においては、障害要因となるコンポーネントを特定する管理装置が開示されている。具体的には、アプリケーションサーバを備えた計算機と管理システムを備えた計算機とがネットワークで接続されているシステムにおいて異常が発生した場合に、管理装置は、アプリケーションサーバと管理システムのいずれにおいて障害が発生したかを特定することができる。
特許文献2においては、障害の予兆や障害発生に適応してエラーを発生させずかつ性能を落とさないコンポーネントソフトウェアの運用基盤が開示されている。具体的には、複数のコンポーネント(ソフトウェア部品)から構成されるコンポーネントソフトウェアを実行している最中に、コンポーネントソフトウェアの運用基盤は、コンポーネントを他のコンポーネントと入れ替える。
特許文献3においては、複数のアプリケーションサーバ計算機と管理サーバ計算機とを備えたアプリケーション管理システムが開示されている。アプリケーションサーバ計算機は、管理サーバ計算機に格納されたアプリケーション動作定義保存ファイルを参照し、実行要求のあったアプリケーションの実行を制御し、管理する。そして実行したアプリケーションに異常が発生した場合には、アプリケーションサーバ計算機は、他のアプリケーションサーバ計算機又は外部計算機にその旨を通知する。
特開2010−9127号公報 特開2006−338069号公報 特開2005−209029号公報
ところで、昨今、クラウド・コンピューティング技術を用いたシステム化が普及しつつある。このシステム化は、多数のネットワーク上に分散的に配置された大多数のアプリケーションサーバにより、システムが構成されるというものである。このような環境においては、負荷が分散される構成となるため、1台の(障害発生などに伴う)サーバに発生した異常がシステム全体の障害に発展することにはなりにくい。
しかし、アプリケーション自体のプログラムの問題に起因する障害の場合には、全てのアプリケーションサーバにおいて今後同じ障害が発生するリスクが潜在する。そのため、従来のバージョンにダウングレードするなどの処置を取らない限り、上述したようなシステム運用者による暫定対応は避けられない。さらに対象のサーバ台数が多くなると、それだけそのような障害に遭遇する確率も高くなり、延いては暫定対応のための作業コストが増大することに繋がる。
特許文献1、2においては、クラウド・コンピューティングのように、アプリケーションサーバ等のサーバを複数配置した状況は考慮されていない。
特許文献3にかかるアプリケーション管理システムでは、アプリケーションサーバ計算機において実行したアプリケーションに異常が発生した場合でも、他のアプリケーションサーバ計算機が同様の異常を発生させないようにすることはできない。
本発明は、このような問題点を解決するためになされたものであり、システム運用者への負荷を掛けずにサーバにおける障害発生を防止する分散システム、サーバ計算機、分散管理サーバ及び障害発生防止方法を提供することを目的とする。
本発明の第1の態様は、分散システムを含む。この分散システムは、同じアプリケーションを実行可能な第1のサーバ及び第2のサーバを備える。第1のサーバにおいてアプリケーションの障害が発生した場合に、第1のサーバは、アプリケーションの障害原因を特定する障害情報を生成する。第2のサーバは、障害情報に基づいて決定された、アプリケーションの障害発生を防止するための障害発生防止処理を実行する。
本発明の第2の態様は、サーバ計算機を含む。このサーバ計算機は、分散システムに設けられ、同じアプリケーションを実行可能な他のサーバ計算機と接続されたサーバ計算機である。サーバ計算機は、アプリケーションの障害が発生した場合に、アプリケーションの障害原因を特定する障害情報を生成する。そして、サーバ計算機は、他のサーバがアプリケーションの障害原因を特定する障害情報を生成した場合に、障害情報に基づいて決定された、前記アプリケーションの障害発生を防止するための障害発生防止処理を実行する。
本発明の第3の態様は、分散管理サーバを含む。この分散管理サーバは、同一のアプリケーションを実行可能な第1のサーバ及び第2のサーバを備えた分散システムに設けられている。分散管理サーバは、第1のサーバから、第1のサーバにおけるアプリケーションの障害原因を特定する障害情報を受信した場合に、第2のサーバにおいてアプリケーションの障害発生を防止するための障害発生防止処理を実行するために用いられる情報として、第2のサーバに障害情報を通知する。
本発明の第4の態様は、障害発生防止方法を含む。この障害発生防止方法は、同じアプリケーションを実行可能な第1のサーバ及び第2のサーバを備える分散システムにおいてアプリケーションの障害発生を防止する障害発生防止方法であり、以下のステップ(a)及び(b)を含む。
(a)前記第1のサーバにおいて前記アプリケーションの障害が発生した場合に、前記第1のサーバは、前記アプリケーションの障害原因を特定する障害情報を生成すること、
(b)前記第2のサーバは、前記障害情報に基づいて決定された、前記アプリケーションの障害発生を防止するための障害発生防止処理を実行すること。
本発明により、システム運用者への負荷を掛けずにサーバにおける障害発生を防止する分散システム、サーバ計算機、分散管理サーバ及び障害発生防止方法を提供することができる。
実施の形態1にかかる分散管理システムの第一の構成例を示すブロック図である。 実施の形態1にかかる分散管理システムの第二の構成例を示すブロック図である。 実施の形態2にかかる分散管理システムの構成例を示すブロック図である。 実施の形態2にかかるアプリケーションサーバにおける処理の一例を示したフローチャートである。 実施の形態2にかかるアプリケーションサーバにおける処理の一例を示したフローチャートである。 実施の形態2にかかる障害候補格納部に格納されるデータのイメージ図である。 実施の形態2にかかる分散管理サーバにおける処理の一例を示したフローチャートである。 実施の形態2にかかる障害情報記憶部に格納されるデータ例のイメージ図である。 実施の形態2にかかるアプリケーションサーバが実行する監視処理の一例を示したフローチャートである。 実施の形態2にかかる、デッドロック障害発生防止のためのリクエスト処理制御例のイメージ図である。 関連技術にかかる、デッドロック障害が発生しうる場合のリクエスト処理制御のイメージ図である。 実施の形態2にかかる、時刻t1における障害情報記憶部16内のデータ例が示された表である。 実施の形態2にかかる、時刻t2における障害情報記憶部16内のデータ例が示された表である。 実施の形態2にかかる、時刻t3における障害情報記憶部16内のデータ例が示された表である。 実施の形態2にかかる、過剰なメモリ消費の障害発生防止のためのリクエスト処理制御例のイメージ図である。 関連技術にかかる、過剰なメモリ消費の障害が発生しうる場合のリクエスト処理制御のイメージ図である。 実施の形態2にかかる、時刻t4における障害情報記憶部16内のデータ例が示された表である。 実施の形態2にかかる、時刻t5における障害情報記憶部16内のデータ例が示された表である。 実施の形態2にかかる、時刻t6における障害情報記憶部16内のデータ例が示された表である。 実施の形態2にかかる、過剰なCPU消費の障害発生防止のためのリクエスト処理制御例のイメージ図である。 関連技術にかかる、過剰なCPU消費の障害が発生しうる場合のリクエスト処理制御のイメージ図である。
実施の形態1
以下、図面を参照して本発明の実施の形態1について説明する。図1は、実施の形態1にかかる分散システム1の構成例を示すブロック図である。
分散システム1は、同じアプリケーションを実行可能なサーバ計算機2(第1のサーバ)及びサーバ計算機3(第2のサーバ)を備える分散システムである。分散システム1は、例えばクラウド・コンピューティング等の分散処理システムである。分散システム1が備えるサーバ計算機の数は2個に限られず、3個以上であってもよい。サーバ計算機2、3は、同一のアプリケーションであるアプリケーション4、5をそれぞれ実行可能な状態で格納している。
サーバ計算機2は、自身が実行するアプリケーション4の障害が発生した場合に、そのアプリケーション4の障害原因を特定する障害情報を生成する。ここで障害情報とは、例えばアプリケーション4において障害を生じさせたコンポーネントや、それに付随するインタフェースといったものを示す。
サーバ計算機3は、サーバ計算機2が生成した障害情報に基づいて決定された、アプリケーション5の障害発生を防止するための障害発生防止処理を実行する。
例えば、サーバ計算機2の障害が、サーバ計算機2のクライアントからのリクエストに基づいて発生したものであり、サーバ計算機2がその障害にかかる障害情報を生成したとする。このとき、サーバ計算機3は、その障害情報に基づき、サーバ計算機3のクライアントからのリクエストをモニタリングすることにより、障害発生防止処理を実行する。モニタリングの例として、サーバ計算機3は、サーバ計算機2に障害が発生したときにクライアントからリクエストされたアプリケーションの機能と同じ機能が、自身のクライアントからリクエストされているか否かを判定する。そして、同じ機能が自身のクライアントからリクエストされた場合には、その機能の実行を停止する等して、サーバ計算機2と同じ障害が発生することを防止する。
以上に説明したような処理を分散システム1が実行することにより、分散システム1は、システム運用者が何らかの処理を実行することなく(システム運用者への負荷を掛けずに)、サーバにおける障害発生を防止することができる。
<変形例1>
上述のサーバ計算機2は、サーバ計算機3の実行する処理をさらに実行してもよい。すなわち、サーバ計算機2は、アプリケーション4の障害が発生した場合に、アプリケーション4の障害原因を特定する障害情報を生成する。そしてサーバ計算機2は、サーバ計算機3がアプリケーション5の障害原因を特定する障害情報を生成した場合に、その障害情報に基づいて決定された、前記アプリケーションの障害発生を防止するための障害発生防止処理を実行する。サーバ計算機3も、同様にサーバ計算機2の実行する処理を実行してもよい。つまり、サーバ計算機は、自身に障害が発生した場合に他のサーバ計算機が障害発生防止処理を実行するために必要な障害情報を生成するだけでなく、他のサーバ計算機が障害情報を生成した場合にもその障害情報に基づいた障害発生防止処理を実行することができる。このようなサーバ計算機が分散システム1に備わることにより、分散システム1における障害発生防止をより効率的にすることができる。
<変形例2>
上述の分散システム1は、サーバ計算機2、3の他に、分散システム1を管理する分散管理サーバ6が設けられていてもよい。図2は、そのような分散システム1の構成例を示すブロック図である。分散管理サーバ6は、分散システム1においてサーバ計算機2、3と接続されている。サーバ計算機2、3の説明については図1と同様である。
分散管理サーバ6は、サーバ計算機2から、サーバ計算機2におけるアプリケーションの障害原因を特定する障害情報を受信する。分散管理サーバ6は、サーバ計算機3においてアプリケーション5の障害発生を防止するための障害発生防止処理を実行するために用いられる情報として、サーバ計算機3に障害情報を通知する。以上の処理を実行することにより、分散管理サーバ6は、サーバ計算機3における障害発生を防止することができる。
ここで、サーバ計算機3が実行する障害発生防止処理は、サーバ計算機3が障害情報に基づいてその処理内容を決定してもよいし、分散管理サーバ6が障害情報に基づいてその処理内容を決定してもよい。
実施の形態2
以下、図面を参照して本発明の実施の形態2について説明する。図3は、実施の形態2にかかる分散管理システム10の構成例を示すブロック図である。
分散管理システム10は、アプリケーションサーバ11A、11B、11C、分散管理サーバ27及びクライアントアプリケーション34A、34B、34Cを備える。なお、以下ではアプリケーションサーバ11A、11B、11Cを総称してアプリケーションサーバ11と記載し、クライアントアプリケーション34A、34B、34Cを総称してクライアントアプリケーション34と記載する。
アプリケーションサーバ11は、分散管理システム10における業務アプリケーションの実行基盤の役割を果たす。アプリケーションサーバ11は、CPU、メモリなどのリソースを備えるサーバ計算機において実行されるソフトウェアである。アプリケーションサーバ11は、リクエスト受付部12、リクエスト解析部13、運用リクエスト受付部14、障害情報受信部15、障害情報記憶部16、記憶装置17、障害イベント発行部18及びアプリケーション実行制御部19を有する。アプリケーションサーバ11A〜11Cは分散管理システム10のネットワーク上において分散配置され、それぞれが同じ構成を有する。
リクエスト受付部12は、クライアントアプリケーション34を介して送信されたシステム利用者からの要求(リクエスト)を受け付ける。
リクエスト解析部13は、リクエスト受付部12が受け付けたリクエストの詳細情報を解析する。
運用リクエスト受付部14は、分散管理サーバ27からアプリケーションサーバ11に対して要求された運用管理のためのリクエストを受け付ける。
障害情報受信部15は、他のアプリケーションサーバ内で発生した障害情報を分散管理サーバ27から受信する。
障害情報記憶部16は、障害情報受信部15が受信した障害情報を内部のメモリに保持する。記憶装置17は、障害情報データを非一時的に保持する記憶装置であり、障害情報記憶部16は障害情報を必要に応じて記憶装置17に格納する。
障害イベント発行部18は、アプリケーションサーバ11が有するアプリケーションで発生した障害情報を、分散管理サーバ27を介して接続される他のアプリケーションサーバに送信する。
アプリケーション実行制御部19は、アプリケーションサーバ11が有するアプリケーションの実行を制御する。アプリケーション実行制御部は、実行管理部20、障害監視部21、障害解析部22、障害分析部23、障害候補格納部24、障害情報検索部25及びコンポーネント(アプリケーションコンポーネント)26を有する。以下では、コンポーネント26A、26B、26Cを総称してコンポーネント26と記載する。
実行管理部20は、アプリケーション実行制御部19で動作するコンポーネント26の実行状況を管理する。具体的には、実行管理部20は、アプリケーションが呼び出し中であることを示す情報や、現に実行されているリクエスト及びそのリクエストを実行しているスレッドの情報を管理している。
障害監視部21は、アプリケーションサーバ11が有するアプリケーションの障害を監視する。例えば障害監視部21は、プロセスのスレッド情報の一覧(スレッドダンプ)や、メモリ使用量、CPU使用率などの各種リソース情報を採取する。
障害解析部22は、障害監視部21によって検知された障害の内容を解析する。具体的には、障害解析部22は、障害監視部21が採取した各種リソース情報から、コンポーネントの識別名(コンポーネント名)及びそのインタフェース名を抽出する。
障害分析部23は、障害解析部22が解析により抽出した情報を基に、発生した障害に関する詳細な分析や、障害の予測に関する演算を行う。
障害候補格納部24は、障害分析部23で予測された障害に関する情報を格納する。この情報は障害分析部23により更新される。
障害情報検索部25は、障害情報記憶部16を参照し、アプリケーションに対する障害情報の有無を検索する。
コンポーネント26は、実際にアプリケーションサーバ11が有するアプリケーション(アプリケーションサーバの計算機が実行可能な状態で格納しているアプリケーション)を構成しており、業務ロジック(ビジネスロジック)が実装されている。コンポーネント26は、アプリケーション実行制御部19上で動作する。アプリケーションサーバ11A〜11Cが備えるアプリケーションは全て同じものであるため、アプリケーションサーバ11A〜11Cは同じコンポーネント26A〜26Cを備える。なお、コンポーネント26A〜26Cは同じアプリケーションを構成していなくともよい。
分散管理サーバ27は、分散管理システム10のネットワーク構成上に分散配置された各アプリケーションサーバを統合的に管理する専用のサーバである。システム管理者は、分散管理サーバ27を用いることにより分散管理システム10を管理することができる。分散管理サーバ27は、アプリケーション格納部28、アプリケーション情報管理部29、障害イベント受信部30、運用操作発行部32及び障害情報発行部33を有する。
アプリケーション格納部28は、アプリケーションサーバ11に備えられたアプリケーションと同一のアプリケーションを保持する。
アプリケーション情報管理部29は、アプリケーションサーバ11に備えられたアプリケーションの詳細情報(バージョン情報など)を管理する。
障害イベント受信部30は、各アプリケーションサーバの障害イベント発行部18によって発行された障害情報を含むイベントを受信する。障害イベント受信部30は、受信したイベントに基づいて、アプリケーションサーバ11内で発生した障害の内容を解析するイベント解析部31を有する。
運用操作発行部32は、管理下のアプリケーションサーバ11に対して任意の運用操作要求を通知する。
障害情報発行部33は、特定のアプリケーションサーバ11の障害解析部22によって抽出された障害情報を、管理下のアプリケーションサーバ11に通知する。
クライアントアプリケーション34は、システム利用者(クライアント)がアプリケーションサーバに備えられたアプリケーションの業務ロジックを呼び出す、クライアント側のアプリケーションである。
なお、様々な処理を行う機能ブロックとして図3に記載されたアプリケーションサーバ1及び分散管理サーバ27の各要素は、ハードウェア的には、CPU、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。
以下、実施の形態2における分散管理システム10の動作の実施例について、図面を用いて詳細に説明する。
まず、アプリケーションサーバ11における基本的な処理の流れについて示す。
アプリケーションサーバ11は、Webブラウザなどのクライアントアプリケーション34からのリクエストを、リクエスト受付部12によって受信する。
リクエスト解析部13は、リクエスト受付部12が受信したリクエストを解析して、リクエストによって呼び出す対象のコンポーネント26及びそのインタフェース(メソッド)情報を抽出する。リクエスト解析部13は、抽出した結果をパラメータとして、アプリケーション実行制御部19に転送する。
アプリケーション実行制御部19は、アプリケーションが呼び出し中であることを示す情報を実行管理部20に格納後、リクエストの対象となるコンポーネント26のインタフェースを用いて業務ロジックを実行する。
業務ロジックの実行が終了すると、アプリケーション実行制御部19は、実行管理部20に格納した情報を削除する。この一連の処理が、リクエスト単位でアプリケーションサーバ11を動作するプロセスのスレッドにより実行される。
また、分散管理サーバ27は、予めシステム運用者の運用作業によって、分散配置されたアプリケーションサーバ11の基本情報(ホスト名など)や、各アプリケーションサーバ11に備えられたアプリケーションの構成情報(アプリケーション名、バージョン名など)を適切に管理する。分散管理サーバ27は、さらに、管理下の全てのアプリケーションサーバ11に対して、アプリケーション配備・更新や、アプリケーションサーバの設定変更などを指示することができる。
さらに、実施の形態2におけるアプリケーションサーバ11においては、次のような障害検出に対する設定項目がある。
1.「デッドロック」検出時のリカバリアクション(リカバリ処理)
この項目では、アプリケーションの呼び出し期間でデッドロックが検出された場合のアプリケーションサーバ11に対するリカバリ操作が指定されている。実施の形態2では、少なくとも「アプリケーションサーバの再起動」、「旧バージョンへのアプリケーションのダウングレード」がリカバリ操作の選択肢にある。
2.「過剰なメモリ消費」と判定するためのメモリ使用率の閾値
この項目では、過剰にメモリが消費されたと判断するためのアプリケーションサーバ11に対するメモリ使用率が設定されている。実際のアプリケーションサーバ11のメモリ使用率がこの項目における設定値以上のメモリ使用率に達した場合、アプリケーションサーバ11は、過剰なメモリ消費が発生したものと判断する。
3.「過剰なメモリ消費」検出時の原因と判断するための発生回数の閾値
この項目では、過剰にメモリが消費された原因と判断するための該当コンポーネント及びインタフェース名のエントリ回数(障害発生回数)が指定されている。指定された回数以上エントリがされた場合、アプリケーションサーバ11は、そのエントリを過剰なメモリ消費の原因と判断する。
4.「過剰なメモリ消費」検出時のリカバリアクション
この項目は、過剰なメモリ消費が検出された際のアプリケーションサーバに対するリカバリ操作を選択するための項目である。ここでは、少なくとも「強制GC(Garbage Collection)の実行」、「旧バージョンへのアプリケーションのダウングレード」がリカバリ操作の選択肢にある。
5.「過剰なCPU消費」と判定するためのCPU使用率の閾値
この項目は、過剰にCPUが消費されたと判断するためのアプリケーションサーバ11に対するCPU使用率が設定された項目である。実際のアプリケーションサーバ11のCPU使用率が設定値以上のCPU使用率に達した場合、アプリケーションサーバ11は、過剰なCPU消費が発生したと判断する。
6.「過剰なCPU消費」検出時の原因と判断するための発生回数の閾値
この項目では、過剰にCPUが消費された原因と判断するための該当アプリケーションコンポーネント及びインタフェース名のエントリ回数が指定されている。指定された回数以上エントリがされた場合、アプリケーションサーバ11は、それを過剰なCPU消費の原因と判断する。
7.「過剰なCPU消費」検出時のリカバリアクション
過剰なCPU消費が検出された際のアプリケーションサーバに対するリカバリ操作を選択する。ここでは、少なくとも「処理優先度の変更」、「旧バージョンへのアプリケーションのダウングレード」がリカバリ操作の選択肢にある。
以上の設定項目は、予めシステム運用者またはアプリケーションサーバ11の規定により適切な値(基準)が設定されている。そして、上述したアプリケーションに対する障害をアプリケーションサーバ11は次の方法によって検知する。例えば、アプリケーションサーバ11自身が、OS(Operating System)又はプログラムの実行環境が提供するAPI(Application Programming Interface)を用いて、各種リソースの消費状況や障害の発生状況を一定間隔で監視する。あるいは、そのような障害の発生を内部イベントとして発行する実行環境において、アプリケーションサーバ11のアプリケーション実行制御部19が同イベントを受信することにより障害検知を実現する。
図4A、図4Bは、アプリケーションサーバ11における処理の一例を示したフローチャートである。以上の説明を前提事項として、図4A、図4Bを用いて、アプリケーションサーバ11内で障害が発生した場合にアプリケーションサーバ11が実行する処理について説明する。
上述のような方法により、アプリケーションサーバ11内での障害が検知されると、アプリケーションサーバ11の障害監視部21は、プロセスのスレッド情報の一覧や、メモリ使用量、CPU使用率などの各種リソース情報を採取する(ステップS11)。
アプリケーション実行制御部19は、障害監視部21が採取した各種リソース情報を障害解析部22によって解析することにより、発生した障害の種類(障害の原因)を特定する(ステップS12)。
アプリケーション実行制御部19は、障害解析部22が特定した障害の種類がデッドロックか、又は処理中のリクエスト処理数が1であるか否かを判定する(ステップS13)。アプリケーション実行制御部19は、実行管理部20に格納された、現に実行されているリクエストの情報を参照することにより、処理中のリクエスト処理数が1であるか否かを判定する。
障害解析部22が特定した障害の種類がデッドロックの場合、又は処理中のリクエスト処理数が1の場合には(ステップS13のYes)、アプリケーション実行制御部19は、業務ロジックが呼び出された対象コンポーネントの識別名(コンポーネント名)及びそのインタフェース名をスレッドのスタック情報から抽出する。そしてアプリケーション実行制御部19は抽出した情報を基に、次の情報を含めた障害イベントを、障害イベント発行部18を介して分散管理サーバに対して発行する(ステップS14)。
・コンポーネント名(識別名)
・インタフェース名(メソッド名)
・障害の種類(デッドロック、過剰なCPU消費、過剰なメモリ消費、など)
・関連コンポーネント名(識別名)
・関連インタフェース名(メソッド名)
・リカバリアクション
なお、関連コンポーネント名及び関連インタフェース名は、業務ロジックが呼び出された対象コンポーネントのコンポーネント及びそのインタフェースに関連して障害を発生させると考えられるコンポーネント及びインタフェースを記載したものである。処理中のリクエスト処理数が1の場合には、業務ロジックが呼び出された対象コンポーネントのコンポーネント及びそのインタフェースのみがコンポーネント名及びインタフェース名に記載され、関連コンポーネント名及び関連インタフェース名には何も記載されない。
障害解析部22が特定した障害の種類がデッドロックではなく、かつ処理中のリクエスト処理数が複数の場合には(ステップS13のNo)、障害解析部22は、採取したスレッドのスタック情報を順に解析する。解析においては、障害解析部22は、スレッドのスタック情報から、コンポーネントの識別名(コンポーネント名)及びそのインタフェース名を抽出する(ステップS15)。障害分析部23は、障害解析部22が以上の解析で抽出した情報を基に、障害を分析する(ステップS16)。ここで、障害解析部22における情報抽出処理(ステップS15)と、障害分析部23における障害分析処理(ステップS16)は、処理中のリクエスト数分だけループして実行される。
図4Bを用いて、障害分析部23における障害分析処理(ステップS16)の詳細について説明する。障害の分析において、障害分析部23は、障害候補格納部24に、障害解析部22が抽出したコンポーネント名及びインタフェース名の対のデータが、候補データとしてエントリされているか否かをチェックする(ステップS17)。
障害候補格納部24に当該データが候補データとしてエントリ済みの場合は(ステップS17のYes)、障害分析部23は、そのデータを障害候補格納部から取得する(ステップS18)。
障害候補格納部24に当該データが候補データとしてエントリされていない場合は(ステップS17のNo)、障害分析部23は新たな障害要因の候補として、コンポーネントの識別名及びインタフェース名をキーとしてエントリを作成する(ステップS19)。このとき、障害分析部23は検知した障害の種類に合わせて、上述した障害検出のための設定項目により指定された閾値やリカバリアクションなどのパラメータをエントリに格納する。
障害分析部23は、ステップS18及びステップS19のいずれの場合においても、障害解析部22が抽出したコンポーネント名及びインタフェース名における障害発生の発生回数を1加算する(ステップS20)。
図5は、障害候補格納部24に格納されるデータのイメージ図である。障害候補格納部24においては、コンポーネント名及びインタフェース名に対応して、障害の種類、発生回数、閾値及びリカバリアクションが格納されている。ここで発生回数とは、当該コンポーネントのインタフェースの呼び出しのときに、障害監視部21が何らかの障害を検知することによって、障害の要因候補としてエントリされた回数を示す。
図5における閾値とは、上述したように、該当の障害が発生していると判断するための条件である。例えば、アプリケーションの障害の種類がメモリの過剰な消費やCPU負荷などである場合には、障害分析部23は、並行して複数動作するアプリケーションスレッドのどのスレッドが直接的な原因であるかを導くことが難しい。この場合には、障害発生となっている原因箇所を判断するために、統計的な値と条件を用いる必要がある。閾値は、原因箇所の判断材料として用いられる。
障害分析部23は、障害候補格納部24に格納されたデータを参照して、コンポーネント名及びインタフェース名の各々において、障害発生の発生回数と、対応する閾値とを比較する。そして、障害発生の発生回数が閾値以上であるか否かを判定する(ステップS21)。
障害発生の判断条件となる発生回数が、閾値に達した(又は閾値を超えた)場合には(ステップS21のYes)、障害分析部23は、該当コンポーネントのインタフェースの呼び出しが障害の原因と判断(特定)する。そして障害分析部23は、その情報を用いて分散管理サーバに障害イベントを発行するための処理を開始する。イベントの内容については、上述した通りである。発行される障害イベントにおけるコンポーネント名及びインタフェース名には、障害分析部23が障害原因と判断したコンポーネント(第1コンポーネント)及びインタフェース(第1インタフェース)の名前が記載される。
このとき、障害分析部23は、障害原因として判断された(閾値を超えた)エントリ以外で、そのときに閾値を超えていないが最も発生回数が多かったエントリ(2番目に障害発生回数が多かったエントリ)にかかるコンポーネント(第2コンポーネント)及びインタフェース(第2インタフェース)を併せて障害候補として抽出する(ステップS22)。この障害候補は、スレッド処理を制御する対象となるものである。
ここで、障害の原因として判断されたエントリ以外で、最も発生回数が多かったエントリを障害候補として抽出する理由は、障害の要因となるアプリケーションのコンポーネント間の関係性を導き出すためである。例えば、CPUの過剰消費が発生する場合、特定のコンポーネントのインタフェースの呼び出しが原因ではなく、複数のコンポーネントのインタフェースの呼び出しが重なることが原因になることがある。呼び出しにより実行される処理が複雑で、CPUを大量に消費するロジックであっても、単体の呼び出しであれば(一時的に負荷は高くなっても)業務システムが正常に稼働する許容範囲に収まるようなインタフェースが単独で呼び出された場合には、CPUの過剰消費は発生しない。しかし、そのようなインタフェースの呼び出しが複数重なる場合においては、CPUの過剰消費が発生してしまう。
ただし、インタフェースの呼び出しが複数重なる場合であっても、アプリケーションの構成やアプリケーションサーバのマシンスペック等によって障害に至るかどうかは異なる。そこで、このような関係性を業務システムの稼働中に導き出すことにより、より精度の高い障害候補の検出とその発生防止が可能になる。これは、CPUの過剰消費だけでなく、後述するメモリの過剰消費の場合においても同様である。
なお、単体での障害の発生回数が閾値を超えているコンポーネントが複数ある場合も考えられる。このように、特定のコンポーネントにおいて障害発生回数が閾値を超えたことを判定したときに、既に閾値越えが発生しているコンポーネントのインタフェースがある場合は、障害分析部23は、ステップS22においてそのコンポーネント(第2コンポーネント)及びインタフェース(第2インタフェース)も併せて障害候補として抽出する。このように、障害分析部23が抽出する障害候補は1つに限らず、複数であってもよい。
さらに、特定のコンポーネント及びインタフェースにおいて、CPUの過剰消費についての障害発生回数が閾値を超えた場合に、別のコンポーネント及びインタフェースにおいてメモリの過剰消費についての障害発生回数が閾値を超えてしまうことが考えられる。このような場合には、メモリの過剰消費が発生した別のコンポーネント(第2コンポーネント)及びインタフェース(第2インタフェース)をステップS22において障害候補として抽出する。なお、メモリの過剰消費についての障害発生回数が閾値を超えた場合に、別のコンポーネント及びインタフェースにおいてCPUの過剰消費についての障害発生回数が閾値を超えてしまう場合が考えられる。その場合においても、CPUの過剰消費が発生した別のコンポーネント(第2コンポーネント)及びインタフェース(第2インタフェース)をステップS22において障害候補として抽出する。
なお、ステップS22において、障害候補として抽出するコンポーネント(第2コンポーネント)は、障害分析部23が障害原因と判断したコンポーネント(第1コンポーネント)と同じものであってもよい。ただし、障害分析部23が障害原因と判断したインタフェース(第1インタフェース)と、障害候補として抽出するインタフェース(第2インタフェース)とは異なるインタフェースである。
以上、ステップS22において抽出した障害候補を障害イベントにおける関連コンポーネント名、および関連インタフェース名の情報(関連情報)として含め、障害イベント発行部18は障害イベントを発行する(ステップS23)。障害イベントの発行後、障害分析部23は、障害候補格納部24から当該エントリのデータを削除する(ステップS24)。
もし、発生回数が閾値を下回った場合には(ステップS21のNo)、当該エントリが障害の原因と判断するにはデータが不十分とみなして、障害分析部23は、障害イベントを発行するための処理を開始しない。障害分析部23は、障害候補格納部24のエントリデータを最新の情報に更新する(ステップS25)。更新された情報は、障害情報記憶部16を介して、記憶装置17に保存される。
以上の処理により、障害候補格納部24に蓄えられたエントリ情報は、対象のコンポーネント26が更新又は削除されるまで、各アプリケーションサーバ11によって継続して保持される。そのため、アプリケーションサーバ11の起動時には、記憶装置17に非一時的に格納された障害候補のデータが読み込まれ、再び障害候補格納部24に格納される。
図6は、分散管理サーバ27における処理の一例を示したフローチャートである。図6を用いて、これまでの処理によりアプリケーションサーバ11から分散管理サーバ27に対して障害イベントが発行されたときに、分散管理サーバ27が実行する処理について説明する。
まず分散管理サーバ27は、障害イベント受信部30によってアプリケーションサーバ11から障害イベントを受信後、それをイベント解析部31によって解析する(ステップS31)。イベント解析部31は、受信した障害イベントにおいて、障害に対するリカバリアクションが含まれているか否か(定義されているか否か)を判定する(ステップS32)。
障害イベントにおいて障害に対するリカバリアクションが含まれている場合には(ステップS32のYes)、運用操作発行部32は、障害イベントに含まれているリカバリアクションの内容に基づき、障害が発生したアプリケーションサーバ11Aに対してリカバリアクションの要求を発行する(ステップS33)。アプリケーションサーバ11Aは発行されたそのリカバリアクションの要求に基づき、リカバリアクションを実行する。これにより、アプリケーションサーバ11Aは障害からリカバリすることができる。
分散管理サーバ27は、障害に対するリカバリアクションが、旧バージョンへのアプリケーションのダウングレードであるか否かを判定する(ステップS34)。
もし、リカバリアクションが旧バージョンへのアプリケーションのダウングレードの場合には(ステップS34のYes)、分散管理サーバ27は、続けてアプリケーション情報管理部29に格納された配備済みのアプリケーションのバージョン情報を更新する(ステップS35)。これにより、分散管理サーバ27は、自身のアプリケーションのバージョン情報を、アプリケーションサーバ11のアプリケーションのバージョン情報と一致させる。
リカバリアクションがダウングレードではない場合には(ステップS34のNo)、分散管理サーバ27は、イベント解析部31によって抽出されたアプリケーションのコンポーネント識別名とインタフェース名を基に、それを新たな障害情報として障害情報発行部33により、全ての管理対象となるアプリケーションサーバ11に送信する(ステップS36)。送信する情報は以下の通りである。
・コンポーネント名(識別名)
・インタフェース名(メソッド名)
・障害の種類(デッドロック、過剰なメモリ消費、過剰なCPU消費、など)
・関連コンポーネント名(識別名)
・関連インタフェース名(メソッド名)
なお、障害情報の発行処理(ステップS36)は、管理対象となるアプリケーションサーバ11の台数分だけループしてなされる。
各アプリケーションサーバ11の障害情報受信部15は、障害情報発行部33が発行した障害情報を受信する。アプリケーションサーバ11は、受信した障害情報を、障害情報記憶部16に格納後、記憶装置17に保存させる。それと共に、アプリケーションサーバ11は、システム利用者から送信されてくるリクエストの監視を速やかに開始する。
図7は、障害情報記憶部16に格納されるデータのイメージ図である。図7においては、コンポーネント名及びインタフェース名に対応して、障害の種類、関連するコンポーネント名及びインタフェース名(関連情報)が格納されている。
図8は、受信した障害情報に基づいてアプリケーションサーバ11が実行する監視処理の一例を示したフローチャートである。以下、図8を用いて、アプリケーションサーバ11が実行する監視処理について説明する。
監視の開始後、アプリケーションサーバ11内のアプリケーション実行制御部19は、リクエスト受付部12を介して、システム利用者からの要求に対するリクエスト(要求リクエスト)を受け付ける(ステップS41)。
アプリケーション実行制御部19は、障害情報検索部25によって、システム利用者からリクエストされたコンポーネントのインタフェースに関する障害情報がコンポーネント名及びインタフェース名として障害情報記憶部16に格納されているか否かをチェックする(ステップS42)。
障害情報が格納済みの場合は(ステップS42のYes)、さらにアプリケーション実行制御部19は障害情報から、リクエストされたコンポーネントのインタフェースに関連するアプリケーションのインタフェースの情報を参照する(ステップS43)。そして、アプリケーション実行制御部19は、障害情報において、関連するアプリケーション(関連アプリケーション)のインタフェースの情報が存在するか否かを判定する(ステップS44)。ここで関連アプリケーションとは、障害情報における「関連コンポーネント」が含まれるアプリケーションを意味する。
関連アプリケーションのインタフェースの情報(すなわち、障害情報における「関連インタフェース」の情報)が存在する場合には(ステップS44のYes)、アプリケーション実行制御部19は、それに該当するリクエスト(関連リクエスト)が、要求リクエストを処理するスレッド以外の他のスレッドにより実行中であるか否かを、実行管理部20が保持する情報によって判定する(ステップS45)。
関連リクエストが他のスレッドにより実行中であることを確認できた場合には(ステップS45のYes)、アプリケーション実行制御部19は、そのスレッドの実行が完了するまで後続のリクエスト(要求リクエスト)の実行を待機する(ステップS47)。そして、アプリケーション実行制御部19は、所定の時間が経過後、関連リクエストが他のスレッドにより実行中であるか否かを再度判定する(ステップS45)。
関連リクエストが他のスレッドにより実行中でない場合には(ステップS45のNo)、アプリケーション実行制御部19は、後続のリクエストに対するスレッドの処理を実行する(ステップS49)。すなわち、アプリケーション実行制御部19はリクエストを実行する。それ以前のステップS47においてアプリケーション実行制御部19が後続のリクエストの実行を待機する処理を実行した場合には、アプリケーション実行制御部19は、待機状態のリクエストに対するスレッドの処理を再開したことになる。
ステップS44において、関連コンポーネントのインタフェースの情報が存在しない場合には(ステップS44のNo)、アプリケーション実行制御部19は以下の処理を実行する。アプリケーション実行制御部19は、障害対象のコンポーネントのインタフェースに対するリクエスト(同一リクエスト)が要求リクエストを処理するスレッド以外の別のスレッドにより実行中か否かを、実行管理部20が保持する情報により判定する(ステップS46)。
同一リクエストが別スレッドにて実行中の場合には(ステップS46のYes)、アプリケーション実行制御部19は、当該スレッドの実行が完了するまで後続のリクエストの実行を待機する(ステップS48)。そして、アプリケーション実行制御部19は、所定の時間が経過後、同一リクエストが別スレッドにより実行中であるか否かを再度判定する(ステップS46)。
同一リクエストが別スレッドにより実行中でない場合には(ステップS46のNo)、アプリケーション実行制御部19は、同一リクエストに対するスレッドの処理を実行する(ステップS49)。すなわち、アプリケーション実行制御部19はリクエストを実行する。ステップS48においてアプリケーション実行制御部19が後続のリクエストの実行を待機する処理を実行した場合には、アプリケーション実行制御部19は、待機状態のリクエストに対するスレッドの処理を再開したことになる。
なお、ステップS47、S48における待機処理では、アプリケーション実行制御部19は、システム運用者又はアプリケーションサーバ11により指定されたパラメータを基に、一定期間を経過後、処理がタイムアウトされたと見なして呼び出し元に適切なエラーを返すことにより図8の処理を終了してもよい。
アプリケーションサーバ11Aにおいて発生した障害がデッドロックである場合には、アプリケーションサーバ11Bは、ステップS46及びS48の処理を実行しなくてもよい。デッドロックの障害は、リクエストにかかるコンポーネントのインタフェースと、それとは別のコンポーネントのインタフェースとの間で同時に排他制御が実行されることにより発生する。そのため、リクエストにかかるコンポーネントのインタフェースが既に実行されても、デッドロックの障害が起きないと考えられるからである。
上述の監視処理は、対象のアプリケーションが更新されるまで、各アプリケーションサーバ11によって継続して実施される。従って、それまでの間にアプリケーションサーバ11の再起動が行われると、障害情報記憶部16にあるメモリ上の障害情報は失われてしまう。そのため、アプリケーションサーバ11の起動時には、記憶装置17から非一時的に格納された障害情報が読み込まれる。その際に読み込まれた障害情報は、アプリケーション実行制御部19によって再び障害情報記憶部16に格納される。
以下、上述の図4、図6及び図8の処理について、具体的な状況を想定してさらに説明する。
<デッドロックが発生した場合>
ここでは、特定のアプリケーションサーバ11Aにおいて、業務システム稼働中に、アプリケーションの欠陥を起因として、複数のリクエストを並行して処理中のスレッド間でデッドロックが発生した場合を考える。ここで、アプリケーションサーバ11において、デッドロックの対象となったアプリケーションのコンポーネントをそれぞれA、B、呼び出しインタフェースをそれぞれAm、Bmとする。またデッドロック発生時には、リカバリアクションとして当該アプリケーションサーバの再起動が予め定義されている。
アプリケーションサーバ11A内でデッドロックが発生すると、アプリケーションサーバ11Aにおける障害監視部21は、デッドロックの発生元となったリクエストのスレッドに対するスタック情報(スレッドの呼び出しの流れが記載された情報)を取得する。取得した情報から、アプリケーションサーバ11は、障害解析部22によりデッドロックの対象(障害原因)となったアプリケーションのコンポーネント名(A)とインタフェース名(Am)、それに対応する関連コンポーネント名(B)と関連インタフェース名(Bm)について障害の種類を「デッドロック」とした情報と、デッドロックの対象となったアプリケーションのコンポーネント名(B)とインタフェース名(Bm)、それに対応する関連コンポーネント名(A)と関連インタフェース名(Am)について障害の種類を「デッドロック」とした情報とを含む障害イベントを分散管理サーバ27に発行する。ここで特定されるリカバリアクションは、「サーバ再起動」である。
障害イベントを受け取った分散管理サーバ27は、障害イベントの内容から、イベント解析部の解析によりコンポーネントA、BにおけるインタフェースAm、Bm間でのデッドロックの発生、及びサーバ再起動をリカバリアクションとする障害情報を抽出する。分散管理サーバ27は、障害が発生したアプリケーションサーバ11Aを再起動させた後、管理下の全てのアプリケーションサーバ11に障害情報を送信する。この障害情報には、コンポーネント名としてコンポーネントA、B、インタフェース名としてインタフェースAm、Bmが含まれている。
障害情報を受け取ったアプリケーションサーバ11Bは、それを障害情報記憶部16に格納すると共に、速やかにリクエストの監視を開始する。その後、アプリケーションサーバ11Bは、リクエスト受付部12によって、クライアントアプリケーション34から出力された、アプリケーションのコンポーネントAのインタフェースAmの呼び出しのためのリクエストを処理する。
リクエスト受付部12は、リクエストをアプリケーション実行制御部19に転送する。このとき、アプリケーション実行制御部19の障害情報検索部25は、コンポーネントAのインタフェース情報Amが障害情報記憶部16に存在することを確認する。確認後、アプリケーション実行制御部19は、実行管理部20において既に関連コンポーネントBの関連インタフェースBmの呼び出しが、別のスレッドにより実行中として管理されているかどうかを問い合わせる。
もし、インタフェースBmの呼び出しが別のスレッドにより実行中の場合は、アプリケーション実行制御部19は、そのスレッドによる処理が完了するまで、コンポーネントAのインタフェースAmを呼び出すための処理を待機する。そして、コンポーネントBのインタフェースBmの呼び出し処理が完了した後、アプリケーション実行制御部19は、コンポーネントAのインタフェースAmの呼び出しに対する待機を解除し、処理を再開する。
図9Aは、以上に示したデッドロック障害発生防止のためのリクエスト処理制御のイメージ図である。アプリケーションサーバ11Bにおいて、コンポーネントAのインタフェースAmに対するリクエストが、コンポーネントBのインタフェースBmに対するリクエストの処理スレッドを実行中に、アプリケーション実行制御部19に対してなされる。
ここで、コンポーネントAのインタフェースAmに対するリクエストの処理スレッドを実行した場合、コンポーネントCのインタフェースCm1に対するリクエストがなされる。コンポーネントBのインタフェースBmに対するリクエストの処理スレッドを実行した場合、コンポーネントCのインタフェースCm2に対するリクエストがなされる。このとき、両方のインタフェース(メソッド)から相互に2つの排他制御がなされると、処理の実行タイミングによっては、インタフェースCm1とインタフェースCm2との間でデッドロックが発生してしまう。
上述の処理では、コンポーネントBのインタフェースBmに対するリクエストが終了するまで、コンポーネントAのインタフェースAmに対するリクエストの実行を待機する。これにより、両方のインタフェースから相互に2つの排他制御がなされず、インタフェースCm2の実行後にインタフェースCm1が実行される。換言すれば、インタフェースCm1とインタフェースCm2とは別々のタイミングで実行される。このため、デッドロックの発生を回避することができる。
図9Bは、デッドロック障害が発生しうる場合(従来技術の場合)のリクエスト処理制御のイメージ図である。図9Bでは、コンポーネントAのインタフェースAmに対するリクエストの実行が待機されないため、相互に2つの排他制御が伴い、インタフェースCm1とインタフェースCm2との間でデッドロックが発生してしまった場合が示されている。
なお、アプリケーションサーバ11Bだけではなく、障害情報を受け取ったアプリケーションサーバ11Cも、同様の処理を実行する。
上述の状況では、異なるコンポーネントA、Bのインタフェース間でデッドロックが起こることを説明したが、同一のコンポーネントにおける異なるインタフェース間でデッドロックが発生することも考えられる。例えば、コンポーネントAのインタフェースAm1に対するリクエストの処理スレッドを実行した場合に、共通コンポーネントCのインタフェースCm1に対するリクエストがなされ、コンポーネントAのインタフェースAm2に対するリクエストの処理スレッドを実行した場合に、共通コンポーネントCのインタフェースCm2に対するリクエストがなされることが考えられる。このとき、両方のインタフェースAm1、Am2から相互に2つの排他制御がなされる。ここで、処理のタイミングによっては、それらの排他制御が交差する(同時に発生する)ような処理の流れになり、図9Bと同様の原理によりデッドロックが発生する。このように、同一のコンポーネントAの異なるインタフェースAm1、Am2を各スレッドにおいて処理する過程で、互いに共通コンポーネントCに対する異なる排他制御が存在することが考えられる。
以上のデッドロックがアプリケーションサーバ11A内で発生した場合、障害監視部21の取得した情報から、アプリケーションサーバ11は、障害解析部22によりデッドロックの対象(障害原因)となったアプリケーションのコンポーネント名(A)とインタフェース名(Am1)、それに対応する関連コンポーネント名(A)と関連インタフェース名(Am2)について障害の種類を「デッドロック」とした情報と、デッドロックの対象となったアプリケーションのコンポーネント名(A)とインタフェース名(Am2)、それに対応する関連コンポーネント名(A)と関連インタフェース名(Am1)について障害の種類を「デッドロック」とした情報とを含む障害イベントを分散管理サーバ27に発行する。
発行された障害イベントに基づき、分散管理サーバ27が障害情報をアプリケーションサーバ11Bに送信する。アプリケーションサーバ11Bは、図9Aで説明したものと同様なデッドロック障害発生防止のためのリクエスト処理制御を実行する。例えば、インタフェースAm1の呼び出しのためのリクエストがクライアントアプリケーション34からあり、既にインタフェースAm2の呼び出しが別のスレッドにおいて実行されている場合に、アプリケーション実行制御部19はそのスレッドによる処理が完了するまでインタフェースAm1を呼び出すための処理を待機する。そして、インタフェースAm2の呼び出し処理が完了した後、アプリケーション実行制御部19は、インタフェースAm1の呼び出しに対する待機を解除し、処理を再開する。
<メモリの過剰消費が発生した場合>
以下、もう一つの具体例を用いて、上述の図4、図6及び図8の処理についてさらに説明する。ここでは、特定のアプリケーションサーバ11Aにおいて、システム稼働中に、アプリケーションの欠陥を起因としてメモリの過剰な消費が発生した場合を考える。なお、アプリケーションサーバ11において、メモリを過剰に消費するアプリケーションのコンポーネントをA、そのインタフェースをAmとし、それ以外の(問題を含まない)コンポーネントをB〜E、それらのインタフェースをそれぞれBm〜Emとする。さらに、障害情報記憶部16内のデータにおいて、それらが障害発生の原因と判断するための発生回数の閾値が「3」であり、設定されたリカバリアクションが「強制GC」であると設定される。
いま、時刻t1においてアプリケーションサーバ11A内でメモリの過剰な消費が発生すると、障害監視部21は、リクエストを処理中のスレッドに対するスタック情報を取得する。アプリケーション実行制御部19は、取得した情報から、障害解析部22によって障害にかかるアプリケーションのコンポーネント名とインタフェース名を特定する。ここでは、次の情報が解析により得られたものとする。
[コンポーネント名:インタフェース名] A:Am、C:Cm、E:Em
このとき、障害分析部23は、障害情報記憶部16にそれぞれのエントリ情報を新たに格納する。また、それぞれのエントリの発生回数を1とする。
図10Aは、時刻t1における障害情報記憶部16内のデータが示された表である。障害情報記憶部16内のデータには、上述の通り、A:Am、C:Cm、E:Emにおいて、「過剰なCPU消費」の障害がそれぞれ1回発生したことが記憶されている。さらに、発生回数の閾値が「3」であり、リカバリアクションが「強制GC」であることも記憶されている。ここで、A:Am、C:Cm、E:Emのエントリの発生回数は、いずれも閾値は超えていない。そのため、障害イベント発行部18は、障害発生イベントを発行しない。
その後、時刻t2において、アプリケーションサーバ11A内で再びメモリの過剰な消費が発生する。ここでは、障害解析部22によって次の情報が解析により得られたものとする。
[コンポーネント名:インタフェース名] A:Am、B:Bm、C:Cm(以下、コンポーネント及びそれに対応するインタフェースを同様に表示する。)
このとき、障害分析部23は、上述と同様の処理を経て、障害情報記憶部16に格納されたデータに、エントリを追加・更新する。
図10Bは、時刻t2における障害情報記憶部16内のデータが示された表である。障害情報記憶部16内のデータには、「過剰なメモリ消費」の障害がA:Amにおいて2回、B:Bmにおいて1回、C:Cmにおいて2回、E:Emにおいて1回発生したことが記憶されている。ここで、A:Am、C:Cmの障害発生回数は2となるが、まだ閾値に達していないため、障害イベント発行部18は障害イベントを発行しない。
その後、時刻t3において、アプリケーションサーバ11A内で再びメモリの過剰な消費が発生する。ここでは、障害解析部22によって次の情報が解析により得られたものとする。
[コンポーネント名:インタフェース名] A:Am、D:Dm、E:Em
このとき、障害分析部23は、上述と同様の処理を経て、障害情報記憶部16に格納されたデータに、エントリを追加・更新する。
図10Cは、時刻t3における障害情報記憶部16内のデータが示された表である。障害情報記憶部16内のデータには、「過剰なメモリ消費」の障害がA:Amにおいて3回、B:Bmにおいて1回、C:Cmにおいて2回、D:Dmにおいて1回、E:Emにおいて2回発生したことが記憶されている。
ここで、A:Amにおいての障害発生回数は3となり、閾値に達している。そのため、障害分析部23は、A:Amをメモリの過剰な消費に伴う障害の原因と判断する。そして障害分析部23は、A:Amの次に発生回数が高かった、C:Cm、E:Emを、それぞれ障害の原因となるA:Amについての関連コンポーネント、関連インタフェース(関連情報)とみなす。そして、障害イベント発行部18は、障害の原因であるコンポーネント名及びインタフェース名(A:Am)、関連コンポーネント名及び関連インタフェース名(C:Cm及びE:Em)が示された障害イベントを分散管理サーバ27に発行する。
その後なされる処理、つまり分散管理サーバ27におけるリカバリアクションの実行及びアプリケーションサーバ11への障害情報の発行、ならびに各アプリケーションサーバ11における障害情報受信後の処理及びリクエスト処理スレッドの実行制御については、上述と同様である。
図11Aは、以上に示した過剰なメモリ消費の障害発生防止のためのリクエスト処理制御のイメージ図である。図11Aにおいては、アプリケーションサーバ11Bにおいて、コンポーネントAのインタフェースAmに対する複数のリクエストがアプリケーション制御部に対してなされる。
ここで、コンポーネントAのインタフェースAmが過剰にメモリを消費するインタフェースである場合、複数のリクエストによりインタフェースAmが呼び出されると、メモリ不足が発生してしまう。
アプリケーションサーバ11Bは、先になされたコンポーネントAのインタフェースAmに対するリクエストが終了するまで、後になされたコンポーネントAのインタフェースAmに対するリクエストの実行を待機する。これにより、アプリケーションサーバ11Bにおいては、複数のリクエストによる呼び出しが行われなくなるため、メモリ不足の発生を回避することができる。つまり、アプリケーションサーバ11Bは、コンポーネントAが持つインタフェースAmの実行を複数のスレッド間で同時に実行しないよう制御する。
なお、障害情報として、コンポーネントAが持つインタフェースAmの次に(2番目に)発生回数が多かった障害候補としてコンポーネントCのインタフェースCmがあり、それが別スレッドで実行中である場合が考えられる。この場合、アプリケーションサーバ11Bは、その処理が完了するまでコンポーネントAのインタフェースAmの実行を待機する。このように制御することで、複数のコンポーネントのインタフェースの呼び出しが原因となる障害の発生を未然に防ぐことが期待できる。障害候補として、既に閾値越えが発生しているコンポーネントのインタフェースが記録されている場合や、CPUの過剰消費についての障害発生回数が閾値を超えたコンポーネントのインタフェースが記録されている場合でも、同様の制御が実行できる。
なお、コンポーネントAが持つインタフェースAmの次に発生回数が多かった障害候補として、同じコンポーネントAの異なるインタフェースAm2が記載されていてもよい。この場合、インタフェースAm2が別スレッドで実行中であれば、アプリケーションサーバ11Bは、その処理が完了するまでインタフェースAmの実行を待機する。
図11Bは、過剰なメモリ消費の障害が発生しうる場合(従来技術の場合)のリクエスト処理制御のイメージ図である。図11Bでは、コンポーネントAのインタフェースAmに対するリクエストが複数なされることによりインタフェースが呼び出されてしまうため、メモリ不足の障害が発生してしまう。
<CPUの過剰消費が発生した場合>
以下、さらに一つの具体例を用いて、上述の図4、図6及び図8の処理についてさらに説明する。ここでは、特定のアプリケーションサーバ11Aにおいて、システム稼働中に、アプリケーションの欠陥を起因としてCPUの過剰な消費が発生した場合を考える。なお、アプリケーションサーバ11において、CPUを過剰に消費するアプリケーションのコンポーネントをA、そのインタフェースをAmとし、それ以外の(問題を含まない)コンポーネントをB〜E、それらのインタフェースをそれぞれBm〜Emとする。さらに、障害情報記憶部16内のデータにおいて、それらが障害発生の原因と判断するための発生回数の閾値が「3」であり、設定されたリカバリアクションが「強制GC」であると設定される。
いま、時刻t4においてアプリケーションサーバ11A内でCPUの過剰な消費が発生すると、障害監視部21は、リクエストを処理中のスレッドに対するスタック情報を取得する。アプリケーション実行制御部19は、取得した情報から、障害解析部22によって障害にかかるアプリケーションのコンポーネント名とインタフェース名を特定する。ここでは、次の情報が解析により得られたものとする。
[コンポーネント名:インタフェース名] A:Am、C:Cm、E:Em
このとき、障害分析部23は、障害情報記憶部16にそれぞれのエントリ情報を新たに格納する。また、それぞれのエントリの発生回数を1とする。
図12Aは、時刻t4における障害情報記憶部16内のデータが示された表である。障害情報記憶部16内のデータには、上述の通り、A:Am、C:Cm、E:Emにおいて、「過剰なCPU消費」の障害がそれぞれ1回発生したことが記憶されている。さらに、発生回数の閾値が「3」であり、リカバリアクションが「強制GC」であることも記憶されている。ここで、A:Am、C:Cm、E:Emのエントリの発生回数は、いずれも閾値は超えていない。そのため、障害イベント発行部18は、障害発生イベントを発行しない。
その後、時刻t5において、アプリケーションサーバ11A内で再びCPUの過剰な消費が発生する。ここでは、障害解析部22によって次の情報が解析により得られたものとする。
[コンポーネント名:インタフェース名] A:Am、B:Bm、C:Cm(以下、コンポーネント及びそれに対応するインタフェースを同様に表示する。)
このとき、障害分析部23は、上述と同様の処理を経て、障害情報記憶部16に格納されたデータに、エントリを追加・更新する。
図12Bは、時刻t5における障害情報記憶部16内のデータが示された表である。障害情報記憶部16内のデータには、「過剰なCPU消費」の障害がA:Amにおいて2回、B:Bmにおいて1回、C:Cmにおいて2回、E:Emにおいて1回発生したことが記憶されている。ここで、A:Am、C:Cmの障害発生回数は2となるが、まだ閾値に達していないため、障害イベント発行部18は障害イベントを発行しない。
その後、時刻t6において、アプリケーションサーバ11A内で再びCPUの過剰な消費が発生する。ここでは、障害解析部22によって次の情報が解析により得られたものとする。
[コンポーネント名:インタフェース名] A:Am、D:Dm、E:Em
このとき、障害分析部23は、上述と同様の処理を経て、障害情報記憶部16に格納されたデータに、エントリを追加・更新する。
図12Cは、時刻t6における障害情報記憶部16内のデータが示された表である。障害情報記憶部16内のデータには、「過剰なCPU消費」の障害がA:Amにおいて3回、B:Bmにおいて1回、C:Cmにおいて2回、D:Dmにおいて1回、E:Emにおいて2回発生したことが記憶されている。
ここで、A:Amにおいての障害発生回数は3となり、閾値に達している。そのため、障害分析部23は、A:AmをCPUの過剰な消費に伴う障害の原因と判断する。そして障害分析部23は、次に発生回数が高かった、C:Cm、E:Emを、それぞれ障害の原因となるA:Amについての関連コンポーネント、関連インタフェースとみなす。そして、障害イベント発行部18は、障害の原因であるコンポーネント名及びインタフェース名(A:Am)、関連コンポーネント名及び関連インタフェース名(C:Cm及びE:Em)が示された障害イベントを分散管理サーバ27に発行する。
その後なされる処理、つまり分散管理サーバ27におけるリカバリアクションの実行及びアプリケーションサーバ11への障害情報の発行、ならびに各アプリケーションサーバ11における障害情報受信後の処理及びリクエスト処理スレッドの実行制御については、上述と同様である。
図13Aは、以上に示した過剰なCPU消費の障害発生防止のためのリクエスト処理制御のイメージ図である。図13Aにおいては、アプリケーションサーバ11Bにおいて、コンポーネントAのインタフェースAmに対する複数のリクエストがアプリケーション制御部に対してなされる。
ここで、コンポーネントAのインタフェースAmが過剰にCPUを消費するインタフェースである場合、複数のリクエストによりインタフェースAmが呼び出されると、他のリクエストの処理遅延等が発生してしまう。
アプリケーションサーバ11Bは、先になされたコンポーネントAのインタフェースAmに対するリクエストが終了するまで、後になされたコンポーネントAのインタフェースAmに対するリクエストの実行を待機する。これにより、アプリケーションサーバ11Bは、複数のリクエストによる呼び出しが行われなくなるため、他のリクエストの処理遅延等の発生を回避することができる。つまり、アプリケーションサーバ11Bは、コンポーネントAが持つインタフェースAmの実行を複数のスレッド間で同時に実行しないよう制御する。
なお、障害情報として、コンポーネントAが持つインタフェースAmの次に(2番目に)発生回数が多かった障害候補としてコンポーネントCのインタフェースCmがあり、それが別スレッドで実行中である場合が考えられる。この場合、アプリケーションサーバ11Bは、その処理が完了するまでコンポーネントAのインタフェースAmの実行を待機する。このように制御することで、複数のコンポーネントのインタフェースの呼び出しが原因となる障害の発生を未然に防ぐことが期待できる。障害候補として、既に閾値越えが発生しているコンポーネントのインタフェースが記録されている場合や、メモリの過剰消費についての障害発生回数が閾値を超えたコンポーネントのインタフェースが記録されている場合でも、同様の制御が実行できる。
なお、コンポーネントAが持つインタフェースAmの次に発生回数が多かった障害候補として、同じコンポーネントAの異なるインタフェースAm2が記載されていてもよい。この場合、インタフェースAm2が別スレッドで実行中であれば、アプリケーションサーバ11Bは、その処理が完了するまでインタフェースAmの実行を待機する。
図13Bは、過剰なCPU消費の障害が発生しうる場合(従来技術の場合)のリクエスト処理制御のイメージ図である。図13Bでは、コンポーネントAのインタフェースAmに対するリクエストが複数なされることによりインタフェースが呼び出されてしまうため、他のリクエストの処理遅延等の障害が発生してしまう。
以上に記載した実施の形態2における分散管理システム10の処理をまとめる。障害が発生したアプリケーションサーバは、メモリやスレッド、CPUなどのリソース情報を分析して、アプリケーション障害の原因となる対象を、そのコンポーネントやインタフェースレベルで特定、または予測する。これにより、システム全体への影響を及ぼすアプリケーション障害を対処するにあたって、システム運用者が障害原因の特定(又は統計的な予測)をせずに済むため、システム運用者の負荷を軽減することができる。
そして、障害が発生したアプリケーションサーバは、その分析結果を他の同じ構成からなるアプリケーションサーバに発信することにより、障害情報を他のアプリケーションサーバと共有する。さらに、発信情報を受信したアプリケーションサーバは、他のアプリケーションサーバにおいて発生した障害と同様の障害発生を防止するために、受信した障害情報を蓄積する。そして、アプリケーションサーバは、蓄積した障害情報に基づいて、アプリケーションへのリクエストに対する監視を実行するほか、リクエストの実行順序やタイミングを制御する。
実施の形態2にかかる分散管理システム10の効果は、以下の通りである。第一に、分散配置された複数のアプリケーションサーバから構成されるシステムにおいて、アプリケーションの欠陥に伴いシステム全体に波及する恐れがある障害を、未然に防ぐことができる。その理由は、アプリケーションの欠陥による障害情報を他のアプリケーションサーバに転送することによって、障害情報が転送されたアプリケーションサーバは、同じ障害に遭遇しないようにアプリケーションの実行を制御できるようになるからである。
アプリケーションの欠陥は、デッドロックやメモリの障害のように、その発生条件は特定の処理パターンに基づくことが多い。そのため、そのパターンを分析して、事前にその障害パターンを発生させないようにアプリケーションサーバがアプリケーションの呼び出しを制御することにより、分散管理システム全体を安定的に動作させることができる。換言すれば、アプリケーションサーバは、将来的に発生し得る他のアプリケーションサーバで発生した障害と同様の障害箇所に特化した監視及び処置を実行することができる。この監視及び処置において、アプリケーションサーバは、アプリケーションに対するリクエストの実行順序やタイミングを制御する。
第二の効果は、システム管理者の負担を抑えられる点にある。その理由は、分散管理システム10により、システム運用者による作業を介入することなく、障害への(例えば暫定的な)対処を自動的に実施できるようになるからである。
一般的に、アプリケーションの欠陥が原因の障害は、根本的な解決にはアプリケーションプログラムの改修が必要である。すなわち、全てのアプリケーションサーバ上で動作中のコンポーネントを更新するまで、障害が再発する可能性がある。ここで、アプリケーションプログラムが改修され、そのテストを経てアプリケーションサーバ上のコンポーネントを更新するまでには、ある程度の期間を要する。
そのため、コンポーネント更新までの間、止むを得ずシステムを稼動し続けなければならない状況において同様の障害が発生した場合には、システム運用者によるアプリケーションサーバの再起動など、何らかの暫定的な対処作業が必要となる。また、この場合には、アプリケーションサーバの台数が増える程当該アプリケーションの欠陥に遭遇する可能性が高くなるため、システム運用者に過度な作業負荷を強いる可能性が高くなる。
しかしながら、実施の形態2にかかる分散管理システム10は、システム運用者に代わって、アプリケーションサーバ自身が障害の再発を防ぐようにアプリケーションの実行を制御する。このため、このようなシステム運用者による対処作業は、アプリケーションサーバの数に関わらず不要となる。
近年、クラウド・コンピューティング技術を用いたシステムモデルの構築が増加している。このようなシステムは、多数のネットワーク上に分散的に配置された大多数のサーバマシンから構成されていることが多い。また、サーバマシンを構成するアプリケーションサーバは、互いに同じ構成を有することが多い。このようなシステムは、大抵が負荷分散構成であるため、一台の(障害発生などに伴う)サーバの異常がシステム全体に影響を及ぼす(すなわちシステム全体の障害に発展する)ことにはなりにくい。
しかし、その上で動作する業務アプリケーションそのものに欠陥が含まれる場合に、それを起因とする障害が一台で発生すると、近いうちに他のアプリケーションサーバにおいても同様の障害が立て続けに発生する可能性がある。そうなると、障害が、システム全体としてのパフォーマンスの低下や、非稼働時間に影響する可能性がある。ひいては、障害がシステムのSLA(Service Level Agreement)などへの品質問題に発展する恐れがある。この場合、欠陥のアプリケーションを従来のバージョンにダウングレードするなどの処置を取らない限り、上述のシステム運用者による暫定対応は避けられない。かつ、対象のサーバ台数が多くなると、それだけそのような障害に遭遇する確率も高くなり、ひいては暫定対応のための作業コストが増大することに繋がる。
ただし、アプリケーションの欠陥は、上述の通り、その発生条件が特定の処理パターンに基づくことが多い。そのため、そのパターンを分析して、事前にその障害パターンを発生させないようにアプリケーションの呼び出しをアプリケーションサーバが制御することによって、システムを安定して稼動できる可能性が高い。一方で、アプリケーションの欠陥を修復するまでには、たいていの場合、類似問題を発生させないよう、十分な評価期間と作業コストを要する。
以上より、このような状況においては、できるだけシステム運用者への負荷を掛けない状態で、欠陥を含んだ状態のアプリケーションのままで、システムを可能な限り安定して稼動できるように制御する仕組みを構築する必要があると考えられる。この場合、処理性能が多少劣化しても、システムを可能な限り安定して稼動できる方が重要であると考えられる。このようにすることによって、障害に対する根本解決までの作業コストの増大及びシステムの非稼動に伴う経済的な損失を阻止するという重要な目的が達成できるためである。
上述の通り、特許文献1、2においては、クラウド・コンピューティングのように、アプリケーションサーバ等のサーバを複数配置した状況は考慮されていない。
具体的には、特許文献1にかかるシステムでは、独自の判断条件に基づいて障害情報を蓄積し、それに基づいて検出した障害情報を専用の管理者端末に転送している。しかしながら、アプリケーションサーバ等が分散配置された環境については考慮していない。一方、実施の形態2にかかる分散管理システムは、分散配置された環境に障害情報を転送し、さらにその障害情報を基に障害の発生を防止する仕組みを有している。
また、特許文献2にかかるシステムでは、独自の判断条件に基づいて障害情報を予測又は検知すると、コンポーネントを入れ替えることによってシステム全体の障害の発生を防止している。しかし、この処理は動作する代替コンポーネントが存在することが前提である。言い換えれば、そのようなコンポーネントが存在しなければ、システム全体の障害の発生を防止するという効果の恩恵は受けられない。一方、実施の形態2にかかる分散管理システム10では、コンポーネントの置換については考慮不要である。例えアプリケーションの欠陥を含んだままのコンポーネントであっても、分散管理システムはその欠陥部分に特定してアプリケーションの動作を制御した上で、コンポーネントをシステム障害が発生しないように最大限活用することができる。
なお、実施の形態2に記載された分散管理システムは、以下の効果も奏する。アプリケーションサーバ11Aは、アプリケーションの障害が発生した場合に、アプリケーションサーバ11Aにおける障害のリカバリに必要なリカバリアクション(リカバリ処理)を特定する情報を含む障害イベント(障害情報)を生成する。分散管理サーバ27は、アプリケーションサーバ11Aが発行した障害イベントからリカバリアクションを特定する情報を抽出してアプリケーションサーバ11Aに送信する。アプリケーションサーバ11Aは、分散管理サーバ27から送信されたリカバリアクションを特定する情報に基づいて、障害のリカバリアクションを実行する。これにより、障害が発生したときにアプリケーションサーバ11Aが自身で障害のリカバリアクションを実行できないときでも、分散管理サーバ27の要求に基づいた処理を実行することにより、障害リカバリアクションを実行できる。さらに、障害が発生したときでも、各アプリケーションサーバ11においてリカバリアクションの制御をシステム管理者が判断する必要がなく、分散管理サーバ27においてリカバリアクションの制御を扱うことができる。そのため、システム管理者の負担を軽減することができる。
アプリケーションサーバ11Aにおけるアプリケーションの障害は、自身のクライアントからのリクエストに基づいて発生したものであり、アプリケーションサーバ11Bは、アプリケーションサーバ11Aが生成した障害イベントに基づいて、自身のクライアントからのリクエストをモニタリングする。これにより、分散管理システム10は、クライアントからのリクエストによって生ずる障害の発生を防止することができる。
アプリケーションサーバ11Aにおいて、あるコンポーネントのインタフェース(第1のインタフェース)において閾値以上の障害が発生した場合に、アプリケーションサーバ11Aは、その第1のインタフェースを前記障害の原因として特定する。さらにアプリケーションサーバ11Aは、第1のインタフェースの次に多く障害が発生した別のコンポーネントのインタフェース(第2のインタフェース)を、障害の関連情報として含む障害イベントを出力する。アプリケーションサーバ11Bは、障害イベントに基づき、第1のインタフェースがクライアントからリクエストされた場合に第2のインタフェースがスレッドにおいて実行中であるか否かを判定し、実行中である場合に前記リクエストの処理を実行させないようにする。これにより、障害原因に関連すると推測される処理を実行しないようにするため、分散管理システム10の障害発生をより精度よく防止することができる。
アプリケーションサーバ11Aにおいて、あるコンポーネントのインタフェース(第1のインタフェース)において閾値以上の障害が発生した場合に、アプリケーションサーバ11Aは、その第1のインタフェースを前記障害の原因として特定する。さらにアプリケーションサーバ11Aは、その他に閾値以上の障害が発生した別のコンポーネントのインタフェース(第3のインタフェース)を、障害の関連情報として含む障害イベントを出力する。アプリケーションサーバ11Bは、障害イベントに基づき、第1のインタフェースがクライアントからリクエストされた場合に第3のインタフェースがスレッドにおいて実行中であるか否かを判定し、実行中である場合にリクエストの処理を実行させないようにする。これにより、障害原因に関連すると推測される処理を実行しないようにするため、分散管理システム10の障害発生をより精度よく防止することができる。
アプリケーションサーバ11Aにおいて、あるコンポーネントのインタフェース(第1のインタフェース)において閾値以上の障害が発生した場合に、アプリケーションサーバ11Aは、その第1のインタフェースを前記障害の原因として特定する。さらにアプリケーションサーバ11Aは、その他に障害が発生した別のコンポーネントのインタフェース(第2のインタフェース)を、障害の関連情報として含む障害イベントを出力する。アプリケーションサーバ11Bは、障害イベントに基づき、第1のインタフェースがクライアントからリクエストされた場合に、第2のインタフェースがスレッドにおいて実行中であるか否かを判定し、実行中である場合にリクエストの処理を実行させないようにする。これにより、障害原因に関連すると推測される処理を実行しないようにするため、分散管理システム10の障害発生をより精度よく防止することができる。
なお、上述の場合において、アプリケーションサーバ11Bは、障害イベントに基づき、第1のインタフェースがクライアントからリクエストされた場合に、第1のインタフェースがスレッドにおいて実行中であるか否かをさらに判定する。第1のインタフェースが実行中である場合に、アプリケーションサーバ11Bは、リクエストの処理を実行させないようにする。これにより、障害原因と特定された処理を一度に実行するスレッドの数をより少なくできるため、分散管理システム10の障害発生をより精度よく防止することができる。
上述の第1のインタフェースにおける障害、第2のインタフェースにおける障害は、それぞれメモリの使用率が基準を超えること又はCPUの使用率が基準を超えることのいずれかである。これにより、分散管理システム10におけるアプリケーション起因の障害において頻発する障害を的確に防止することができる。さらに、第1のインタフェースにおける障害をメモリの使用率が基準を超えることとし、第2のインタフェースにおける障害をCPUの使用率が基準を超えることとしてもよい。このように、アプリケーションサーバは、異なる種類であっても、処理に時間がかかってしまうという共通した性質を有する障害同士について、その原因となったコンポーネント及びインタフェースの情報を、障害を特定する情報及び障害関連情報として障害イベントに含み、発行する。これにより、類似の性質を有する障害の原因となる処理を一度に実行するスレッドの数をより少なくできるため、分散管理システム10の障害発生をより精度よく防止することができる。
アプリケーションサーバ11Aにおいて、あるコンポーネントのインタフェース(第1のインタフェース)と別のコンポーネントのインタフェース(第2のインタフェース)間におけるデッドロックが障害として発生した場合に、アプリケーションサーバ11Aは、第1のインタフェースと第2のインタフェースとを障害の原因として特定する障害イベントを出力する。アプリケーションサーバ11Bは、障害イベントに基づき、第1のインタフェースがクライアントからリクエストされた場合に第2のインタフェースがスレッドにおいて実行中であるか否かを判定し、実行中である場合にリクエストの処理を実行させないようにする。これにより、分散管理システム10のアプリケーションサーバ11において、デッドロックを確実に防止することができる。
実施の形態2に記載された分散管理システムは、例えばWebアプリケーションサーバやコンピュータ管理アプリケーションなどのミドルウェアにおいて適用することができる。これにより、アプリケーションの欠陥に伴うシステム停止(またはその期間)を抑えることができ、また、障害発生への対処に伴うシステム運用者への負荷を軽減することが期待できる。
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
例えば、実施の形態2に記載した分散管理システム10におけるアプリケーションコンポーネントを、Webアプリケーションサーバなどを構成するモジュールやシステムコンポーネントに置き換えた上で、分散管理システムの構成及び処理を図1から図11と同様の構成としてもよい。このようにしても、分散配置されたアプリケーションサーバの運用操作におけるデッドロックやメモリ不足などの障害を未然に防ぐことができる。
実施の形態2では、デッドロック、CPU又はメモリの過剰消費を例示したが、障害の種類はこれにとどまらない。
以下、本発明の各種形態を付記する。
(付記1)
同じアプリケーションを実行可能な第1のサーバ及び第2のサーバを備える分散システムであって、
前記第1のサーバにおいて前記アプリケーションの障害が発生した場合に、前記第1のサーバは、前記アプリケーションの障害原因を特定する障害情報を生成し、
前記第2のサーバは、前記障害情報に基づいて決定された、前記アプリケーションの障害発生を防止するための障害発生防止処理を実行する、
分散システム。
(付記2)
前記分散システムは、前記第1のサーバ及び前記第2のサーバを管理する分散管理サーバをさらに備え、
前記アプリケーションの障害が発生した場合に、前記第1のサーバは、前記第1のサーバにおける障害のリカバリに必要なリカバリ処理を特定する情報を含む前記障害情報を生成し、
前記分散管理サーバは、前記障害情報から前記リカバリ処理を特定する情報を抽出して前記第1のサーバに送信し、
前記第1のサーバは、前記分散管理サーバから送信された前記リカバリ処理を特定する情報に基づいて、前記障害のリカバリ処理を実行する、
付記1に記載の分散システム。
(付記3)
前記第1のサーバにおける前記アプリケーションの障害は、前記第1のサーバのクライアントからのリクエストに基づいて発生したものであり、
前記第2のサーバは、前記障害情報に基づき、前記第2のサーバのクライアントからのリクエストをモニタリングする、
付記1又は2に記載の分散システム。
(付記4)
前記第1のサーバ及び前記第2のサーバは、前記アプリケーションにかかる複数のコンポーネントを有し、
前記第1のサーバにおいて、第1のコンポーネントの第1のインタフェースにおいて閾値以上の障害が発生した場合に、前記第1のサーバは、前記第1のインタフェースを前記障害の原因として特定し、かつ、前記複数のコンポーネントのインタフェースにおいて前記第1のインタフェースの次に多く障害が発生した第2のコンポーネントの第2のインタフェースを前記障害の関連情報として含む前記障害情報を出力し、
前記第2のサーバは、前記障害情報に基づき、前記第1のインタフェースが前記第2のサーバのクライアントからリクエストされた場合に、前記第2のインタフェースがスレッドにおいて実行中であるか否かを判定し、実行中である場合に前記リクエストの処理を実行させないようにする、
付記3に記載の分散システム。
(付記5)
前記第1のサーバ及び前記第2のサーバは、前記アプリケーションにかかる複数のコンポーネントを有し、
前記第1のサーバにおいて、第1のコンポーネントの第1のインタフェースにおいて閾値以上の障害が発生するとともに、前記第1のインタフェースの他に閾値以上の障害が発生した第2のコンポーネントの第2のインタフェースがある場合には、前記第1のサーバは、前記第1のインタフェースを前記障害の原因として特定し、かつ、前記第2のインタフェースを前記障害の関連情報として含む前記障害情報を出力し、
前記第2のサーバは、前記障害情報に基づき、前記第1のインタフェースが前記第2のサーバのクライアントからリクエストされた場合に、前記第2のインタフェースがスレッドにおいて実行中であるか否かを判定し、実行中である場合に前記リクエストの処理を実行させないようにする、
付記3又は4に記載の分散システム。
(付記6)
前記第2のサーバは、前記障害情報に基づき、前記第1のインタフェースが前記第2のサーバのクライアントからリクエストされた場合に、前記第1のインタフェースが既にスレッドにおいて実行中であるか否かをさらに判定し、実行中である場合に前記リクエストの処理を実行させないようにする、
付記4又は5に記載の分散システム。
(付記7)
前記第1のサーバ及び前記第2のサーバは、前記アプリケーションにかかる複数のコンポーネントを有し、
前記第1のサーバにおいて、第1のコンポーネントの第1のインタフェースと第2のコンポーネントの第2のインタフェース間におけるデッドロックが前記障害として発生した場合に、前記第1のサーバは、前記第1のインタフェースと前記第2のインタフェースとを前記障害の原因として特定する前記障害情報を出力し、
前記第2のサーバは、前記障害情報に基づき、前記第1のインタフェースが前記第2のサーバのクライアントからリクエストされた場合に、前記第2のインタフェースがスレッドにおいて実行中であるか否かを判定し、実行中である場合に前記リクエストの処理を実行させないようにする、
付記3ないし5のいずれか一項に記載の分散システム。
(付記8)
分散システムに設けられ、同じアプリケーションを実行可能な他のサーバ計算機と接続されたサーバ計算機であって、
前記アプリケーションの障害が発生した場合に、前記アプリケーションの障害原因を特定する障害情報を生成し、
前記他のサーバが前記アプリケーションの障害原因を特定する障害情報を生成した場合に、前記障害情報に基づいて決定された、前記アプリケーションの障害発生を防止するための障害発生防止処理を実行する、
サーバ計算機。
(付記9)
同一のアプリケーションを実行可能な第1のサーバ及び第2のサーバを備えた分散システムに設けられた分散管理サーバであって、
前記第1のサーバから、前記第1のサーバにおけるアプリケーションの障害原因を特定する障害情報を受信した場合に、前記第2のサーバにおいて前記アプリケーションの障害発生を防止するための障害発生防止処理を実行するために用いられる情報として、前記第2のサーバに前記障害情報を通知する分散管理サーバ。
(付記10)
同じアプリケーションを実行可能な第1のサーバ及び第2のサーバを備える分散システムにおいてアプリケーションの障害発生を防止する障害発生防止方法であって、
前記第1のサーバにおいて前記アプリケーションの障害が発生した場合に、前記第1のサーバは、前記アプリケーションの障害原因を特定する障害情報を生成するステップと、
前記第2のサーバは、前記障害情報に基づいて決定された、前記アプリケーションの障害発生を防止するための障害発生防止処理を実行するステップと、を備える
障害発生防止方法。
(付記11)
前記第1のインタフェースにおける障害、前記第2のインタフェースにおける障害は、それぞれメモリの使用率が基準を超えること又はCPUの使用率が基準を超えることのいずれかである、
付記4ないし6のいずれか一項に記載の分散システム。
(付記12)
前記第1のインタフェースにおける障害は、メモリの使用率が基準を超えること又はCPUの使用率が基準を超えることの一方であり、前記第2のインタフェースにおける障害は、メモリの使用率が基準を超えること又はCPUの使用率が基準を超えることの他方である、
付記11に記載の分散システム。
1 分散システム
2、3 サーバ計算機
4、5 アプリケーション
6 分散管理サーバ
10 分散管理システム
11 アプリケーションサーバ
12 リクエスト受付部
13 リクエスト解析部
14 運用リクエスト受付部
15 障害情報受信部
16 障害情報記憶部
17 記憶装置
18 障害イベント発行部
19 アプリケーション実行制御部
20 実行管理部
21 障害監視部
22 障害解析部
23 障害分析部
24 障害候補格納部
25 障害情報検索部
26 コンポーネント
27 分散管理サーバ
28 アプリケーション格納部
29 アプリケーション情報管理部
30 障害イベント受信部
31 イベント解析部
32 運用操作発行部
33 障害情報発行部
34 クライアントアプリケーション

Claims (9)

  1. 同じアプリケーションを実行可能な第1のサーバ及び第2のサーバを備える分散システムであって、
    前記第1のサーバにおいて前記アプリケーションの障害が発生した場合に、前記第1のサーバは、前記アプリケーションの障害原因を特定する障害情報であって、前記アプリケーションにおいて障害を生じさせたコンポーネント、又は前記コンポーネントに関するインタフェースを示す障害情報を生成し、
    前記第2のサーバは、前記障害情報に基づいて決定された、前記アプリケーションの障害発生を防止するための障害発生防止処理を実行し、
    前記第1のサーバ及び前記第2のサーバは、それぞれ前記アプリケーションに関する複数の前記コンポーネントを有し、
    前記障害が第1のコンポーネントの第1のインタフェース及び第2のコンポーネントの第2のインタフェースに発生する場合に、前記第1のサーバは、前記第1のインタフェース及び前記第2のインタフェースを示す前記障害情報を出力し、
    前記第1のインタフェースが前記第2のサーバのクライアントからリクエストされた場合に、前記第2のサーバは、前記障害情報に基づいて、前記第2のインタフェースが実行中であるか否かを判定し、実行中である場合に前記リクエストの処理を実行させないようにする
    分散システム。
  2. 前記第1のコンポーネントの前記第1のインタフェースにおいて閾値以上の障害が発生した場合に、前記第1のサーバは、前記第1のインタフェース及び前記複数のコンポーネントのインタフェースにおいて前記第1のインタフェースの次に多く障害が発生した第2のコンポーネントの前記第2のインタフェースを示す前記障害情報を出力する、
    請求項1記載の分散システム。
  3. 前記第1のコンポーネントの前記第1のインタフェースにおいて閾値以上の障害が発生するとともに、前記第1のインタフェースの他に閾値以上の障害が発生した前記第2のコンポーネントの前記第2のインタフェースがある場合には、前記第1のサーバは、前記第1のインタフェース及び前記第2のインタフェースを示す前記障害情報を出力する、
    請求項1又は2に記載の分散システム。
  4. 前記第2のサーバは、前記障害情報に基づき、前記第1のインタフェースが前記第2のサーバのクライアントからリクエストされた場合に、前記第1のインタフェースが既に実行中であるか否かをさらに判定し、実行中である場合に前記リクエストの処理を実行させないようにする、
    請求項1乃至3のいずれか1項に記載の分散システム。
  5. 前記第1のサーバ及び前記第2のサーバは、前記アプリケーションにかかる複数のコンポーネントを有し、
    前記第1のサーバにおいて、第1のコンポーネントの第1のインタフェースと第2のコンポーネントの第2のインタフェース間におけるデッドロックが前記障害として発生した場合に、前記第1のサーバは、前記第1のインタフェースと前記第2のインタフェースとを前記障害の原因として特定する前記障害情報を出力する、
    請求項1乃至4のいずれか一項に記載の分散システム。
  6. 前記第1のインタフェースにおける障害及び前記第2のインタフェースにおける障害は、それぞれメモリの使用率が基準を超えること又はCPUの使用率が基準を超えることのいずれかである、
    請求項1乃至4のいずれか一項に記載の分散システム。
  7. 前記第1のインタフェースにおける障害は、メモリの使用率が基準を超えること又はCPUの使用率が基準を超えることの一方であり、前記第2のインタフェースにおける障害は、メモリの使用率が基準を超えること又はCPUの使用率が基準を超えることの他方である、
    請求項6に記載の分散システム。
  8. 分散システムに設けられ、同じアプリケーションを実行可能な他のサーバ計算機と接続されたサーバ計算機であって、
    前記アプリケーションの障害が発生した場合に、前記アプリケーションの障害原因を特定する障害情報であって、前記アプリケーションにおいて障害を生じさせたコンポーネント、又は前記コンポーネントに関するインタフェースを示す障害情報を生成し、
    前記他のサーバが前記アプリケーションの障害原因を特定する障害情報を生成した場合に、前記障害情報に基づいて決定された、前記アプリケーションの障害発生を防止するための障害発生防止処理を実行し、
    前記サーバ計算機は、前記アプリケーションに関する複数の前記コンポーネントを有し、
    前記障害が第1のコンポーネントの第1のインタフェース及び第2のコンポーネントの第2のインタフェースに発生する場合に、前記サーバ計算機は、前記第1のインタフェース及び前記第2のインタフェースを示す前記障害情報を出力し、
    前記第1のインタフェースが前記サーバ計算機のクライアントからリクエストされた場合に、前記出力された障害情報を受信する前記サーバ計算機は、前記障害情報に基づいて、前記第2のインタフェースが実行中であるか否かを判定し、実行中である場合に前記リクエストの処理を実行させないようにする
    サーバ計算機。
  9. 同じアプリケーションを実行可能な第1のサーバ及び第2のサーバを備える分散システムにおいてアプリケーションの障害発生を防止する障害発生防止方法であって、
    前記第1のサーバにおいて前記アプリケーションの障害が発生した場合に、前記第1のサーバは、前記アプリケーションの障害原因を特定する障害情報であって、前記アプリケーションにおいて障害を生じさせたコンポーネント、又は前記コンポーネントに関するインタフェースを示す障害情報を生成するステップと、
    前記第2のサーバは、前記障害情報に基づいて決定された、前記アプリケーションの障害発生を防止するための障害発生防止処理を実行するステップと、
    前記障害が第1のコンポーネントの第1のインタフェース及び第2のコンポーネントの第2のインタフェースに発生する場合に、前記第1のサーバは、前記第1のインタフェース及び前記第2のインタフェースを示す前記障害情報を出力するステップと、
    前記第1のインタフェースが前記第2のサーバのクライアントからリクエストされた場合に、前記第2のサーバは、前記障害情報に基づいて、前記第2のインタフェースが実行中であるか否かを判定し、実行中である場合に前記リクエストの処理を実行させないようにするステップと、を備える
    障害発生防止方法。
JP2012209911A 2012-09-24 2012-09-24 分散システム、サーバ計算機、及び障害発生防止方法 Active JP6019995B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2012209911A JP6019995B2 (ja) 2012-09-24 2012-09-24 分散システム、サーバ計算機、及び障害発生防止方法
CN201310439457.8A CN103685459B (zh) 2012-09-24 2013-09-24 分布式系统、服务器计算机、分布式管理服务器和故障防止方法
US14/035,311 US9342426B2 (en) 2012-09-24 2013-09-24 Distributed system, server computer, distributed management server, and failure prevention method
US15/096,422 US10157110B2 (en) 2012-09-24 2016-04-12 Distributed system, server computer, distributed management server, and failure prevention method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012209911A JP6019995B2 (ja) 2012-09-24 2012-09-24 分散システム、サーバ計算機、及び障害発生防止方法

Publications (2)

Publication Number Publication Date
JP2014067089A JP2014067089A (ja) 2014-04-17
JP6019995B2 true JP6019995B2 (ja) 2016-11-02

Family

ID=50321736

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012209911A Active JP6019995B2 (ja) 2012-09-24 2012-09-24 分散システム、サーバ計算機、及び障害発生防止方法

Country Status (3)

Country Link
US (1) US9342426B2 (ja)
JP (1) JP6019995B2 (ja)
CN (1) CN103685459B (ja)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9015531B2 (en) * 2011-12-14 2015-04-21 International Business Machines Corporation Preventing distribution of a failure
JP6387747B2 (ja) * 2013-09-27 2018-09-12 日本電気株式会社 情報処理装置、障害回避方法およびコンピュータプログラム
US9442786B2 (en) * 2014-06-11 2016-09-13 Honeywell International Inc. Determining and correcting software server error conditions
US9501361B2 (en) * 2014-09-26 2016-11-22 Silverstring Ltd. Disaster recovery system
CN105989503A (zh) * 2015-02-05 2016-10-05 中国移动通信集团云南有限公司 在线交易系统数据一致性的方法及系统
CN106997314B (zh) * 2016-01-22 2020-10-16 阿里巴巴(中国)有限公司 用于分布式系统的异常处理方法、装置及系统
JP6801267B2 (ja) * 2016-07-04 2020-12-16 富士通株式会社 評価プログラム、評価方法、評価装置および情報処理装置
JP6984119B2 (ja) * 2016-11-15 2021-12-17 沖電気工業株式会社 監視装置、監視プログラム、及び監視方法
CN108377670A (zh) * 2016-11-28 2018-08-07 华为技术有限公司 一种处理业务的方法、业务节点、控制节点和分布式系统
CN106533798B (zh) * 2016-12-15 2019-09-20 北京小米移动软件有限公司 检测方法和装置
WO2019000473A1 (zh) * 2017-06-30 2019-01-03 广东欧珀移动通信有限公司 系数计算方法、组件调用方法、装置、介质、服务器及终端
US10152432B1 (en) 2017-07-26 2018-12-11 Dell Products L.P. Support information provisioning system
CN108279993B (zh) * 2018-01-03 2021-08-24 创新先进技术有限公司 实现业务降级的方法及装置和电子设备
US10545850B1 (en) * 2018-10-18 2020-01-28 Denso International America, Inc. System and methods for parallel execution and comparison of related processes for fault protection
CN109714214B (zh) * 2018-12-29 2021-08-27 网宿科技股份有限公司 一种服务器异常的处理方法及管理设备
CN110286732B (zh) * 2019-06-27 2021-01-12 华云数据控股集团有限公司 高可用集群掉电自动恢复方法、装置、设备及存储介质
CN110908692A (zh) * 2019-12-15 2020-03-24 湖南龙之翔智能科技有限公司 一种智能电表的远程升级方法及系统

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0381838A (ja) * 1989-08-24 1991-04-08 Nec Corp ソフトウェア障害の修正方式
US6425093B1 (en) * 1998-01-05 2002-07-23 Sophisticated Circuits, Inc. Methods and apparatuses for controlling the execution of software on a digital processing system
US6282568B1 (en) * 1998-12-04 2001-08-28 Sun Microsystems, Inc. Platform independent distributed management system for manipulating managed objects in a network
JP2002014880A (ja) * 2000-06-28 2002-01-18 Sony Corp 素材送出装置および素材送出方法
US7213246B1 (en) * 2002-03-28 2007-05-01 Veritas Operating Corporation Failing over a virtual machine
JP2003296141A (ja) * 2002-03-29 2003-10-17 Nec Corp 障害事前検知システム、障害事前検知方法、障害事前検知サーバ及び障害事前検知端末
JP4054616B2 (ja) * 2002-06-27 2008-02-27 株式会社日立製作所 論理計算機システム、論理計算機システムの構成制御方法および論理計算機システムの構成制御プログラム
JP2005209029A (ja) 2004-01-23 2005-08-04 Tm T & D Kk アプリケーション管理システム、アプリケーション管理方法およびその管理方法を実行させるためのプログラム
US7739689B1 (en) * 2004-02-27 2010-06-15 Symantec Operating Corporation Internal monitoring of applications in a distributed management framework
US7490268B2 (en) * 2004-06-01 2009-02-10 The Trustees Of Columbia University In The City Of New York Methods and systems for repairing applications
US8271838B2 (en) * 2004-11-16 2012-09-18 Siemens Corporation System and method for detecting security intrusions and soft faults using performance signatures
US7711989B2 (en) * 2005-04-01 2010-05-04 Dot Hill Systems Corporation Storage system with automatic redundant code component failure detection, notification, and repair
JP4876438B2 (ja) * 2005-05-31 2012-02-15 株式会社日立製作所 コンポーネントソフトウェアの運用方法および運用基盤
US7702966B2 (en) * 2005-09-07 2010-04-20 Intel Corporation Method and apparatus for managing software errors in a computer system
US7966514B2 (en) * 2005-09-19 2011-06-21 Millennium It (Usa), Inc. Scalable fault tolerant system
US20080298256A1 (en) * 2007-05-30 2008-12-04 Hitachi, Ltd. Distributed System
CN101127766B (zh) * 2007-09-24 2010-06-09 中兴通讯股份有限公司 基于sip协议的消息处理方法、装置及ip通信系统
JP2010009127A (ja) 2008-06-24 2010-01-14 Toshiba Corp 管理プログラムおよび管理装置
US9417977B2 (en) * 2008-12-31 2016-08-16 Sap Se Distributed transactional recovery system and method
JP5527503B2 (ja) * 2009-02-13 2014-06-18 富士ゼロックス株式会社 監視装置および情報処理システムおよびプログラム
CN101771724B (zh) * 2010-01-05 2012-10-10 吉林大学 异构分布式信息集成方法、装置及系统

Also Published As

Publication number Publication date
US9342426B2 (en) 2016-05-17
CN103685459B (zh) 2017-07-28
CN103685459A (zh) 2014-03-26
JP2014067089A (ja) 2014-04-17
US20140089736A1 (en) 2014-03-27

Similar Documents

Publication Publication Date Title
JP6019995B2 (ja) 分散システム、サーバ計算機、及び障害発生防止方法
JP4920391B2 (ja) 計算機システムの管理方法、管理サーバ、計算機システム及びプログラム
JP4945935B2 (ja) 自律運用管理システム、自律運用管理方法及びプログラム
US9712418B2 (en) Automated network control
US11748163B2 (en) Control token and hierarchical dynamic control
US11507479B2 (en) High availability for a relational database management system as a service in a cloud platform
CN103152419A (zh) 一种云计算平台的高可用集群管理方法
US8112518B2 (en) Redundant systems management frameworks for network environments
US10924326B2 (en) Method and system for clustered real-time correlation of trace data fragments describing distributed transaction executions
CN104486108A (zh) 基于Zookeeper的节点配置方法和基于Zookeeper的节点配置系统
CN111026735B (zh) 一种数据传输方法、装置、设备及介质
CN108632106A (zh) 监控服务设备的系统
US10157110B2 (en) Distributed system, server computer, distributed management server, and failure prevention method
JP2019159729A (ja) 故障予測システム
JP5632820B2 (ja) 広域分散構成変更システム
US11544091B2 (en) Determining and implementing recovery actions for containers to recover the containers from failures
Kit et al. Study on High Availability and Fault Tolerance
JP5056464B2 (ja) プロセス監視方法、情報処理装置、及びプログラム
CN116319758A (zh) 数据迁移方法、装置、电子设备及可读存储介质
US11700178B2 (en) System and method for managing clusters in an edge network
CN114598591A (zh) 嵌入式平台节点故障恢复系统及方法
CN110188008B (zh) 作业调度主备切换方法、装置、计算机设备及存储介质
JP2006285453A (ja) 情報処理装置、情報処理方法、および情報処理プログラム
Eto et al. Analysis of a service degradation model with preventive rejuvenation
JP6984119B2 (ja) 監視装置、監視プログラム、及び監視方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150807

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160422

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160510

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160704

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160919

R150 Certificate of patent or registration of utility model

Ref document number: 6019995

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150