(57)【要約】【課題】  スレッドの処理の遅延やプロセスに割り当てられているメモリ不足に起因した情報処理装置の障害を回避する。【解決手段】  情報処理装置１０１は、検知部１０３と、回避部１０４とを備えている。検知部１０３は、プロセスに割り当てられたメモリ容量の使用率と、そのプロセスが生成したスレッドがリクエストを受けてから当該リクエストに応じた処理を終了するまでに要した処理時間とのうちの一方または両方を監視する。検知部１０３は、その監視結果に基づいて、情報処理装置１０１に障害が発生しやすい状態であることを検知する。回避部１０４は、障害が発生しやすい状態であることが検知された場合に障害回避処理を実行する。障害回避処理とは、スレッドの上限数を標準値から当該標準値よりも小さい制限値に下げ、かつ、スレッドの待機時間を標準時間から当該標準時間よりも長い拡大時間に延長する処理である。【選択図】      図１
2015088176.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータプログラムを実行する単位であるプロセスに割り当てられたメモリ容量の使用率と、前記プロセスが生成し当該プロセスが受けたリクエストに応じた処理を実行する単位であるスレッドがその処理に要した処理時間とのうちの一方又は両方に基づいて、障害が発生しやすい状態であることを検知する検知部と、
障害が発生しやすい状態であることが検知された場合に、前記プロセスが生成し当該プロセスに属することが可能な前記スレッドの上限数を標準値から当該標準値よりも小さい制限値に下げ、かつ、前記スレッドが処理を終了してから別の処理を開始するまでに待機しなければならない待機時間を標準時間から当該標準時間よりも長い拡大時間に延長する障害回避処理を実行する回避部と
を備えている情報処理装置。
【請求項２】
前記検知部は、前記スレッドの処理時間が予め定められた遅延閾値以上に遅延した場合に、障害が発生しやすい状態であることを検知する請求項１に記載の情報処理装置。
【請求項３】
前記検知部は、前記メモリ容量の使用率が予め定められたメモリ閾値以上に上昇した場合に、障害が発生しやすい状態であることを検知する請求項１に記載の情報処理装置。
【請求項４】
前記検知部は、障害が発生しやすい状態であることを検知した場合に、前記スレッドの処理時間又は前記メモリ容量の使用率を監視し、この監視結果に基づいて前記検知が正しいか否かを検証する機能をさらに備え、
前記回避部は、前記検知部による検証の結果、障害が発生しやすい状態であることが確認された場合に、前記障害回避処理を実行する請求項１に記載の情報処理装置。
【請求項５】
前記検知部は、前記プロセスが生成し当該プロセスに属している前記スレッドが複数存在する場合であって、前記スレッドの処理時間に基づいた前記検知を検証する場合には、予め定められた遅延検証期間にわたって前記各スレッドの処理時間を監視し、また、前記プロセスに属している前記スレッドの総数に対する待機中の前記スレッドの数の割合を待機割合として算出し、それら各スレッドの処理時間および前記待機割合に基づいて、前記検知を検証する請求項４に記載の情報処理装置。
【請求項６】
前記検知部は、予め定められた時間間隔毎に取得した前記メモリ容量の使用率がメモリ閾値以上に上昇したことにより、障害が発生しやすい状態であることを検知した場合であって、その検知を検証する場合には、予め定められたメモリ検証期間にわたって、前記メモリ容量の使用率を取得した時間間隔よりも短い時間間隔毎に前記メモリ容量の使用率を取得し、当該取得したメモリ容量の使用率に基づいて、前記検知を検証する請求項４に記載の情報処理装置。
【請求項７】
前記回避部は、前記検知部によって、前記メモリ容量の使用率と前記スレッドの処理時間とのうちの一方に基づいて障害が発生しやすい状態であることが検知されてから、予め定められた時間を経過する前に前記他方にも基づいて障害が発生しやすい状態であることが検知された場合に、障害回避処理を実行する請求項１に記載の情報処理装置。
【請求項８】
前記回避部が前記障害回避処理を実行した後に、前記メモリ容量の使用率あるいは前記スレッドの処理時間を監視し、当該監視の結果、予め定められた改善状態になったことを検知した場合に、前記スレッドの上限数を前記標準値に戻し、かつ、前記スレッドの待機時間を前記標準時間に戻す復帰部をさらに備えている請求項１に記載の情報処理装置。
【請求項９】
コンピュータプログラムを実行する単位であるプロセスに割り当てられたメモリ容量の使用率と、前記プロセスが生成し当該プロセスが受けたリクエストに応じた処理を実行する単位であるスレッドがその処理に要した処理時間とのうちの一方又は両方に基づいて、障害が発生しやすい状態であることをコンピュータが検知し、
障害が発生しやすい状態であることが検知された場合に、前記プロセスが生成し当該プロセスに属することが可能な前記スレッドの上限数を標準値から当該標準値よりも小さい制限値にコンピュータが下げ、かつ、前記スレッドが処理を終了してから別の処理を開始するまでに待機しなければならない待機時間を標準時間から当該標準時間よりも長い拡大時間にコンピュータが延長する障害回避方法。
【請求項１０】
コンピュータプログラムを実行する単位であるプロセスに割り当てられたメモリ容量の使用率と、前記プロセスが生成し当該プロセスが受けたリクエストに応じた処理を実行する単位であるスレッドがその処理に要した処理時間とのうちの一方又は両方に基づいて、障害が発生しやすい状態であることを検知する処理と、
障害が発生しやすい状態であることが検知された場合に、前記プロセスが生成し当該プロセスに属することが可能な前記スレッドの上限数を標準値から当該標準値よりも小さい制限値にコンピュータが下げ、かつ、前記スレッドが処理を終了してから別の処理を開始するまでに待機しなければならない待機時間を標準時間から当該標準時間よりも長い拡大時間に延長する処理と
をコンピュータに実行させる処理手順が表されているコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータの処理の遅延やメモリ不足に起因してコンピュータに障害が発生してしまう事態を回避する技術に関する。
【背景技術】
【０００２】
情報処理装置（コンピュータ）は、例えば、コンピュータプログラム（略してプログラムとも記す）を実行する際に、プログラムを実行する単位である複数のプロセスを生成する。さらに、このような場合には、情報処理装置は、プロセス内に、処理を実行する単位である複数のスレッドを生成する。
【０００３】
このような情報処理装置において、プロセス内の例えば１つのスレッドの処理が遅延すると、この遅延の悪影響が、同じプロセス内の他のスレッドの処理に及んでしまう。これにより、情報処理装置に、例えば、プロセスが異常終了するというような障害が発生する虞がある。
【０００４】
また、プロセスに割り当てられているメモリ容量が不足した場合にも、情報処理装置に、上記同様なプロセスが異常終了するというような障害が発生する虞がある。
【０００５】
特許文献１（特開平１０−０４９２１９号公報）は、コンピュータに障害が発生しそうな状態であることをコンピュータが検知する技術を開示している。特許文献２（特開２００７−２２６３９９号公報）は、ガベージコレクション処理（以下、ＧＣ処理とも記す）を利用して、コンピュータに障害が発生しそうな状態であることをコンピュータが検知する技術を開示している。ＧＣ処理とは、プログラムを実行する際に当該プログラムの処理に関連付けられたメモリ領域がそのプログラムが終了した後にも当該プログラムの処理に関連付けられたままになっている場合に、コンピュータが、その関連付けを解除（解放）する処理である。特許文献２では、コンピュータは、ＧＣ処理を実行した時間間隔と、ＧＣ処理後のメモリ容量の増加状況とを計測し、それら計測値を閾値と比較することによって、障害が発生しそうな状態であることを検知している。
【０００６】
特許文献３（特開２００８−０７７２６６号公報）および特許文献４（特開２００８−２５０６６９号公報）には、サーバでのメッセージ処理時間の予測値に基づいて、サーバでのスレッド数の上限値を制御する手法が開示されている。また、特許文献３，４には、複数のウェブサーバにおけるリクエストの処理状況に基づいて、各ウェブサーバに接続する端末の数の上限値を制御する手法も開示されている。
【０００７】
特許文献１〜４には、スレッドの処理の遅延や、プロセスに割り当てられているメモリ容量の不足に起因してコンピュータに障害が発生する事態を回避する技術は全く示されていない。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平１０−０４９２１９号公報
【特許文献２】特開２００７−２２６３９９号公報
【特許文献３】特開２００８−０７７２６６号公報
【特許文献４】特開２００８−２５０６６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
前述したように、スレッドの処理の遅延やプロセスに割り当てられているメモリ不足の状態が発生した場合に、プロセスが異常終了することがある。例えば、２４時間３６５日無停止であることが要求される情報処理システムにおいて、そのような事態が発生することは非常に問題である。
【００１０】
本発明は上記課題を解決するために考え出された。すなわち、本発明の主な目的は、スレッドの処理の遅延やプロセスに割り当てられているメモリ不足に起因した情報処理装置（コンピュータ）の障害を回避する技術を提供することにある。
【課題を解決するための手段】
【００１１】
上記目的を達成するために、本発明の情報処理装置は、
コンピュータプログラムを実行する単位であるプロセスに割り当てられたメモリ容量の使用率と、前記プロセスが生成し当該プロセスが受けたリクエストに応じた処理を実行する単位であるスレッドがその処理に要した処理時間とのうちの一方又は両方に基づいて、障害が発生しやすい状態であることを検知する検知部と、
障害が発生しやすい状態であることが検知された場合に、前記プロセスが生成し当該プロセスに属することが可能な前記スレッドの上限数を標準値から当該標準値よりも小さい制限値に下げ、かつ、前記スレッドが処理を終了してから別の処理を開始するまでに待機しなければならない待機時間を標準時間から当該標準時間よりも長い拡大時間に延長する障害回避処理を実行する回避部と
を備えている。
【００１２】
本発明の障害回避方法は、
コンピュータプログラムを実行する単位であるプロセスに割り当てられたメモリ容量の使用率と、前記プロセスが生成し当該プロセスが受けたリクエストに応じた処理を実行する単位であるスレッドがその処理に要した処理時間とのうちの一方又は両方に基づいて、障害が発生しやすい状態であることをコンピュータが検知し、
障害が発生しやすい状態であることが検知された場合に、前記プロセスが生成し当該プロセスに属することが可能な前記スレッドの上限数を標準値から当該標準値よりも小さい制限値にコンピュータが下げ、かつ、前記スレッドが処理を終了してから別の処理を開始するまでに待機しなければならない待機時間を標準時間から当該標準時間よりも長い拡大時間にコンピュータが延長する。
【００１３】
本発明のコンピュータプログラムは、
コンピュータプログラムを実行する単位であるプロセスに割り当てられたメモリ容量の使用率と、前記プロセスが生成し当該プロセスが受けたリクエストに応じた処理を実行する単位であるスレッドがその処理に要した処理時間とのうちの一方又は両方に基づいて、障害が発生しやすい状態であることを検知する処理と、
障害が発生しやすい状態であることが検知された場合に、前記プロセスが生成し当該プロセスに属することが可能な前記スレッドの上限数を標準値から当該標準値よりも小さい制限値にコンピュータが下げ、かつ、前記スレッドが処理を終了してから別の処理を開始するまでに待機しなければならない待機時間を標準時間から当該標準時間よりも長い拡大時間に延長する処理と
をコンピュータに実行させる処理手順が表されている。
【００１４】
なお、本発明の前記主な目的は、本発明の情報処理装置に対応する本発明の障害回避方法によっても達成される。また、本発明の前記主な目的は、本発明の情報処理装置および本発明の障害回避方法に対応する本発明のコンピュータプログラムによっても達成される。
【発明の効果】
【００１５】
本発明によれば、スレッドの処理の遅延やプロセスに割り当てられているメモリ不足に起因した情報処理装置（コンピュータ）の障害を回避できる。
【図面の簡単な説明】
【００１６】
【図１】本発明に係る第１実施形態の情報処理装置の構成を簡略化して表すブロック図である。
【図２】本発明に係る第２実施形態の情報処理装置の構成を簡略化して表すブロック図である。
【図３】本発明に係る第４実施形態の情報処理装置の構成を簡略化して表すブロック図である。
【図４】第４実施形態において、メモリに設定されている記憶部の一例を説明する図である。
【図５】第４実施形態における障害対策部の構成を説明するブロック図である。
【図６】第４実施形態における遅延検知部の動作例を表すフローチャートである。
【図７】第４実施形態におけるメモリ不足検知部の動作例を表すフローチャートである。
【図８】第４実施形態における回避部の動作例を表すフローチャートである。
【発明を実施するための形態】
【００１７】
以下に、本発明に係る実施形態を図面を参照しながら説明する。
【００１８】
＜第１実施形態＞
図１は、本発明に係る第１実施形態の情報処理装置の構成を簡略化して表すブロック図である。第１実施形態の情報処理装置１０１は、例えばＣＰＵ（Central Processing Unit）１０２を備えたコンピュータである。ＣＰＵ１０２は、記憶装置（図示せず）に格納されているコンピュータプログラム（プログラム）を読み出し当該プログラムを実行することによって、情報処理装置１０１の全体的な動作を制御する。
【００１９】
この第１実施形態では、情報処理装置１０１（ＣＰＵ１０２）は、プログラムを実行する単位である複数のプロセスを生成する。プロセスは、ＣＰＵ１０２の機能部の一つであり、当該プロセスの動作（処理）を管理する機能を備えている。例えば、プロセス（ＣＰＵ１０２）は、当該プロセスが受けたリクエストに応じた処理を実行する単位であるスレッドを生成（設定）する。プロセスは、通常、複数の処理を実行することから、複数のスレッドを生成可能となっている。当該プロセスが持つことができるスレッドの上限数は予め設定されている。
【００２０】
また、情報処理装置１０１にはメモリ（図示せず）が内蔵されており、プロセスには、そのメモリから使用可能なメモリ領域（メモリ容量）が割り当てられる。プロセスは、その割り当てられたメモリ領域から、スレッドが使用するメモリ領域（メモリ容量）を割り当てる。
【００２１】
この第１実施形態では、情報処理装置１０１は、ＣＰＵ１０２がプログラムを実行することにより実現される機能部として、検知部１０３と、回避部１０４とを備えている。検知部１０３は、プロセスに割り当てられたメモリ容量の使用率と、スレッドがリクエストを受けてから当該リクエストに応じた処理を終了するまでに要した処理時間とのうちの一方または両方を監視する機能を備えている。さらに、検知部１０３は、その監視結果に基づいて、情報処理装置１０１（ＣＰＵ１０２）に障害が発生しやすい状態（以下、障害懸念状態とも記す）であることを検知する機能を備えている。
【００２２】
回避部１０４は、障害が発生しやすい状態（障害懸念状態）であることが検知された場合に、障害回避処理を実行する機能を備えている。障害回避処理とは、スレッドの上限数を標準値から当該標準値よりも小さい制限値に下げ、かつ、スレッドの待機時間を標準時間から当該標準時間よりも長い拡大時間に延長する処理である。待機時間とは、スレッドが処理を終了してから別の処理を開始するまでに待機しなければならない時間である。
【００２３】
この第１実施形態の情報処理装置１０１は、上記のような構成（機能）を備えていることにより、次のような効果を得ることができる。つまり、この第１実施形態では、検知部１０３は、メモリ容量の使用率とスレッドの処理時間とのうちの一方または両方に基づいて、障害懸念状態であることを検知している。メモリ容量の使用率はメモリの不足状況を表し、スレッドの処理時間はプロセスの処理の遅延状況を表すことができる。情報処理装置１０１に障害（正常に動作できない状態）が発生する主な原因は、処理が遅延すること、および、メモリ容量が不足することである。この第１実施形態の情報処理装置１０１は、上記のように、メモリ容量の使用率と処理時間の一方又は両方を利用することによって、メモリ不足状況や処理遅延状況を適切に監視できる。これにより、情報処理装置１０１は、障害懸念状態を精度良く検知することが可能となる。
【００２４】
また、情報処理装置１０１は、障害懸念状態であることを検知した場合には、スレッドの上限数を下げ、かつ、スレッドの待機時間を延長する。つまり、情報処理装置１０１は、スレッドの上限数を下げることによって処理を実行するスレッドの数を抑えることができ、かつ、スレッドの待機時間を延長することによって並列的に実行しているスレッドの数を抑制できる。これにより、情報処理装置１０１は、ＣＰＵ１０２の負荷を抑えることができ、障害懸念状態を改善できる。つまり、情報処理装置１０１は、運転を停止することなく（継続したままで）、メモリ不足または処理遅延に起因した障害が発生する事態を回避できるという効果を得ることができる。
【００２５】
＜第２実施形態＞
以下に、本発明に係る第２実施形態を説明する。
【００２６】
図２は、第２実施形態の情報処理装置の構成を簡略化して表すブロック図である。この情報処理装置１２０は、アプリケーションサーバ（コンピュータ）であり、情報通信網１５０を通して複数のクライアント端末１６０と通信可能となっている。クライアント端末１６０は、例えば、パーソナルコンピュータ（パソコン）やＰＤＡ（Personal Digital Assistant）である。
【００２７】
第２実施形態の情報処理装置１２０は、大別して、制御装置１２１と、記憶装置１２２とを備えている。記憶装置１２２は、コンピュータプログラム（プログラム）やデータを記憶する記憶媒体である。制御装置１２１は、例えばＣＰＵを備え、当該ＣＰＵが記憶装置１２２から読み出したコンピュータプログラムを実行することによって、情報処理装置１２０の全体的な動作を制御する。
【００２８】
制御装置１２１は、プログラム（例えば、アプリケーションプログラム）を実行する際に、機能部として、プログラムの実行単位である複数のプロセス１３０を生成する機能を備えている。なお、図２では、図示の簡略化のために、プロセス１３０は一つのみ表されている。
【００２９】
プロセス１３０は、生成されたときに、処理を実行する単位である複数のスレッド（図示せず）を生成する機能を備えている。プロセス１３０が最初にスレッドを生成する際のスレッドの数は、初期値として、予め定められている。
【００３０】
プロセス１３０は、当該プロセス１３０の動作を管理する管理部１３１を備えている。例えば、管理部１３１は、クライアント端末１６０から情報通信網１５０を介してリクエスト（要求）を受け取った場合には、待機中のスレッドの一つに向けてそのリクエストを出力する。リクエストを受け取ったスレッドは、そのリクエストに応じた処理を実行する。
【００３１】
また、管理部１３１は、スレッドから処理結果（レスポンス）を受け取った場合には、その処理結果を、リクエストを発信した発信元のクライアント端末１６０に返信する。
【００３２】
さらに、管理部１３１は、リクエストを受け取った場合に、待機中のスレッドが無い場合には、新たなスレッドを生成する。ただ、プロセス１３０に属することができるスレッドの上限数は予め設定されている。このため、プロセス１３０に属しているスレッドの数が上限数に達している場合には、管理部１３１は、新たなスレッドを生成することができない。このことから、管理部１３１は、リクエストを受け取った場合に待機中のスレッドが無い場合であって、かつ、新たなスレッドを生成できない場合には、リクエストを保持する。そして、管理部１３１は、処理を終了し待機状態になったスレッドが生じた場合に、そのスレッドに向けて保持しているリクエストを出力する。
【００３３】
さらに、管理部１３１は、待機状態になったスレッドが生じた場合に、プロセス１３０に属しているスレッドの数が初期値を越えている場合には、その待機状態になったスレッドを削除する。
【００３４】
制御装置１２１には、記憶媒体であるメモリ１４０が内蔵されている。このメモリ１４０には、ヒープメモリとしての記憶領域が設定されている。制御装置１２１は、プロセス１３０を生成する際に、プロセス１３０毎に使用可能な記憶領域（容量）をメモリ１４０のヒープメモリからプロセス領域として割り当てる機能を備えている。それら各プロセス領域には、当該領域を割り当てられた（関連付けられた）プロセス１３０に関わるデータが格納される。例えば、メモリ１４０における各プロセス領域には、関連付けられたプロセス１３０において生成可能なスレッドの上限数が格納されている。また、各プロセス領域には、スレッドの待機時間の情報が格納されている。スレッドの待機時間とは、スレッドが処理を終了してから別の処理を開始するまでに待機しなければならない時間である。さらに、各プロセス領域には、当該領域の記憶容量（メモリ容量）の情報が格納されている。さらに、各プロセス領域には、各プロセスに属しているスレッドの数が格納されている。このスレッドの数は、管理部１３１がスレッドを生成した場合およびスレッドを削除した場合に、その処理を実行した管理部１３１によって更新される。さらに、管理部１３１は、スレッドを生成する際に、そのスレッドに対して、メモリ１４０のプロセス領域から、生成するスレッドが使用可能な領域を割り当てる機能を備えている。各プロセス領域には、各スレッドに割り当てられた領域の記憶容量（メモリ容量）等の情報が格納されている。さらにまた、管理部１３１は、スレッドが処理を開始する際に、その処理を開始した時点を表す情報を開始時間として、処理を開始するスレッドが属しているプロセス１３０に割り当てられたプロセス領域に書き込む機能を備えている。さらに、各プロセス領域には、待機中のプロセスの数が書き込まれている。この待機中のプロセスの数は、管理部１３１によって更新される。
【００３５】
この第２実施形態では、制御装置１２１は、機能部として、さらに、検知部１３２と、回避部１３３と、復帰部１３４とを備えている。
【００３６】
検知部１３２は、メモリ１４０における各プロセス領域の使用率（メモリ容量の使用率）と、各プロセスのスレッドの処理時間とを算出する機能を備えている。具体例を挙げると、検知部１３２は、各プロセス１３０に対して割り当てられているプロセス領域のメモリ容量Ｍの情報をメモリ１４０から読み出す。また、検知部１３２は、各プロセス１３０において、各スレッドに割り当てられているメモリ容量の総数を使用容量ｍとして算出する。そして、検知部１３２は、各プロセス１３０に関連するプロセス領域のメモリ容量Ｍに対する使用容量ｍの割合Ｒｍ（Ｒｍ＝ｍ÷Ｍ）をメモリ容量の使用率として算出する。このメモリ容量の使用率Ｒｍの算出は、予め定められた時間間隔Ｔｈ（例えば６００秒）毎に実行される。
【００３７】
また、検知部１３２は、管理部１３１の管理情報に基づいて、スレッドが処理を終了したことを検知すると、その処理が終了したスレッドが当該処理に要した時間を処理時間Ｔｒとして算出する。つまり、管理部１３１は、処理を終了したスレッドが当該処理を終了した時間から、メモリ１４０に書き込まれている開始時間を差し引くことにより、スレッドの処理時間Ｔｒを算出する。
【００３８】
さらに、検知部１３２は、算出したメモリ容量の使用率Ｒｍ、または、スレッドの処理時間Ｔｒを利用して、情報処理装置１２０が障害を発生しやすい状態（障害懸念状態）であることを検知する機能を備えている。具体的には、検知部１３２は、各プロセス１３０の算出したメモリ容量の使用率Ｒｍが予め定められたメモリ閾値Ｐｍ（例えば０．８５（８５％））以上であるか否かを判断する。そのメモリ閾値Ｐｍは、メモリ１４０に予め登録されている。
【００３９】
そして、検知部１３２は、メモリ容量の使用率Ｒｍがメモリ閾値Ｐｍ以上であると判断した場合には、メモリ不足に起因して、情報処理装置１２０が障害懸念状態にあることを検知する。
【００４０】
また、検知部１３２は、算出したスレッドの処理時間Ｔｒが予め定められた遅延閾値Ｐｔ（例えば４０秒）以上であるか否かを判断する。その遅延閾値Ｐｔは、メモリ１４０に予め登録されている。
【００４１】
そして、検知部１３２は、スレッドの処理時間Ｔｒが遅延閾値Ｐｔ以上であると判断した場合には、処理の遅延に起因して、情報処理装置１２０が障害懸念状態にあることを検知する。
【００４２】
ところで、障害懸念状態を表すメモリ不足や処理の遅延を検知部１３２が検知したとしても、そのメモリ不足や処理の遅延は一時的なものであり、障害につながらない場合もある。このことを考慮して、この第２実施形態では、検知部１３２は、その検知を検証する機能を備えている。例えば、検知部１３２は、メモリ容量の使用率Ｒｍに基づいて障害懸念状態であることを検知した場合には、予め定められたメモリ検証期間（例えば３００秒間）にわたってメモリ容量の使用率Ｒｍを監視する。このメモリ検証期間では、検知部１３２は、メモリ容量の使用率Ｒｍを算出する時間間隔を短くする。例えば、検知部１３２は、メモリ容量の使用率Ｒｍを時間間隔Ｔｈ（例えば６００秒）毎に算出していたところを、それよりも短い時間間隔Ｔｓ（例えば６０秒）毎に算出する。さらに、検知部１３２は、算出したメモリ容量の利用率Ｒｍを検証用メモリ閾値Ｐｔｍに比較する。その検証用メモリ閾値Ｐｔｍは、メモリ閾値Ｐｍと同じであってもよいし、異なっていてもよい。一例として、検証用メモリ閾値Ｐｔｍは、メモリ閾値Ｐｍ（例えば０．８５（８５％））よりも高い値（例えば０．９（９０％））とする。
【００４３】
検知部１３２は、メモリ検証期間中に、メモリ容量の使用率Ｒｍが検証用メモリ閾値Ｐｔｍ以上にならなかったと判断した場合には、メモリ容量の使用率Ｒｍがメモリ閾値Ｐｍ以上に上昇した状態は一時的であると判断する。これに対し、検知部１３２は、メモリ検証期間中に、メモリ容量の使用率Ｒｍが検証用メモリ閾値Ｐｔｍ以上であると判断した場合には、メモリ不足により情報処理装置１２０に障害が発生する虞があると判断する。つまり、検知部１３２は、障害懸念状態であるという検知（判断）を確定する。
【００４４】
また、検知部１３２は、スレッドの処理時間Ｔｒに基づいて障害懸念状態であることを検知した場合には、予め定められた遅延検証期間（例えば３００秒間）にわたってスレッドの処理時間Ｔｒを検証のために監視する。例えば、検知部１３２は、遅延検証期間においても前記同様に、処理が終了したスレッドが当該処理に要した処理時間Ｔｒを算出し、当該処理時間Ｔｒを遅延閾値Ｐｔに比較する。そして、検知部１３２は、遅延検証期間中に、処理時間Ｔｒが遅延閾値Ｐｔ以上になったスレッドがなかった場合には、スレッドの処理が一時的に遅延しただけであると判断する。
【００４５】
これに対し、検知部１３２は、遅延検証期間中に、処理時間Ｔｒが遅延閾値Ｐｔ以上になったスレッドがあったことを検知した場合には、その遅延したスレッドが属するプロセス１３０全体が遅延している状態であるか否かを判断する。例えば、検知部１３２は、遅延したスレッドが属するプロセス（検証対象のプロセス）１３０に属しているスレッドの総数Ｓａをメモリ１４０から読み出す。また、検知部１３２は、検証対象のプロセス１３０に属しているスレッドであって、待機中（リクエスト待ち状態）のスレッドの数Ｓｔをメモリ１４０から読み出す。そして、検知部１３２は、スレッドの総数Ｓａに対する待機中のスレッドの数Ｓｔの割合Ｒｓ（Ｒｓ＝Ｓｔ÷Ｓａ）を待機割合として算出し、この待機割合Ｒｓを予め定められているスレッド閾値Ｐｓ（例えば０．１（１０％））に比較する。検知部１３２は、待機割合Ｒｓがスレッド閾値Ｐｓ未満である場合には、検証対象のプロセス全体の処理が遅延傾向にあると判断する。つまり、検知部１３２は、障害懸念状態にあるという検知（判断）を確定する。
【００４６】
回避部１３３は、検知部１３２によって障害懸念状態にあるという判断が確定された場合に、障害を回避する処理（障害回避処理）を実行する機能を備えている。この第２実施形態では、回避部１３３は、障害回避処理として、スレッドの上限数を下げ、かつ、スレッドの待機時間を延長する処理を実行する。すなわち、メモリ１４０には、管理部１３１が参照するスレッドの上限数が格納されている記憶領域とは別の記憶領域に、スレッドの上限数の標準値（例えば３０）とそれよりも小さい制限値（例えば２０）とが予め登録されている。なお、それら標準値および制限値は、アプリケーションプログラムの内容や制御装置１２１の性能などを考慮した適宜な数値が設定される。また、メモリ１４０におけるプロセス領域には、プロセスが生成される際に、管理部１３１が参照するスレッドの上限数として、標準値が書き込まれる。
【００４７】
回避部１３３は、障害回避処理として、メモリ１４０におけるスレッドの上限数を標準値（例えば３０）から制限値（例えば２０）に変更する。
【００４８】
さらに、メモリ１４０には、管理部１３１が参照するスレッドの待機時間が格納されている記憶領域とは別の記憶領域に、待機時間の標準時間（例えば０秒）とそれよりも長い拡大時間（例えば５秒）とが予め登録されている。なお、それら標準時間と拡大時間は、制御装置１２１の性能などを考慮した適宜な時間が設定される。また、メモリ１４０におけるプロセス領域には、プロセスが生成される際に、管理部１３１が参照するスレッドの待機時間として、標準時間が書き込まれる。
【００４９】
回避部１３３は、障害回避処理として、メモリ１４０におけるスレッドの待機時間を標準時間（例えば０秒）から拡大時間（例えば５秒）に変更する。
【００５０】
プロセス１３０の管理部１３１は、メモリ１４０に登録されているスレッドの上限数と待機時間の情報を参照しつつ、スレッドの生成とスレッドの処理開始のタイミングを管理する。
【００５１】
上記のように、管理部１３１が参照するスレッドの上限数と待機時間が回避部１３３によって変更されることにより、プロセス１３０に属しているスレッドの数が抑制され、かつ、スレッドの待機時間が長くなる。このため、並列的に処理を実行しているスレッドの数が減少することとなり、情報処理装置１２０の負荷が抑制される。これにより、情報処理装置１２０（回避部１３３）は、メモリ不足または処理の遅延に起因した障害が発生することを回避できる。
【００５２】
復帰部１３４は、回避部１３３が障害回避処理を実行した以降に、その処理により変更した部分を元に戻す機能を備えている。すなわち、復帰部１３４は、メモリ容量の使用率Ｒｍに基づいて障害回避処理が実行された場合には、検知部１３２と同様に、メモリ容量の使用率Ｒｍを監視する。そして、復帰部１３４は、メモリ容量の使用率Ｒｍがメモリ閾値Ｐｍ未満であることを検知した場合に、スレッドの上限数を標準値に戻し、かつ、スレッドの待機時間を標準時間に戻す。また、スレッドの処理時間Ｔｒに基づいて障害回避処理が実行された場合には、復帰部１３４は、スレッドの処理時間Ｔｒを検知部１３２と同様に監視する。そして、復帰部１３４は、スレッドの処理時間Ｔｒが遅延閾値Ｐｔよりも短いことを検知した場合に、スレッドの上限数を標準値に戻し、かつ、スレッドの待機時間を標準時間に戻す。
【００５３】
この第２実施形態の情報処理装置１２０は、第１実施形態と同様に、メモリ不足または処理の遅延に起因した障害が発生する事態を抑制できるという効果を得ることができる。
【００５４】
また、情報処理装置１２０は、この第２実施形態では、障害懸念状態にあることを検知した場合に、その検知結果を検証する機能を備えている。このため、その障害懸念状態を検知する精度を高めることができる。
【００５５】
さらに、情報処理装置１２０は、障害回避処理として、運転を停止せずに（継続したままで）、スレッドの上限数を抑制し、かつ、スレッドの待機時間を延長することによって、負荷を下げる処理を実行する。このため、情報処理装置１２０における障害回避処理は、連続運転することが要求されている情報処理装置にとっては非常に有効である。
【００５６】
さらに、検知部１３２が検証期間中にメモリ容量の使用率Ｒｍを算出する時間間隔Ｔｓは、通常の時間間隔Ｔｈよりも短くなっている。これにより、情報処理装置１２０（検知部１３２）は、メモリ不足の状態を早く検証できる。また、情報処理装置１２０（検知部１３２）は、検証期間以外のときにはメモリ容量の使用率Ｒｍを算出する時間間隔を長めにしていることから、情報処理装置１２０の負荷が増加することを防止できる。
【００５７】
＜第３実施形態＞
以下に、本発明に係る第３実施形態を説明する。なお、第３実施形態の説明において、第２実施形態と同一名称部分には同一符号を付し、その共通部分の重複説明は省略する。
【００５８】
この第３実施形態では、メモリ容量の使用率Ｒｍに基づいた障害懸念状態の検知と、スレッドの処理時間Ｔｒに基づいた障害懸念状態の検知とが検知部１３２によって予め定められた時間内に確定した場合に、回避部１３３が障害回避処理を実行する。
【００５９】
第３実施形態の情報処理装置１２０における上記以外の構成（機能）は、第２実施形態と同様である。この第３実施形態の情報処理装置１２０も第２実施形態と同様の効果を得ることができる。
【００６０】
また、この第３実施形態の情報処理装置１２０は、障害につながるメモリ不足と処理の遅延との両方を予め定められた時間内に検知した場合に、障害回避処理を実行する。このため、情報処理装置１２０は、障害発生の危険性がより高い場合に障害回避処理を行うことになる。
【００６１】
なお、第２と第３の実施形態では、検知部１３２は、メモリ不足と処理の遅延との両方を検知可能である。これに対し、検知部１３２は、メモリ不足と処理の遅延との何れか一方のみを検知する構成としてもよい。この場合には、検知部１３２は処理を軽減できる。
【００６２】
さらに、第２又は第３の実施形態に加えて、制御装置１２１は、障害に関わる情報を取得する機能を備えていてもよい。例えば、制御装置１２１は、検知部１３２がスレッドの処理の遅延あるいはメモリ不足を検知したことにより回避部１３３が障害回避処理を実行する前に、障害に関わる次のような情報を取得する。つまり、制御装置１２１は、スレッドの処理の遅延が検知された場合には、その遅延しているスレッドのスタックトレースを取得する。また、制御装置１２１は、メモリ不足が検知された場合には、その時のメモリ１４０のダンプ（状況情報）を取得する。このように、情報を取得した後に、回避部１３３が障害回避処理を実行する。
【００６３】
＜第４実施形態＞
以下に、本発明に係る第４実施形態を説明する。
【００６４】
図３は、第４実施形態の情報処理装置の構成を簡略化して表すブロック図である。この第４実施形態の情報処理装置は、サーバ装置（コンピュータ）１０であり、情報通信網（ネットワーク）７０を介して複数のクライアント端末３０に接続されている。また、サーバ装置１０はデータベース６０に接続されている。
【００６５】
クライアント端末３０は、利用者が情報を入力するためのキーボード等の入力手段と、各種の情報を表示するためのディスプレイ等の出力手段とを備える。ここで、クライアント端末３０としては、例えば、パーソナルコンピュータ（パソコン）、タブレット型端末またはＰＤＡ（Personal Digital Assistant）端末が考えられるが、これらに限定されない。
【００６６】
サーバ装置１０は通信部４０を備えており、当該通信部４０によって、サーバ装置１０は、クライアント端末３０とデータの送受信を行う。
【００６７】
サーバ装置１０は、さらに、例えばＣＰＵを有し、当該ＣＰＵにより実現される機能部として、プロセス１１と、障害対策部１００とを備えている。さらに、サーバ装置１０は、記憶媒体であるメモリ５０を備えている。
【００６８】
プロセス１１は、コンピュータプログラム（プログラム）の実行単位であり、プログラムを実行する際に生成される。この生成されるプロセス１１には、メモリ５０内に、専用の記憶領域が割り当てられる。なお、サーバ装置１０には、通常、複数のプロセス１１が生成されるが、ここでは、図示の簡略化のために、一つのプロセス１１のみ表すこととする。
【００６９】
プロセス１１は、管理部１３を備えている。この管理部１３は、プロセス１１の動作を管理する機能を備えている。例えば、管理部１３は、プロセス起動時に、予め初期値として定められた複数の待機状態のスレッド１２を生成する。また、管理部１３は、各スレッド１２に、各スレッド１２を識別するスレッド識別情報を付与する。さらに、管理部１３は、プロセス１１に対して割り当てられたメモリ５０内の記憶領域から、それら生成した各スレッド１２に、予め定められた容量を持つ記憶領域を割り当てる。
【００７０】
ところで、メモリ５０には、図４に表されるようなプロセス１１に関わるデータを格納する記憶部が設定されている。管理部１３は、プロセス１１に属しているスレッド１２の数をスレッド総数としてスレッド総数記憶部１９に書き込む。また、管理部１３は、プロセス１１に属しているスレッド１２のうちの待機中のスレッド１２の数を待機スレッド数として待機スレッド数記憶部１４に書き込む。さらに、管理部１３は、プロセス１１に割り当てられたメモリ５０内の記憶領域の記憶容量を割り当て容量として割り当て容量記憶部２０に書き込む。さらに、管理部１３は、プロセス１１に割り当てられた割り当て容量のうち、各スレッド１２に割り当てられた記憶領域の容量を合計した値をメモリ使用量としてメモリ使用量記憶部１５に書き込む。
【００７１】
管理部１３は、必要に応じて、スレッド１２を生成（追加）することもある。この場合には、管理部１３は、メモリ５０におけるプロセス１１に割り当てられた記憶領域から、追加したスレッド１２に記憶領域を割り当てる。また、管理部１３は、スレッド総数記憶部１９に格納されているスレッド総数と、メモリ使用量記憶部１５に格納されているメモリ使用量とを更新する。なお、最大スレッド数記憶部１６には、プロセス１１に属することが可能な予め定められた最大のスレッド１２の数が最大スレッド数として格納されている。管理部１３は、その最大スレッド数を越えないようにスレッド１２を追加（生成）する。
【００７２】
通信部４０は、クライアント端末３０から受け取ったリクエストを、複数のプロセス１１のうちの何れのプロセスに渡すかを判断する機能を備えている。リクエストとは、例えば、データベース６０内のデータを検索する要求や、データを更新する要求である。
【００７３】
管理部１３は、通信部４０からリクエストを受け取ると、次の処理に備えて待機している待機中のスレッド１２に渡す。リクエストを受けたスレッド１２は、リクエストに応じた処理を開始する。管理部１３は、スレッド１２が処理を開始すると、その時の時刻である開始時刻を、サーバ装置１０に内蔵されている時計機構（図示せず）から取り込む。そして、管理部１３は、その開始時刻を、処理を開始したスレッド１２のスレッド識別情報に関連付け、当該開始時刻をスレッド開始時間記憶部１８に書き込む。また、管理部１３は、待機中のスレッド１２の数が減少したことから、待機中のスレッド数の変更に応じて、メモリ５０における待機スレッド数記憶部１４に格納されている待機スレッド数を更新する。
【００７４】
スレッド１２は、処理を終了すると、その処理結果（レスポンス）を管理部１３に渡す。管理部１３は、その処理結果（レスポンス）を通信部４０を介してクライアント端末３０に返信する。
【００７５】
管理部１３は、リクエストを受け取った時に、プロセス１１に属しているスレッド１２の全てが他のリクエストの処理中である場合（つまり、待機中のスレッド１２が無い場合）には、新たなスレッド１２を生成する。ただし、管理部１３は、プロセス１１に属しているスレッド１２の数が最大スレッド数記憶部１６に格納されている最大スレッド数に達している場合には、スレッド１２を生成することはできない。この場合には、管理部１３がリクエストを保持する。その後、管理部１３は、処理が終了して次の処理に備えて待機中になったスレッド１２の存在を検知すると、そのスレッド１２に、保持していたリクエストを渡す。なお、メモリ５０における処理間隔記憶部１７には、予め定められた処理間隔（待機時間）の時間情報が格納されている。スレッド１２は、処理が終了してから、その処理間隔の時間を経過するまで次の処理を開始することができない。
【００７６】
管理部１３は、保持しているリクエストが無く、かつ、スレッドの総数が初期値を越えている場合には、処理が終了し待機中になったスレッドを削除する。この場合にも、管理部１３は、プロセス１１に属しているスレッドの数の変更に応じて、スレッド総数記憶部１９に格納されているスレッド総数を更新する。また、管理部１３は、プロセス１１に割り当てられているメモリ５０内の記憶領域においてスレッド１２が使用している領域が減少するから、メモリ使用量記憶部１５に格納されているメモリ使用量を更新する。
【００７７】
図５は、障害対策部１００の一構成例を簡略化して表すブロック図である。この第４実施形態では、障害対策部１００は、検知部である遅延検知部２００と、検知部であるメモリ不足検知部３００と、回避部４００とを備えている。
【００７８】
遅延検知部２００は、スレッド１２の処理が遅延していることを検知する機能を備えている。図６は、遅延検知部２００の動作例を表すフローチャートである。このフローチャートを利用して、遅延検知部２００の動作例を説明する。
【００７９】
この第４実施形態では、管理部１３がスレッド１２の処理終了を検知すると、処理が終了したスレッド１２の識別情報を遅延検知部２００に通知する。遅延検知部２００は、その受け取ったスレッド識別情報に基づいて、処理が終了したスレッド１２が当該処理を開始した時刻の情報をスレッド開始時間記憶部１８から読み出す。また、遅延検知部２００は、スレッド１２が処理を終了した時刻の情報を例えば時計機構から読み取る。そして、遅延検知部２００は、それら得られた時刻情報に基づいて、スレッド１２が処理を開始してから終了するまでに要した処理時間Ｔｒを算出する（図６におけるステップＳ２００）。
【００８０】
次に、遅延検知部２００は、算出した処理時間Ｔｒを予め与えられている遅延閾値である上限値Ｐｔ（例えば４０秒）に比較し、処理時間Ｔｒが上限値Ｐｔ以上であるか否かを判断する（ステップＳ２０１）。この判断により、遅延検知部２００は、処理時間Ｔｒが上限値Ｐｔ未満であると判断した場合には、スレッド１２の処理は遅延していないと判断し、動作を終了する。一方、遅延検知部２００は、処理時間Ｔｒが上限値Ｐｔ以上であると判断した場合には、スレッド１２の処理が遅延している確率が高いと判断する。そして、遅延検知部２００は、引き続いて次のような処理を実行する。つまり、遅延検知部２００は、スレッド総数記憶部１９に格納されているスレッド総数を読み出す。また、遅延検知部２００は、待機スレッド数記憶部１４に格納されている待機スレッド数を読み出す。そして、遅延検知部２００は、スレッド総数Ｓａに対する待機スレッド数Ｓｔの割合を待機スレッド割合Ｒｓとして算出する（ステップＳ２０２）。
【００８１】
その後、遅延検知部２００は、待機スレッド割合Ｒｓを予め定められている下限値Ｐｓ（例えば１０％）に比較し、待機スレッド割合Ｒｓが下限値Ｐｓ未満であるか否かを判断する（ステップＳ２０３）。この判断により、遅延検知部２００は、待機スレッド割合Ｒｓが下限値Ｐｓ以上であると判断した場合には、スレッド１２の処理遅延に起因した障害が発生する虞は低いと判断し、動作を終了する。これに対し、遅延検知部２００は、待機スレッド割合Ｒｓが下限値Ｐｓ未満であると判断した場合には、障害が発生する虞があると判断する。この場合には、遅延検知部２００は、例えば、メモリ５０内に設定された遅延フラグ記憶部（図示せず）に、処理遅延に起因した障害が発生する虞があることを検知したことを表す遅延フラグとしての数値「１」を書き込む（ステップＳ２０４）。これにより、遅延検知部２００は、動作を終了する。
【００８２】
遅延検知部２００は、スレッド１２が処理を終了する度に、上記のような動作を繰り返し実行する。
【００８３】
メモリ不足検知部３００は、メモリ５０におけるメモリ不足に起因して障害が発生しやすい状態になっていることを検知する機能を備えている。図７は、メモリ不足検知部３００の動作の一例を表すフローチャートである。このフローチャートを利用して、メモリ不足検知部３００の動作例を説明する。
【００８４】
メモリ不足検知部３００は、予め定められた通常監視時間間隔Ｔｈ（例えば６００秒）毎に、メモリ５０のメモリ使用量記憶部１５に格納されているプロセス１１のメモリ使用量ｍを読み出す。そして、メモリ不足検知部３００は、プロセス１１に割り当てられている記憶領域の容量（割り当て容量）Ｍに対するメモリ使用量の割合であるメモリ使用率Ｒｍを算出する（図７におけるステップＳ３００）。その後、メモリ不足検知部３００は、算出したメモリ使用率Ｒｍをメモリ閾値Ｐｍに比較し、メモリ使用率Ｒｍがメモリ閾値Ｐｍ以上であるか否かを判断する（ステップＳ３０１）。メモリ不足検知部３００は、メモリ使用率Ｒｍがメモリ閾値Ｐｍ未満であると判断した場合には、メモリ不足に起因した障害が発生する虞が低いと判断し、次のメモリ使用率Ｒｍの算出に備える。そして、メモリ不足検知部３００は、算出タイミングになると、ステップＳ３００以降の動作を繰り返す。
【００８５】
これに対し、メモリ不足検知部３００は、ステップＳ３０１において、メモリ使用率Ｒｍがメモリ閾値Ｐｍ以上であると判断した場合には、メモリ使用率Ｒｍを算出する時間間隔を短くする。つまり、メモリ不足検知部３００は、検証監視時間間隔Ｔｓ（例えば６０秒）毎に、前記同様に、メモリ使用率Ｒｍを監視（算出）する（ステップＳ３０２）。そして、メモリ不足検知部３００は、算出したメモリ使用率Ｒｍを予め与えられているメモリ上限値Ｐｔｍに比較し、メモリ使用率Ｒｍがメモリ上限値Ｐｔｍ以上であるか否かを判断する（ステップＳ３０３）。メモリ上限値Ｐｔｍは、メモリ閾値Ｐｍよりも大きい数値である。
【００８６】
この判断により、メモリ不足検知部３００は、メモリ使用率Ｒｍがメモリ上限値Ｐｔｍ未満であると判断した場合には、メモリ不足に起因した障害が発生する虞は低いと判断し、次に述べる動作を行う。つまり、メモリ不足検知部３００は、メモリ使用率Ｒｍを検証監視時間間隔Ｔｓ毎に算出し始めてから設定の検証期間が過ぎたか否かを判断する（ステップＳ３０４）。これにより、メモリ不足検知部３００は、検証期間を過ぎていないと判断した場合には、ステップＳ３０２以降の動作を繰り返す。また、メモリ不足検知部３００は、検証期間を過ぎたと判断した場合には、ステップＳ３００以降の動作を繰り返す。
【００８７】
一方、ステップＳ３０３の動作により、メモリ不足検知部３００は、メモリ使用率Ｒｍがメモリ上限値Ｐｔｍ以上であると判断した場合には、メモリ不足に起因してサーバ装置１０に障害が発生する虞があると判断する。そして、メモリ不足検知部３００は、例えば、メモリ５０内に設定されたメモリ不足フラグ記憶部（図示せず）に、メモリ不足に起因した障害が発生する虞があることを検知したことを表すメモリ不足フラグとしての数値「１」を書き込む（ステップＳ３０５）。その後、メモリ不足検知部３００は、ステップＳ３００以降の動作を繰り返す。
【００８８】
回避部４００は、遅延検知部２００とメモリ不足検知部３００の検知結果に基づいて、サーバ装置１０に障害が発生することを回避する機能を備えている。図８は、回避部４００の動作例を表すフローチャートである。このフローチャートを利用して、回避部４００の動作例を説明する。
【００８９】
すなわち、この第４実施形態では、回避部４００は、遅延フラグ記憶部とメモリ不足フラグ記憶部に書き込まれるフラグの状況を監視する。この監視により、回避部４００は、遅延フラグ記憶部とメモリ不足フラグ記憶部の少なくとも一方に、フラグとしての数値「１」が書き込まれているか（フラグが有るか）否かを判断する（ステップＳ４００）。これにより、回避部４００は、フラグが有ることを検知した場合に、メモリ５０内に設定されている遅延回避フラグ記憶部（図示せず）とメモリ不足回避フラグ記憶部（図示せず）の状況をチェックする。遅延回避フラグ記憶部は、スレッド１２の処理に遅延が発生していることが検知されたことに基づいて回避部４００が障害発生回避処理を実行した場合に、フラグとしての数値「１」が書き込まれる記憶領域である。メモリ不足回避フラグ記憶部は、メモリ不足であることが検知されたことに基づいて回避部４００が障害発生回避処理を実行した場合に、フラグとしての数値「１」が書き込まれる記憶領域である。
【００９０】
回避部４００は、遅延回避フラグ記憶部とメモリ不足回避フラグ記憶部をチェックすることにより、それら記憶部の両方にフラグとしての「１」が書き込まれていないか（フラグが無いか）否かを判断する（ステップＳ４０１）。この判断により、回避部４００は、それら両方の記憶部にフラグ「１」が書き込まれていないと判断した場合には、障害回避処理をまだ実行していないことから、障害回避処理を実行する（ステップＳ４０２）。すなわち、回避部４００は、最大スレッド数を下げる方向に変更し、かつ、スレッド１２の処理間隔（待機時間）を広げる方向に変更する。
【００９１】
然る後に、回避部４００は、遅延フラグ記憶部にフラグとしての数値「１」が書き込まれているか（フラグが有るか）否かを判断する（ステップＳ４０３）。つまり、回避部４００は、遅延検知部２００により処理の遅延が検知されたかメモリ不足検知部３００によりメモリ不足が検知されたかを判断する。
【００９２】
回避部４００は、遅延フラグ記憶部にフラグ「１」が有る場合には、遅延回避フラグ記憶部にフラグとしての「１」を書き込む（ステップＳ４０４）。その後、回避部４００は、管理部１３の動作情報（管理情報）に基づいて、いずれかのスレッド１２が処理を終了したことを検知すると、その処理に要した処理時間Ｔｒを算出する。さらに、回避部４００は、その算出した処理時間Ｔｒを上限値Ｐｔ（例えば４０秒）に比較し、処理時間Ｔｒが上限値Ｐｔ以下か否かを判断する（ステップＳ４０５）。この判断により、処理時間Ｔｒが上限値Ｐｔより長いと判断した場合には、回避部４００は、処理時間Ｔｒの算出と、処理時間Ｔｒと上限値Ｐｔの比較とを繰り返す。
【００９３】
回避部４００は、処理時間Ｔｒが上限値Ｐｔ以下であると判断した場合には、遅延回避フラグ記憶部にフラグとして書き込まれている「１」を削除し、例えば、「０」を書き込む（ステップＳ４０６）。
【００９４】
一方、ステップＳ４０３の判断動作により、回避部４００は、メモリ不足フラグ記憶部にフラグとしての数値「１」が書き込まれていると判断した場合には、メモリ不足回避フラグ記憶部にフラグとしての数値「１」を書き込む（ステップＳ４０７）。その後、回避部４００は、検証監視時間間隔Ｔｓ毎にメモリ使用率Ｒｍを算出する。そして、回避部４００は、算出したメモリ使用率Ｒｍがメモリ閾値Ｐｍ未満であるか否かを判断する（ステップＳ４０８）。回避部４００は、メモリ使用率Ｒｍがメモリ閾値Ｐｍ以上であると判断した場合には、メモリ使用率Ｒｍの算出と、メモリ使用率Ｒｍとメモリ閾値Ｐｍの比較とを繰り返す。また、回避部４００は、メモリ使用率Ｒｍがメモリ閾値Ｐｍ未満であると判断した場合には、メモリ不足回避フラグ記憶部にフラグとして書き込まれている「１」を削除し、例えば、「０」を書き込む（ステップＳ４０９）。
【００９５】
なお、ステップＳ４０３において、遅延フラグ記憶部とメモリ不足フラグ記憶部の両方にフラグ「１」が書き込まれている場合には、回避部４００は、ステップＳ４０４からＳ４０６までの動作と、ステップＳ４０７からＳ４０９までの動作とを並列的に実行する。
【００９６】
然る後に、回避部４００は、遅延回避フラグ記憶部とメモリ不足回避フラグ記憶部の両方に、フラグとしての「１」が書き込まれていない（フラグが無い）か否かを判断する（ステップＳ４１０）。つまり、回避部４００は、障害が発生しやすい状態（障害懸念状態）が解消されたことを確認する。そして、回避部４００は、障害回避状態を解除する（ステップＳ４１１）。つまり、回避部４００は、最大スレッド数およびスレッドの処理時間間隔を元の数値に戻す。そして、回避部４００は、遅延フラグ記憶部およびメモリ不足フラグ記憶部にフラグとして書き込まれている「１」を削除し、例えば、「０」を書き込む。
【００９７】
このようにして、回避部４００は、障害回避処理に関わる動作を実行する。
【００９８】
第４実施形態のサーバ装置１０は上記のように構成されている。この第４実施形態のサーバ装置においても、第１〜第３の実施形態の情報処理装置と同様の効果を得ることができる。
【００９９】
＜第５実施形態＞
以下に、本発明に係る第５実施形態を説明する。なお、この第５実施形態の説明において、第４実施形態と同一名称部分には同一符号を付し、その共通部分の重複説明は省略する。
【０１００】
この第５実施形態では、回避部４００が障害回避処理を実行する条件が第４実施形態と異なる。つまり、第４実施形態では、スレッド１２の処理が遅延していることを検知したことと、メモリ不足が検知されたこととの何れかが検知された場合に、回避部４００は、障害回避処理を実行する。これに対して、この第５実施形態では、回避部４００は、スレッド１２の処理の遅延と、メモリ不足とが予め定められた時間（例えば１００秒）内に両方共に検知され確定された場合のみ、障害回避処理を実行する。
【０１０１】
サーバ装置１０のそれ以外の構成は、第４実施形態のサーバ装置１０と同様である。この第５実施形態のサーバ装置１０においても、第４実施形態のサーバ装置１０と同様の効果を得ることができる。
【０１０２】
なお、本発明は、第１〜第５の実施形態に限定されず、様々な実施形態を採り得る。
【０１０３】
また、この出願は、２０１３年９月２７日に出願された特願２０１３−２０１４５１を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【０１０４】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
プログラムの実行時に生成されプログラムの実行単位であるプロセスと、
前記プロセスに生成され前記プロセスの処理単位である複数のスレッドと、
障害対策部と
を備え、さらに、
前記各スレッドを識別するスレッド識別情報と、該スレッド識別情報により特定されるスレッドが処理を開始した時刻を示す処理開始時刻情報とを関連付けて記憶するスレッド開始時間記憶部と、
前記プロセスに予め定められた数を超える数の前記スレッドの生成が必要となった場合に生成可能な前記スレッドの最大数を示す値を最大スレッド数として記憶する最大スレッド数記憶部と、
前記スレッドが処理を終了した時点から、該スレッドが次の処理を実行できる状態になるまでの時間を示す値を処理間隔として記憶する処理間隔記憶部と
を備え、
前記障害対策部は、
回避部と、
いずれかの前記スレッドが処理を終了した時、当該処理に要した時間を、当該スレッドの前記スレッド識別情報と関連付けられ記憶されている前記処理開始時刻情報と、現在の時刻とに基づいて算出する機能を備えている遅延検知部と
を備え、
前記回避部は、
いずれかの前記スレッドが処理を終了した時に前記遅延検知部が算出した処理時間が予め定められた第１の時間以上である場合、前記最大スレッド数記憶部に記憶されている前記最大スレッド数を予め定められた第１の値から該第１の値より小さい予め定められた第２の値に変更するとともに、前記処理間隔記憶部に記憶されている前記処理間隔を予め定められた第３の値から該第３の値より大きい予め定められた第４の値に変更する障害回避処理を実行する
ことを特徴とする情報処理装置。
（付記２）
プログラムの実行時に生成されプログラムの実行単位であるプロセスと、
前記プロセスに生成され前記プロセスの処理単位である複数のスレッドと、
障害対策部と
を備え、さらに、
前記プロセスに属する前記スレッドの総数を示す値を記憶するスレッド総数記憶部と、
前記スレッドを識別するスレッド識別情報と、該スレッド識別情報により特定される前記スレッドが処理を開始した時刻を示す処理開始時刻情報とを関連付けて記憶するスレッド開始時間記憶部と、
前記プロセスに予め定められた数を超える数のスレッドの生成が必要となった場合に生成可能なスレッドの最大数を示す値を最大スレッド数として記憶する最大スレッド数記憶部と、
前記スレッドが処理を終了した時点から、当該スレッドが次の処理を実行できる状態になるまでの時間を示す値を処理間隔として記憶する処理間隔記憶部と、
次の処理に備えている待機中の前記スレッドの数を示す値を待機スレッド数として記憶する待機スレッド数記憶部と
を備え、
前記障害対策部は、
回避部と、
いずれかの前記スレッドが処理を終了した時、当該処理に要した時間を、前記スレッド開始時間記憶部に当該スレッドを識別する前記スレッド識別情報と関連付けて記憶されている前記処理開始時刻情報と、現在の時刻とに基づいて算出する機能と、いずれかの前記スレッドが処理を終了した時、前記スレッド総数記憶部に記憶されている前記スレッドの総数に対する、前記待機スレッド数記憶部に記憶されている待機スレッド数の割合を待機スレッド割合として算出する機能とを備えた遅延検知部と
を備え、
前記回避部は、
いずれかの前記スレッドが処理を終了した時に前記遅延検知部が算出した前記スレッドの処理時間が予め定められた第１の時間以上であって、当該スレッドが処理を終了した時に前記遅延検知部が算出した待機スレッド割合が予め定められた値未満である場合、前記最大スレッド数記憶部に記憶されている前記最大スレッド数を予め定められた第１の値から当該第１の値より小さい予め定められた第２の値に変更するとともに、前記処理間隔記憶部に記憶されている前記処理間隔を予め定められた第３の値から当該第３の値より大きい予め定められた第４の値に変更する障害回避処理を実行する
ことを特徴とする情報処理装置。
（付記３）
前記回避部は、前記障害回避処理の実行後、いずれかの前記スレッドが処理を終了した時に前記処理時間が前記第１の時間よりも短い予め定められた第２の時間以下である場合、前記最大スレッド数記憶部に記憶されている前記最大スレッド数を前記第２の値から前記第１の値に変更するとともに、前記処理間隔記憶部に記憶されている前記処理間隔を前記第４の値から前記第３の値に変更する回復処理を実行する
ことを特徴とする付記１または付記２に記載の情報処理装置。
（付記４）
プログラムの実行時に生成されプログラムの実行単位であるプロセスと、
前記プロセスに生成され前記プロセスの処理単位である複数のスレッドと、
障害対策部と、
前記プロセスに割り当てられる記憶領域を有する記憶部と
を備え、
前記記憶部は、
前記プロセスに割り当てられている前記記憶部内の記憶領域の容量である割り当て容量と、
前記プロセスが使用している記憶領域の容量であるメモリ使用量と、
前記プロセスが生成可能なスレッドの最大数を示す値である最大スレッド数と、
前記スレッドが処理を終了した時点から、該スレッドが次の処理を実行できる状態になるまでの時間である処理間隔と
を記憶し、
前記障害対策部は、
回避部と、
前記割り当て容量に対する前記メモリ使用量の割合であるメモリ使用率を算出する機能を備えているメモリ不足検知部と
を備え、
前記メモリ不足検知部が予め定められた第１の時間間隔毎に前記メモリ使用率を算出し、この算出したメモリ使用率が予め定められた第１の値以上になった時、前記メモリ不足検知部が前記第１の時間間隔より短い予め定められた第２の時間間隔毎に前記メモリ使用率を算出し始め、予め定められた時間が経過するまでに、前記メモリ使用率が前記第１の値より大きい予め定められた第２の値以下にならない場合に、前記回避部は、前記プロセスの前記最大スレッド数を予め定められた第３の値から当該第３の値より小さい予め定められた第４の値に変更するとともに、前記スレッドの処理間隔を予め定められた第５の値から当該第５の値より大きい予め定められた第６の値に変更する障害回避処理を実行する
ことを特徴とする情報処理装置。
（付記５）
前記障害回避処理の実行後、前記メモリ不足検知部が前記第２の時間間隔毎に前記メモリ使用率を算出し、この算出したメモリ使用率が前記第１の値より小さくなった場合、前記回避部は、前記プロセスの前記最大スレッド数を前記第４の値から前記第３の値に変更するとともに、前記スレッドの前記処理間隔を前記第６の値から前記第５の値に変更する回復処理を実行する
ことを特徴とする付記４記載の情報処理装置。
（付記６）
プログラムの実行時に生成されプログラムの実行単位であるプロセスと、
前記プロセスに生成され前記プロセスの処理単位である複数のスレッドと、
障害対策部と、
前記プロセスに割り当てられる記憶領域を有する記憶部と
を備え、
前記記憶部は、
前記プロセスに割り当てられている前記記憶領域の容量である割り当て容量と、
前記プロセスが使用している記憶領域の容量であるメモリ使用量と、
前記スレッドを識別するスレッド識別情報に関連付けられ当該スレッド識別情報により特定されるスレッドが処理を開始した時刻を示す処理開始時刻情報と、
前記プロセスが生成可能なスレッドの最大数である最大スレッド数と、
前記スレッドが処理を終了した時点から、当該スレッドが次の処理を実行できる状態になるまでの時間である処理間隔と
を記憶し、
前記障害対策部は、
回避部と、
前記プロセスの前記割り当て容量に対する前記メモリ使用量の割合であるメモリ使用率を算出する機能を備えているメモリ不足検知部と、
いずれかの前記スレッドが処理を終了した時、当該処理に要した処理時間を、当該スレッドの前記スレッド識別情報に関連付けられている前記処理開始時刻情報と、現在の時刻とに基づいて算出する機能を備えている遅延検知部と
を備え、
いずれかの前記スレッドが処理を終了した時に前記処理時間が予め定められた第１の時間以上であるという第１の条件と、
前記メモリ使用率を予め定められた第１の時間間隔毎に算出し、この算出した前記メモリ使用率が予め定められた第１の値以上になった時、前記第１の時間間隔より短い予め定められた第２の時間間隔毎に前記メモリ使用率を算出し始め、予め定められた時間が経過するまでに、前記メモリ使用率が前記第１の値より大きい予め定められた第２の値以下にならないという第２の条件と
が予め定められた確認時間内に成立した場合にのみ、前記回避部は、前記プロセスの前記最大スレッド数を予め定められた第４の値から当該第４の値より小さい予め定められた第５の値に変更するとともに、前記スレッドの前記処理間隔を予め定められた第６の値から当該第６の値より大きい予め定められた第７の値に変更する障害回避処理を実行する
ことを特徴とする情報処理装置。
（付記７）
プログラムの実行時に生成されプログラムの実行単位であるプロセスと、
前記プロセスに生成され前記プロセスの処理単位である複数のスレッドと、
障害対策部と、
前記プロセスに割り当てられる記憶領域を有する記憶部と
を備え、
前記記憶部は、
前記プロセスに属する前記スレッドの総数と、
前記スレッドを識別するスレッド識別情報に関連付けられ当該スレッド識別情報により特定されるスレッドが処理を開始した時刻を示す処理開始時刻と、
前記プロセスが生成可能なスレッドの最大数である最大スレッド数と、
前記スレッドが処理を終了した時点から、当該スレッドが次の処理を実行できる状態になるまでの時間である処理間隔と、
前記プロセスに割り当てられている前記記憶部内の記憶領域の容量である割り当て容量と、
前記プロセスが使用している記憶領域の容量であるメモリ使用量と
を記憶し、
前記障害対策部は、
回避部と、
前記プロセスにおける前記割り当て容量に対する前記メモリ使用量の割合であるメモリ使用率を算出する機能を備えているメモリ不足検知部と、
いずれかの前記スレッドが処理を終了した時、当該処理に要した処理時間を、当該スレッドの前記スレッド識別情報に関連付けられている前記処理開始時刻情報と、現在の時刻とに基づいて算出する機能と、いずれかの前記スレッドが処理を終了した時、前記プロセスに生成されている前記スレッドの総数に対する、次の処理に備えている待機中の前記スレッドの数の割合を待機スレッド割合として算出する機能とを備えている遅延検知部と
を備え、
いずれかの前記スレッドが処理を終了した時にその処理に要した前記処理時間が予め定められた第１の時間以上であって、前記待機スレッド割合が予め定められた第１の値未満であるという第１の条件と、
前記メモリ不足検知部が予め定められた第１の時間間隔毎に前記メモリ使用率を算出し、この算出したメモリ使用率が予め定められた第２の値以上になった時、前記メモリ不足検知部は前記第１の時間間隔より短い予め定められた第２の時間間隔毎に前記メモリ使用率を算出し始め、予め定められた時間が経過するまでに、前記メモリ使用率が前記第２の値より大きい予め定められた第３の値以下にならないという第２の条件と
が予め定められた確認時間内に成立した場合にのみ、前記回避部は、前記プロセスの前記最大スレッド数を予め定められた第４の値から当該第４の値より小さい予め定められた第５の値に変更するとともに、当該プロセスの前記処理間隔を予め定められた第６の値から該第６の値より大きい予め定められた第７の値に変更する障害回避処理を実行する
ことを特徴とする情報処理装置。
（付記８）
前記回避部は、前記障害回避処理の実行後、
前記プロセスに属するいずれかの前記スレッドが処理を終了した時にその処理に要した前記処理時間が前記第１の時間よりも短い予め定められた第２の時間以下であるという第３の条件と、
前記メモリ不足検知部が前記第２の時間間隔毎に前記メモリ使用率を算出し、この算出したメモリ使用率が前記第１の値より小さいという第４の条件と、
が成立した場合にのみ、前記プロセスの前記最大スレッド数を前記第５の値から前記第４の値に変更するとともに、前記スレッドの前記処理間隔を前記第７の値から前記第６の値に変更する回復処理を実行する
ことを特徴とする付記６または付記７に記載の情報処理装置。
（付記９）
プログラムを実行する際に当該プログラムの実行単位であるプロセスを生成し、
前記プロセスに属し前記プロセスの処理単位である複数のスレッドを生成し、
いずれかの前記スレッドが処理を終了した時、当該処理に要した処理時間を、当該スレッドを識別するスレッド識別情報に関連付けられ記憶部に記憶されている処理開始時刻情報と、現在の時刻とに基づいて算出し、
また、いずれかの前記スレッドが処理を終了した時、前記プロセスに属している前記スレッドの総数に対する、次の処理に備えている待機中の前記スレッドの数の割合を待機スレッド割合として算出し、
さらに、算出された前記処理時間が予め定められた時間以上であって、待機スレッド割合が予め定められた値未満である場合、前記プロセスの前記最大スレッド数を小さくする方向に変更するとともに、前記プロセスの前記処理間隔を長く方向に変更する
を含む障害回避方法。
（付記１０）
プログラムを実行する際に当該プログラムの実行単位であるプロセスを生成し、
前記プロセスに割り当てられている記憶領域の記憶容量に対する、使用している記憶容量であるメモリ使用量の割合であるメモリ使用率を予め定められた第１の時間間隔毎に算出し、
前記メモリ使用率が予め定められた第１の値以上になった時、前記第１の時間間隔より短い予め定められた第２の時間間隔毎に前記メモリ使用率を算出し始め、予め定められた時間が経過するまでに、前記メモリ使用率が前記第１の値より大きい予め定められた第２の値以下にならない場合に、前記プロセスに属することが可能な最大スレッド数を小さくする方向に変更するとともに、前記スレッドが処理を終了してから次の処理が可能な状態になるまでの処理間隔を大きくする方向に変更する
障害回避方法。
【符号の説明】
【０１０５】
１０１，１２０  情報処理装置
１０３，１３２  検知部
１０４，１３３  回避部
１３４  復帰部
２００  遅延検知部
３００  メモリ不足検知部
４００  回避部
【図１】
2015088176.tif 000003
【図２】
2015088176.tif 000004
【図３】
2015088176.tif 000005
【図４】
2015088176.tif 000006
【図５】
2015088176.tif 000007
【図６】
2015088176.tif 000008
【図７】
2015088176.tif 000009
【図８】
2015088176.tif 000010