(58)【調査した分野】(Int.Cl.,DB名)
コンピュータプログラムを実行する単位であるプロセスに割り当てられたメモリ容量の使用率と、前記プロセスが生成し当該プロセスが受けたリクエストに応じた処理を実行する単位であるスレッドがその処理に要した処理時間とのうちの一方又は両方に基づいて、障害が発生しやすい状態であることを検知する検知部と、
障害が発生しやすい状態であることが検知された場合に、前記プロセスが生成し当該プロセスに属することが可能な前記スレッドの上限数を標準値から当該標準値よりも小さい制限値に下げ、かつ、前記スレッドが処理を終了してから別の処理を開始するまでに待機しなければならない待機時間を標準時間から当該標準時間よりも長い拡大時間に延長する障害回避処理を実行する回避部と
を備えている情報処理装置。
前記検知部は、前記スレッドの処理時間が予め定められた遅延閾値以上に遅延した場合に、障害が発生しやすい状態であることを検知する請求項1に記載の情報処理装置。
前記検知部は、前記メモリ容量の使用率が予め定められたメモリ閾値以上に上昇した場合に、障害が発生しやすい状態であることを検知する請求項1に記載の情報処理装置。
前記検知部は、障害が発生しやすい状態であることを検知した場合に、前記スレッドの処理時間又は前記メモリ容量の使用率を監視し、この監視結果に基づいて前記検知が正しいか否かを検証する機能をさらに備え、
前記回避部は、前記検知部による検証の結果、障害が発生しやすい状態であることが確認された場合に、前記障害回避処理を実行する請求項1に記載の情報処理装置。
前記検知部は、前記プロセスが生成し当該プロセスに属している前記スレッドが複数存在する場合であって、前記スレッドの処理時間に基づいた前記検知を検証する場合には、予め定められた遅延検証期間にわたって前記各スレッドの処理時間を監視し、また、前記プロセスに属している前記スレッドの総数に対する待機中の前記スレッドの数の割合を待機割合として算出し、それら各スレッドの処理時間および前記待機割合に基づいて、前記検知を検証する請求項4に記載の情報処理装置。
前記検知部は、予め定められた時間間隔毎に取得した前記メモリ容量の使用率がメモリ閾値以上に上昇したことにより、障害が発生しやすい状態であることを検知した場合であって、その検知を検証する場合には、予め定められたメモリ検証期間にわたって、前記メモリ容量の使用率を取得した時間間隔よりも短い時間間隔毎に前記メモリ容量の使用率を取得し、当該取得したメモリ容量の使用率に基づいて、前記検知を検証する請求項4に記載の情報処理装置。
前記回避部は、前記検知部によって、前記メモリ容量の使用率と前記スレッドの処理時間とのうちの一方に基づいて障害が発生しやすい状態であることが検知されてから、予め定められた時間を経過する前に前記メモリ容量の使用率と前記スレッドの処理時間とのうちの他方にも基づいて障害が発生しやすい状態であることが検知された場合に、障害回避処理を実行する請求項1に記載の情報処理装置。
前記回避部が前記障害回避処理を実行した後に、前記メモリ容量の使用率あるいは前記スレッドの処理時間を監視し、当該監視の結果、予め定められた改善状態になったことを検知した場合に、前記スレッドの上限数を前記標準値に戻し、かつ、前記スレッドの待機時間を前記標準時間に戻す復帰部をさらに備えている請求項1に記載の情報処理装置。
コンピュータプログラムを実行する単位であるプロセスに割り当てられたメモリ容量の使用率と、前記プロセスが生成し当該プロセスが受けたリクエストに応じた処理を実行する単位であるスレッドがその処理に要した処理時間とのうちの一方又は両方に基づいて、障害が発生しやすい状態であることをコンピュータが検知し、
障害が発生しやすい状態であることが検知された場合に、前記プロセスが生成し当該プロセスに属することが可能な前記スレッドの上限数を標準値から当該標準値よりも小さい制限値にコンピュータが下げ、かつ、前記スレッドが処理を終了してから別の処理を開始するまでに待機しなければならない待機時間を標準時間から当該標準時間よりも長い拡大時間にコンピュータが延長する障害回避方法。
コンピュータプログラムを実行する単位であるプロセスに割り当てられたメモリ容量の使用率と、前記プロセスが生成し当該プロセスが受けたリクエストに応じた処理を実行する単位であるスレッドがその処理に要した処理時間とのうちの一方又は両方に基づいて、障害が発生しやすい状態であることを検知する処理と、
障害が発生しやすい状態であることが検知された場合に、前記プロセスが生成し当該プロセスに属することが可能な前記スレッドの上限数を標準値から当該標準値よりも小さい制限値にコンピュータが下げ、かつ、前記スレッドが処理を終了してから別の処理を開始するまでに待機しなければならない待機時間を標準時間から当該標準時間よりも長い拡大時間に延長する処理と
をコンピュータに実行させる処理手順が表されているコンピュータプログラム。
【発明を実施するための形態】
【0017】
以下に、本発明に係る実施形態を図面を参照しながら説明する。
【0018】
<第1実施形態>
図1は、本発明に係る第1実施形態の情報処理装置の構成を簡略化して表すブロック図である。第1実施形態の情報処理装置101は、例えばCPU(Central Processing Unit)102を備えたコンピュータである。CPU102は、記憶装置(図示せず)に格納されているコンピュータプログラム(プログラム)を読み出し当該プログラムを実行することによって、情報処理装置101の全体的な動作を制御する。
【0019】
この第1実施形態では、情報処理装置101(CPU102)は、プログラムを実行する単位である複数のプロセスを生成する。プロセスは、CPU102の機能部の一つであり、当該プロセスの動作(処理)を管理する機能を備えている。例えば、プロセス(CPU102)は、当該プロセスが受けたリクエストに応じた処理を実行する単位であるスレッドを生成(設定)する。プロセスは、通常、複数の処理を実行することから、複数のスレッドを生成可能となっている。当該プロセスが持つことができるスレッドの上限数は予め設定されている。
【0020】
また、情報処理装置101にはメモリ(図示せず)が内蔵されており、プロセスには、そのメモリから使用可能なメモリ領域(メモリ容量)が割り当てられる。プロセスは、その割り当てられたメモリ領域から、スレッドが使用するメモリ領域(メモリ容量)を割り当てる。
【0021】
この第1実施形態では、情報処理装置101は、CPU102がプログラムを実行することにより実現される機能部として、検知部103と、回避部104とを備えている。検知部103は、プロセスに割り当てられたメモリ容量の使用率と、スレッドがリクエストを受けてから当該リクエストに応じた処理を終了するまでに要した処理時間とのうちの一方または両方を監視する機能を備えている。さらに、検知部103は、その監視結果に基づいて、情報処理装置101(CPU102)に障害が発生しやすい状態(以下、障害懸念状態とも記す)であることを検知する機能を備えている。
【0022】
回避部104は、障害が発生しやすい状態(障害懸念状態)であることが検知された場合に、障害回避処理を実行する機能を備えている。障害回避処理とは、スレッドの上限数を標準値から当該標準値よりも小さい制限値に下げ、かつ、スレッドの待機時間を標準時間から当該標準時間よりも長い拡大時間に延長する処理である。待機時間とは、スレッドが処理を終了してから別の処理を開始するまでに待機しなければならない時間である。
【0023】
この第1実施形態の情報処理装置101は、上記のような構成(機能)を備えていることにより、次のような効果を得ることができる。つまり、この第1実施形態では、検知部103は、メモリ容量の使用率とスレッドの処理時間とのうちの一方または両方に基づいて、障害懸念状態であることを検知している。メモリ容量の使用率はメモリの不足状況を表し、スレッドの処理時間はプロセスの処理の遅延状況を表すことができる。情報処理装置101に障害(正常に動作できない状態)が発生する主な原因は、処理が遅延すること、および、メモリ容量が不足することである。この第1実施形態の情報処理装置101は、上記のように、メモリ容量の使用率と処理時間の一方又は両方を利用することによって、メモリ不足状況や処理遅延状況を適切に監視できる。これにより、情報処理装置101は、障害懸念状態を精度良く検知することが可能となる。
【0024】
また、情報処理装置101は、障害懸念状態であることを検知した場合には、スレッドの上限数を下げ、かつ、スレッドの待機時間を延長する。つまり、情報処理装置101は、スレッドの上限数を下げることによって処理を実行するスレッドの数を抑えることができ、かつ、スレッドの待機時間を延長することによって並列的に実行しているスレッドの数を抑制できる。これにより、情報処理装置101は、CPU102の負荷を抑えることができ、障害懸念状態を改善できる。つまり、情報処理装置101は、運転を停止することなく(継続したままで)、メモリ不足または処理遅延に起因した障害が発生する事態を回避できるという効果を得ることができる。
【0025】
<第2実施形態>
以下に、本発明に係る第2実施形態を説明する。
【0026】
図2は、第2実施形態の情報処理装置の構成を簡略化して表すブロック図である。この情報処理装置120は、アプリケーションサーバ(コンピュータ)であり、情報通信網150を通して複数のクライアント端末160と通信可能となっている。クライアント端末160は、例えば、パーソナルコンピュータ(パソコン)やPDA(Personal Digital Assistant)である。
【0027】
第2実施形態の情報処理装置120は、大別して、制御装置121と、記憶装置122とを備えている。記憶装置122は、コンピュータプログラム(プログラム)やデータを記憶する記憶媒体である。制御装置121は、例えばCPUを備え、当該CPUが記憶装置122から読み出したコンピュータプログラムを実行することによって、情報処理装置120の全体的な動作を制御する。
【0028】
制御装置121は、プログラム(例えば、アプリケーションプログラム)を実行する際に、機能部として、プログラムの実行単位である複数のプロセス130を生成する機能を備えている。なお、
図2では、図示の簡略化のために、プロセス130は一つのみ表されている。
【0029】
プロセス130は、生成されたときに、処理を実行する単位である複数のスレッド(図示せず)を生成する機能を備えている。プロセス130が最初にスレッドを生成する際のスレッドの数は、初期値として、予め定められている。
【0030】
プロセス130は、当該プロセス130の動作を管理する管理部131を備えている。例えば、管理部131は、クライアント端末160から情報通信網150を介してリクエスト(要求)を受け取った場合には、待機中のスレッドの一つに向けてそのリクエストを出力する。リクエストを受け取ったスレッドは、そのリクエストに応じた処理を実行する。
【0031】
また、管理部131は、スレッドから処理結果(レスポンス)を受け取った場合には、その処理結果を、リクエストを発信した発信元のクライアント端末160に返信する。
【0032】
さらに、管理部131は、リクエストを受け取った場合に、待機中のスレッドが無い場合には、新たなスレッドを生成する。ただ、プロセス130に属することができるスレッドの上限数は予め設定されている。このため、プロセス130に属しているスレッドの数が上限数に達している場合には、管理部131は、新たなスレッドを生成することができない。このことから、管理部131は、リクエストを受け取った場合に待機中のスレッドが無い場合であって、かつ、新たなスレッドを生成できない場合には、リクエストを保持する。そして、管理部131は、処理を終了し待機状態になったスレッドが生じた場合に、そのスレッドに向けて保持しているリクエストを出力する。
【0033】
さらに、管理部131は、待機状態になったスレッドが生じた場合に、プロセス130に属しているスレッドの数が初期値を越えている場合には、その待機状態になったスレッドを削除する。
【0034】
制御装置121には、記憶媒体であるメモリ140が内蔵されている。このメモリ140には、ヒープメモリとしての記憶領域が設定されている。制御装置121は、プロセス130を生成する際に、プロセス130毎に使用可能な記憶領域(容量)をメモリ140のヒープメモリからプロセス領域として割り当てる機能を備えている。それら各プロセス領域には、当該領域を割り当てられた(関連付けられた)プロセス130に関わるデータが格納される。例えば、メモリ140における各プロセス領域には、関連付けられたプロセス130において生成可能なスレッドの上限数が格納されている。また、各プロセス領域には、スレッドの待機時間の情報が格納されている。スレッドの待機時間とは、スレッドが処理を終了してから別の処理を開始するまでに待機しなければならない時間である。さらに、各プロセス領域には、当該領域の記憶容量(メモリ容量)の情報が格納されている。さらに、各プロセス領域には、各プロセスに属しているスレッドの数が格納されている。このスレッドの数は、管理部131がスレッドを生成した場合およびスレッドを削除した場合に、その処理を実行した管理部131によって更新される。さらに、管理部131は、スレッドを生成する際に、そのスレッドに対して、メモリ140のプロセス領域から、生成するスレッドが使用可能な領域を割り当てる機能を備えている。各プロセス領域には、各スレッドに割り当てられた領域の記憶容量(メモリ容量)等の情報が格納されている。さらにまた、管理部131は、スレッドが処理を開始する際に、その処理を開始した時点を表す情報を開始時間として、処理を開始するスレッドが属しているプロセス130に割り当てられたプロセス領域に書き込む機能を備えている。さらに、各プロセス領域には、待機中のプロセスの数が書き込まれている。この待機中のプロセスの数は、管理部131によって更新される。
【0035】
この第2実施形態では、制御装置121は、機能部として、さらに、検知部132と、回避部133と、復帰部134とを備えている。
【0036】
検知部132は、メモリ140における各プロセス領域の使用率(メモリ容量の使用率)と、各プロセスのスレッドの処理時間とを算出する機能を備えている。具体例を挙げると、検知部132は、各プロセス130に対して割り当てられているプロセス領域のメモリ容量Mの情報をメモリ140から読み出す。また、検知部132は、各プロセス130において、各スレッドに割り当てられているメモリ容量の総数を使用容量mとして算出する。そして、検知部132は、各プロセス130に関連するプロセス領域のメモリ容量Mに対する使用容量mの割合Rm(Rm=m÷M)をメモリ容量の使用率として算出する。このメモリ容量の使用率Rmの算出は、予め定められた時間間隔Th(例えば600秒)毎に実行される。
【0037】
また、検知部132は、管理部131の管理情報に基づいて、スレッドが処理を終了したことを検知すると、その処理が終了したスレッドが当該処理に要した時間を処理時間Trとして算出する。つまり、管理部131は、処理を終了したスレッドが当該処理を終了した時間から、メモリ140に書き込まれている開始時間を差し引くことにより、スレッドの処理時間Trを算出する。
【0038】
さらに、検知部132は、算出したメモリ容量の使用率Rm、または、スレッドの処理時間Trを利用して、情報処理装置120が障害を発生しやすい状態(障害懸念状態)であることを検知する機能を備えている。具体的には、検知部132は、各プロセス130の算出したメモリ容量の使用率Rmが予め定められたメモリ閾値Pm(例えば0.85(85%))以上であるか否かを判断する。そのメモリ閾値Pmは、メモリ140に予め登録されている。
【0039】
そして、検知部132は、メモリ容量の使用率Rmがメモリ閾値Pm以上であると判断した場合には、メモリ不足に起因して、情報処理装置120が障害懸念状態にあることを検知する。
【0040】
また、検知部132は、算出したスレッドの処理時間Trが予め定められた遅延閾値Pt(例えば40秒)以上であるか否かを判断する。その遅延閾値Ptは、メモリ140に予め登録されている。
【0041】
そして、検知部132は、スレッドの処理時間Trが遅延閾値Pt以上であると判断した場合には、処理の遅延に起因して、情報処理装置120が障害懸念状態にあることを検知する。
【0042】
ところで、障害懸念状態を表すメモリ不足や処理の遅延を検知部132が検知したとしても、そのメモリ不足や処理の遅延は一時的なものであり、障害につながらない場合もある。このことを考慮して、この第2実施形態では、検知部132は、その検知を検証する機能を備えている。例えば、検知部132は、メモリ容量の使用率Rmに基づいて障害懸念状態であることを検知した場合には、予め定められたメモリ検証期間(例えば300秒間)にわたってメモリ容量の使用率Rmを監視する。このメモリ検証期間では、検知部132は、メモリ容量の使用率Rmを算出する時間間隔を短くする。例えば、検知部132は、メモリ容量の使用率Rmを時間間隔Th(例えば600秒)毎に算出していたところを、それよりも短い時間間隔Ts(例えば60秒)毎に算出する。さらに、検知部132は、算出したメモリ容量の利用率Rmを検証用メモリ閾値Ptmに比較する。その検証用メモリ閾値Ptmは、メモリ閾値Pmと同じであってもよいし、異なっていてもよい。一例として、検証用メモリ閾値Ptmは、メモリ閾値Pm(例えば0.85(85%))よりも高い値(例えば0.9(90%))とする。
【0043】
検知部132は、メモリ検証期間中に、メモリ容量の使用率Rmが検証用メモリ閾値Ptm以上にならなかったと判断した場合には、メモリ容量の使用率Rmがメモリ閾値Pm以上に上昇した状態は一時的であると判断する。これに対し、検知部132は、メモリ検証期間中に、メモリ容量の使用率Rmが検証用メモリ閾値Ptm以上であると判断した場合には、メモリ不足により情報処理装置120に障害が発生する虞があると判断する。つまり、検知部132は、障害懸念状態であるという検知(判断)を確定する。
【0044】
また、検知部132は、スレッドの処理時間Trに基づいて障害懸念状態であることを検知した場合には、予め定められた遅延検証期間(例えば300秒間)にわたってスレッドの処理時間Trを検証のために監視する。例えば、検知部132は、遅延検証期間においても前記同様に、処理が終了したスレッドが当該処理に要した処理時間Trを算出し、当該処理時間Trを遅延閾値Ptに比較する。そして、検知部132は、遅延検証期間中に、処理時間Trが遅延閾値Pt以上になったスレッドがなかった場合には、スレッドの処理が一時的に遅延しただけであると判断する。
【0045】
これに対し、検知部132は、遅延検証期間中に、処理時間Trが遅延閾値Pt以上になったスレッドがあったことを検知した場合には、その遅延したスレッドが属するプロセス130全体が遅延している状態であるか否かを判断する。例えば、検知部132は、遅延したスレッドが属するプロセス(検証対象のプロセス)130に属しているスレッドの総数Saをメモリ140から読み出す。また、検知部132は、検証対象のプロセス130に属しているスレッドであって、待機中(リクエスト待ち状態)のスレッドの数Stをメモリ140から読み出す。そして、検知部132は、スレッドの総数Saに対する待機中のスレッドの数Stの割合Rs(Rs=St÷Sa)を待機割合として算出し、この待機割合Rsを予め定められているスレッド閾値Ps(例えば0.1(10%))に比較する。検知部132は、待機割合Rsがスレッド閾値Ps未満である場合には、検証対象のプロセス全体の処理が遅延傾向にあると判断する。つまり、検知部132は、障害懸念状態にあるという検知(判断)を確定する。
【0046】
回避部133は、検知部132によって障害懸念状態にあるという判断が確定された場合に、障害を回避する処理(障害回避処理)を実行する機能を備えている。この第2実施形態では、回避部133は、障害回避処理として、スレッドの上限数を下げ、かつ、スレッドの待機時間を延長する処理を実行する。すなわち、メモリ140には、管理部131が参照するスレッドの上限数が格納されている記憶領域とは別の記憶領域に、スレッドの上限数の標準値(例えば30)とそれよりも小さい制限値(例えば20)とが予め登録されている。なお、それら標準値および制限値は、アプリケーションプログラムの内容や制御装置121の性能などを考慮した適宜な数値が設定される。また、メモリ140におけるプロセス領域には、プロセスが生成される際に、管理部131が参照するスレッドの上限数として、標準値が書き込まれる。
【0047】
回避部133は、障害回避処理として、メモリ140におけるスレッドの上限数を標準値(例えば30)から制限値(例えば20)に変更する。
【0048】
さらに、メモリ140には、管理部131が参照するスレッドの待機時間が格納されている記憶領域とは別の記憶領域に、待機時間の標準時間(例えば0秒)とそれよりも長い拡大時間(例えば5秒)とが予め登録されている。なお、それら標準時間と拡大時間は、制御装置121の性能などを考慮した適宜な時間が設定される。また、メモリ140におけるプロセス領域には、プロセスが生成される際に、管理部131が参照するスレッドの待機時間として、標準時間が書き込まれる。
【0049】
回避部133は、障害回避処理として、メモリ140におけるスレッドの待機時間を標準時間(例えば0秒)から拡大時間(例えば5秒)に変更する。
【0050】
プロセス130の管理部131は、メモリ140に登録されているスレッドの上限数と待機時間の情報を参照しつつ、スレッドの生成とスレッドの処理開始のタイミングを管理する。
【0051】
上記のように、管理部131が参照するスレッドの上限数と待機時間が回避部133によって変更されることにより、プロセス130に属しているスレッドの数が抑制され、かつ、スレッドの待機時間が長くなる。このため、並列的に処理を実行しているスレッドの数が減少することとなり、情報処理装置120の負荷が抑制される。これにより、情報処理装置120(回避部133)は、メモリ不足または処理の遅延に起因した障害が発生することを回避できる。
【0052】
復帰部134は、回避部133が障害回避処理を実行した以降に、その処理により変更した部分を元に戻す機能を備えている。すなわち、復帰部134は、メモリ容量の使用率Rmに基づいて障害回避処理が実行された場合には、検知部132と同様に、メモリ容量の使用率Rmを監視する。そして、復帰部134は、メモリ容量の使用率Rmがメモリ閾値Pm未満であることを検知した場合に、スレッドの上限数を標準値に戻し、かつ、スレッドの待機時間を標準時間に戻す。また、スレッドの処理時間Trに基づいて障害回避処理が実行された場合には、復帰部134は、スレッドの処理時間Trを検知部132と同様に監視する。そして、復帰部134は、スレッドの処理時間Trが遅延閾値Ptよりも短いことを検知した場合に、スレッドの上限数を標準値に戻し、かつ、スレッドの待機時間を標準時間に戻す。
【0053】
この第2実施形態の情報処理装置120は、第1実施形態と同様に、メモリ不足または処理の遅延に起因した障害が発生する事態を抑制できるという効果を得ることができる。
【0054】
また、情報処理装置120は、この第2実施形態では、障害懸念状態にあることを検知した場合に、その検知結果を検証する機能を備えている。このため、その障害懸念状態を検知する精度を高めることができる。
【0055】
さらに、情報処理装置120は、障害回避処理として、運転を停止せずに(継続したままで)、スレッドの上限数を抑制し、かつ、スレッドの待機時間を延長することによって、負荷を下げる処理を実行する。このため、情報処理装置120における障害回避処理は、連続運転することが要求されている情報処理装置にとっては非常に有効である。
【0056】
さらに、検知部132が検証期間中にメモリ容量の使用率Rmを算出する時間間隔Tsは、通常の時間間隔Thよりも短くなっている。これにより、情報処理装置120(検知部132)は、メモリ不足の状態を早く検証できる。また、情報処理装置120(検知部132)は、検証期間以外のときにはメモリ容量の使用率Rmを算出する時間間隔を長めにしていることから、情報処理装置120の負荷が増加することを防止できる。
【0057】
<第3実施形態>
以下に、本発明に係る第3実施形態を説明する。なお、第3実施形態の説明において、第2実施形態と同一名称部分には同一符号を付し、その共通部分の重複説明は省略する。
【0058】
この第3実施形態では、メモリ容量の使用率Rmに基づいた障害懸念状態の検知と、スレッドの処理時間Trに基づいた障害懸念状態の検知とが検知部132によって予め定められた時間内に確定した場合に、回避部133が障害回避処理を実行する。
【0059】
第3実施形態の情報処理装置120における上記以外の構成(機能)は、第2実施形態と同様である。この第3実施形態の情報処理装置120も第2実施形態と同様の効果を得ることができる。
【0060】
また、この第3実施形態の情報処理装置120は、障害につながるメモリ不足と処理の遅延との両方を予め定められた時間内に検知した場合に、障害回避処理を実行する。このため、情報処理装置120は、障害発生の危険性がより高い場合に障害回避処理を行うことになる。
【0061】
なお、第2と第3の実施形態では、検知部132は、メモリ不足と処理の遅延との両方を検知可能である。これに対し、検知部132は、メモリ不足と処理の遅延との何れか一方のみを検知する構成としてもよい。この場合には、検知部132は処理を軽減できる。
【0062】
さらに、第2又は第3の実施形態に加えて、制御装置121は、障害に関わる情報を取得する機能を備えていてもよい。例えば、制御装置121は、検知部132がスレッドの処理の遅延あるいはメモリ不足を検知したことにより回避部133が障害回避処理を実行する前に、障害に関わる次のような情報を取得する。つまり、制御装置121は、スレッドの処理の遅延が検知された場合には、その遅延しているスレッドのスタックトレースを取得する。また、制御装置121は、メモリ不足が検知された場合には、その時のメモリ140のダンプ(状況情報)を取得する。このように、情報を取得した後に、回避部133が障害回避処理を実行する。
【0063】
<第4実施形態>
以下に、本発明に係る第4実施形態を説明する。
【0064】
図3は、第4実施形態の情報処理装置の構成を簡略化して表すブロック図である。この第4実施形態の情報処理装置は、サーバ装置(コンピュータ)10であり、情報通信網(ネットワーク)70を介して複数のクライアント端末30に接続されている。また、サーバ装置10はデータベース60に接続されている。
【0065】
クライアント端末30は、利用者が情報を入力するためのキーボード等の入力手段と、各種の情報を表示するためのディスプレイ等の出力手段とを備える。ここで、クライアント端末30としては、例えば、パーソナルコンピュータ(パソコン)、タブレット型端末またはPDA(Personal Digital Assistant)端末が考えられるが、これらに限定されない。
【0066】
サーバ装置10は通信部40を備えており、当該通信部40によって、サーバ装置10は、クライアント端末30とデータの送受信を行う。
【0067】
サーバ装置10は、さらに、例えばCPUを有し、当該CPUにより実現される機能部として、プロセス11と、障害対策部100とを備えている。さらに、サーバ装置10は、記憶媒体であるメモリ50を備えている。
【0068】
プロセス11は、コンピュータプログラム(プログラム)の実行単位であり、プログラムを実行する際に生成される。この生成されるプロセス11には、メモリ50内に、専用の記憶領域が割り当てられる。なお、サーバ装置10には、通常、複数のプロセス11が生成されるが、ここでは、図示の簡略化のために、一つのプロセス11のみ表すこととする。
【0069】
プロセス11は、管理部13を備えている。この管理部13は、プロセス11の動作を管理する機能を備えている。例えば、管理部13は、プロセス起動時に、予め初期値として定められた複数の待機状態のスレッド12を生成する。また、管理部13は、各スレッド12に、各スレッド12を識別するスレッド識別情報を付与する。さらに、管理部13は、プロセス11に対して割り当てられたメモリ50内の記憶領域から、それら生成した各スレッド12に、予め定められた容量を持つ記憶領域を割り当てる。
【0070】
ところで、メモリ50には、
図4に表されるようなプロセス11に関わるデータを格納する記憶部が設定されている。管理部13は、プロセス11に属しているスレッド12の数をスレッド総数としてスレッド総数記憶部19に書き込む。また、管理部13は、プロセス11に属しているスレッド12のうちの待機中のスレッド12の数を待機スレッド数として待機スレッド数記憶部14に書き込む。さらに、管理部13は、プロセス11に割り当てられたメモリ50内の記憶領域の記憶容量を割り当て容量として割り当て容量記憶部20に書き込む。さらに、管理部13は、プロセス11に割り当てられた割り当て容量のうち、各スレッド12に割り当てられた記憶領域の容量を合計した値をメモリ使用量としてメモリ使用量記憶部15に書き込む。
【0071】
管理部13は、必要に応じて、スレッド12を生成(追加)することもある。この場合には、管理部13は、メモリ50におけるプロセス11に割り当てられた記憶領域から、追加したスレッド12に記憶領域を割り当てる。また、管理部13は、スレッド総数記憶部19に格納されているスレッド総数と、メモリ使用量記憶部15に格納されているメモリ使用量とを更新する。なお、最大スレッド数記憶部16には、プロセス11に属することが可能な予め定められた最大のスレッド12の数が最大スレッド数として格納されている。管理部13は、その最大スレッド数を越えないようにスレッド12を追加(生成)する。
【0072】
通信部40は、クライアント端末30から受け取ったリクエストを、複数のプロセス11のうちの何れのプロセスに渡すかを判断する機能を備えている。リクエストとは、例えば、データベース60内のデータを検索する要求や、データを更新する要求である。
【0073】
管理部13は、通信部40からリクエストを受け取ると、次の処理に備えて待機している待機中のスレッド12に渡す。リクエストを受けたスレッド12は、リクエストに応じた処理を開始する。管理部13は、スレッド12が処理を開始すると、その時の時刻である開始時刻を、サーバ装置10に内蔵されている時計機構(図示せず)から取り込む。そして、管理部13は、その開始時刻を、処理を開始したスレッド12のスレッド識別情報に関連付け、当該開始時刻をスレッド開始時間記憶部18に書き込む。また、管理部13は、待機中のスレッド12の数が減少したことから、待機中のスレッド数の変更に応じて、メモリ50における待機スレッド数記憶部14に格納されている待機スレッド数を更新する。
【0074】
スレッド12は、処理を終了すると、その処理結果(レスポンス)を管理部13に渡す。管理部13は、その処理結果(レスポンス)を通信部40を介してクライアント端末30に返信する。
【0075】
管理部13は、リクエストを受け取った時に、プロセス11に属しているスレッド12の全てが他のリクエストの処理中である場合(つまり、待機中のスレッド12が無い場合)には、新たなスレッド12を生成する。ただし、管理部13は、プロセス11に属しているスレッド12の数が最大スレッド数記憶部16に格納されている最大スレッド数に達している場合には、スレッド12を生成することはできない。この場合には、管理部13がリクエストを保持する。その後、管理部13は、処理が終了して次の処理に備えて待機中になったスレッド12の存在を検知すると、そのスレッド12に、保持していたリクエストを渡す。なお、メモリ50における処理間隔記憶部17には、予め定められた処理間隔(待機時間)の時間情報が格納されている。スレッド12は、処理が終了してから、その処理間隔の時間を経過するまで次の処理を開始することができない。
【0076】
管理部13は、保持しているリクエストが無く、かつ、スレッドの総数が初期値を越えている場合には、処理が終了し待機中になったスレッドを削除する。この場合にも、管理部13は、プロセス11に属しているスレッドの数の変更に応じて、スレッド総数記憶部19に格納されているスレッド総数を更新する。また、管理部13は、プロセス11に割り当てられているメモリ50内の記憶領域においてスレッド12が使用している領域が減少するから、メモリ使用量記憶部15に格納されているメモリ使用量を更新する。
【0077】
図5は、障害対策部100の一構成例を簡略化して表すブロック図である。この第4実施形態では、障害対策部100は、検知部である遅延検知部200と、検知部であるメモリ不足検知部300と、回避部400とを備えている。
【0078】
遅延検知部200は、スレッド12の処理が遅延していることを検知する機能を備えている。
図6は、遅延検知部200の動作例を表すフローチャートである。このフローチャートを利用して、遅延検知部200の動作例を説明する。
【0079】
この第4実施形態では、管理部13がスレッド12の処理終了を検知すると、処理が終了したスレッド12の識別情報を遅延検知部200に通知する。遅延検知部200は、その受け取ったスレッド識別情報に基づいて、処理が終了したスレッド12が当該処理を開始した時刻の情報をスレッド開始時間記憶部18から読み出す。また、遅延検知部200は、スレッド12が処理を終了した時刻の情報を例えば時計機構から読み取る。そして、遅延検知部200は、それら得られた時刻情報に基づいて、スレッド12が処理を開始してから終了するまでに要した処理時間Trを算出する(
図6におけるステップS200)。
【0080】
次に、遅延検知部200は、算出した処理時間Trを予め与えられている遅延閾値である上限値Pt(例えば40秒)に比較し、処理時間Trが上限値Pt以上であるか否かを判断する(ステップS201)。この判断により、遅延検知部200は、処理時間Trが上限値Pt未満であると判断した場合には、スレッド12の処理は遅延していないと判断し、動作を終了する。一方、遅延検知部200は、処理時間Trが上限値Pt以上であると判断した場合には、スレッド12の処理が遅延している確率が高いと判断する。そして、遅延検知部200は、引き続いて次のような処理を実行する。つまり、遅延検知部200は、スレッド総数記憶部19に格納されているスレッド総数を読み出す。また、遅延検知部200は、待機スレッド数記憶部14に格納されている待機スレッド数を読み出す。そして、遅延検知部200は、スレッド総数Saに対する待機スレッド数Stの割合を待機スレッド割合Rsとして算出する(ステップS202)。
【0081】
その後、遅延検知部200は、待機スレッド割合Rsを予め定められている下限値Ps(例えば10%)に比較し、待機スレッド割合Rsが下限値Ps未満であるか否かを判断する(ステップS203)。この判断により、遅延検知部200は、待機スレッド割合Rsが下限値Ps以上であると判断した場合には、スレッド12の処理遅延に起因した障害が発生する虞は低いと判断し、動作を終了する。これに対し、遅延検知部200は、待機スレッド割合Rsが下限値Ps未満であると判断した場合には、障害が発生する虞があると判断する。この場合には、遅延検知部200は、例えば、メモリ50内に設定された遅延フラグ記憶部(図示せず)に、処理遅延に起因した障害が発生する虞があることを検知したことを表す遅延フラグとしての数値「1」を書き込む(ステップS204)。これにより、遅延検知部200は、動作を終了する。
【0082】
遅延検知部200は、スレッド12が処理を終了する度に、上記のような動作を繰り返し実行する。
【0083】
メモリ不足検知部300は、メモリ50におけるメモリ不足に起因して障害が発生しやすい状態になっていることを検知する機能を備えている。
図7は、メモリ不足検知部300の動作の一例を表すフローチャートである。このフローチャートを利用して、メモリ不足検知部300の動作例を説明する。
【0084】
メモリ不足検知部300は、予め定められた通常監視時間間隔Th(例えば600秒)毎に、メモリ50のメモリ使用量記憶部15に格納されているプロセス11のメモリ使用量mを読み出す。そして、メモリ不足検知部300は、プロセス11に割り当てられている記憶領域の容量(割り当て容量)Mに対するメモリ使用量の割合であるメモリ使用率Rmを算出する(
図7におけるステップS300)。その後、メモリ不足検知部300は、算出したメモリ使用率Rmをメモリ閾値Pmに比較し、メモリ使用率Rmがメモリ閾値Pm以上であるか否かを判断する(ステップS301)。メモリ不足検知部300は、メモリ使用率Rmがメモリ閾値Pm未満であると判断した場合には、メモリ不足に起因した障害が発生する虞が低いと判断し、次のメモリ使用率Rmの算出に備える。そして、メモリ不足検知部300は、算出タイミングになると、ステップS300以降の動作を繰り返す。
【0085】
これに対し、メモリ不足検知部300は、ステップS301において、メモリ使用率Rmがメモリ閾値Pm以上であると判断した場合には、メモリ使用率Rmを算出する時間間隔を短くする。つまり、メモリ不足検知部300は、検証監視時間間隔Ts(例えば60秒)毎に、前記同様に、メモリ使用率Rmを監視(算出)する(ステップS302)。そして、メモリ不足検知部300は、算出したメモリ使用率Rmを予め与えられているメモリ上限値Ptmに比較し、メモリ使用率Rmがメモリ上限値Ptm以上であるか否かを判断する(ステップS303)。メモリ上限値Ptmは、メモリ閾値Pmよりも大きい数値である。
【0086】
この判断により、メモリ不足検知部300は、メモリ使用率Rmがメモリ上限値Ptm未満であると判断した場合には、メモリ不足に起因した障害が発生する虞は低いと判断し、次に述べる動作を行う。つまり、メモリ不足検知部300は、メモリ使用率Rmを検証監視時間間隔Ts毎に算出し始めてから設定の検証期間が過ぎたか否かを判断する(ステップS304)。これにより、メモリ不足検知部300は、検証期間を過ぎていないと判断した場合には、ステップS302以降の動作を繰り返す。また、メモリ不足検知部300は、検証期間を過ぎたと判断した場合には、ステップS300以降の動作を繰り返す。
【0087】
一方、ステップS303の動作により、メモリ不足検知部300は、メモリ使用率Rmがメモリ上限値Ptm以上であると判断した場合には、メモリ不足に起因してサーバ装置10に障害が発生する虞があると判断する。そして、メモリ不足検知部300は、例えば、メモリ50内に設定されたメモリ不足フラグ記憶部(図示せず)に、メモリ不足に起因した障害が発生する虞があることを検知したことを表すメモリ不足フラグとしての数値「1」を書き込む(ステップS305)。その後、メモリ不足検知部300は、ステップS300以降の動作を繰り返す。
【0088】
回避部400は、遅延検知部200とメモリ不足検知部300の検知結果に基づいて、サーバ装置10に障害が発生することを回避する機能を備えている。
図8は、回避部400の動作例を表すフローチャートである。このフローチャートを利用して、回避部400の動作例を説明する。
【0089】
すなわち、この第4実施形態では、回避部400は、遅延フラグ記憶部とメモリ不足フラグ記憶部に書き込まれるフラグの状況を監視する。この監視により、回避部400は、遅延フラグ記憶部とメモリ不足フラグ記憶部の少なくとも一方に、フラグとしての数値「1」が書き込まれているか(フラグが有るか)否かを判断する(ステップS400)。これにより、回避部400は、フラグが有ることを検知した場合に、メモリ50内に設定されている遅延回避フラグ記憶部(図示せず)とメモリ不足回避フラグ記憶部(図示せず)の状況をチェックする。遅延回避フラグ記憶部は、スレッド12の処理に遅延が発生していることが検知されたことに基づいて回避部400が障害発生回避処理を実行した場合に、フラグとしての数値「1」が書き込まれる記憶領域である。メモリ不足回避フラグ記憶部は、メモリ不足であることが検知されたことに基づいて回避部400が障害発生回避処理を実行した場合に、フラグとしての数値「1」が書き込まれる記憶領域である。
【0090】
回避部400は、遅延回避フラグ記憶部とメモリ不足回避フラグ記憶部をチェックすることにより、それら記憶部の両方にフラグとしての「1」が書き込まれていないか(フラグが無いか)否かを判断する(ステップS401)。この判断により、回避部400は、それら両方の記憶部にフラグ「1」が書き込まれていないと判断した場合には、障害回避処理をまだ実行していないことから、障害回避処理を実行する(ステップS402)。すなわち、回避部400は、最大スレッド数を下げる方向に変更し、かつ、スレッド12の処理間隔(待機時間)を広げる方向に変更する。
【0091】
然る後に、回避部400は、遅延フラグ記憶部にフラグとしての数値「1」が書き込まれているか(フラグが有るか)否かを判断する(ステップS403)。つまり、回避部400は、遅延検知部200により処理の遅延が検知されたかメモリ不足検知部300によりメモリ不足が検知されたかを判断する。
【0092】
回避部400は、遅延フラグ記憶部にフラグ「1」が有る場合には、遅延回避フラグ記憶部にフラグとしての「1」を書き込む(ステップS404)。その後、回避部400は、管理部13の動作情報(管理情報)に基づいて、いずれかのスレッド12が処理を終了したことを検知すると、その処理に要した処理時間Trを算出する。さらに、回避部400は、その算出した処理時間Trを上限値Pt(例えば40秒)に比較し、処理時間Trが上限値Pt以下か否かを判断する(ステップS405)。この判断により、処理時間Trが上限値Ptより長いと判断した場合には、回避部400は、処理時間Trの算出と、処理時間Trと上限値Ptの比較とを繰り返す。
【0093】
回避部400は、処理時間Trが上限値Pt以下であると判断した場合には、遅延回避フラグ記憶部にフラグとして書き込まれている「1」を削除し、例えば、「0」を書き込む(ステップS406)。
【0094】
一方、ステップS403の判断動作により、回避部400は、メモリ不足フラグ記憶部にフラグとしての数値「1」が書き込まれていると判断した場合には、メモリ不足回避フラグ記憶部にフラグとしての数値「1」を書き込む(ステップS407)。その後、回避部400は、検証監視時間間隔Ts毎にメモリ使用率Rmを算出する。そして、回避部400は、算出したメモリ使用率Rmがメモリ閾値Pm未満であるか否かを判断する(ステップS408)。回避部400は、メモリ使用率Rmがメモリ閾値Pm以上であると判断した場合には、メモリ使用率Rmの算出と、メモリ使用率Rmとメモリ閾値Pmの比較とを繰り返す。また、回避部400は、メモリ使用率Rmがメモリ閾値Pm未満であると判断した場合には、メモリ不足回避フラグ記憶部にフラグとして書き込まれている「1」を削除し、例えば、「0」を書き込む(ステップS409)。
【0095】
なお、ステップS403において、遅延フラグ記憶部とメモリ不足フラグ記憶部の両方にフラグ「1」が書き込まれている場合には、回避部400は、ステップS404からS406までの動作と、ステップS407からS409までの動作とを並列的に実行する。
【0096】
然る後に、回避部400は、遅延回避フラグ記憶部とメモリ不足回避フラグ記憶部の両方に、フラグとしての「1」が書き込まれていない(フラグが無い)か否かを判断する(ステップS410)。つまり、回避部400は、障害が発生しやすい状態(障害懸念状態)が解消されたことを確認する。そして、回避部400は、障害回避状態を解除する(ステップS411)。つまり、回避部400は、最大スレッド数およびスレッドの処理時間間隔を元の数値に戻す。そして、回避部400は、遅延フラグ記憶部およびメモリ不足フラグ記憶部にフラグとして書き込まれている「1」を削除し、例えば、「0」を書き込む。
【0097】
このようにして、回避部400は、障害回避処理に関わる動作を実行する。
【0098】
第4実施形態のサーバ装置10は上記のように構成されている。この第4実施形態のサーバ装置においても、第1〜第3の実施形態の情報処理装置と同様の効果を得ることができる。
【0099】
<第5実施形態>
以下に、本発明に係る第5実施形態を説明する。なお、この第5実施形態の説明において、第4実施形態と同一名称部分には同一符号を付し、その共通部分の重複説明は省略する。
【0100】
この第5実施形態では、回避部400が障害回避処理を実行する条件が第4実施形態と異なる。つまり、第4実施形態では、スレッド12の処理が遅延していることを検知したことと、メモリ不足が検知されたこととの何れかが検知された場合に、回避部400は、障害回避処理を実行する。これに対して、この第5実施形態では、回避部400は、スレッド12の処理の遅延と、メモリ不足とが予め定められた時間(例えば100秒)内に両方共に検知され確定された場合のみ、障害回避処理を実行する。
【0101】
サーバ装置10のそれ以外の構成は、第4実施形態のサーバ装置10と同様である。この第5実施形態のサーバ装置10においても、第4実施形態のサーバ装置10と同様の効果を得ることができる。
【0102】
なお、本発明は、第1〜第5の実施形態に限定されず、様々な実施形態を採り得る。
【0103】
また、この出願は、2013年9月27日に出願された特願2013−201451を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【0104】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
(付記1)
プログラムの実行時に生成されプログラムの実行単位であるプロセスと、
前記プロセスに生成され前記プロセスの処理単位である複数のスレッドと、
障害対策部と
を備え、さらに、
前記各スレッドを識別するスレッド識別情報と、該スレッド識別情報により特定されるスレッドが処理を開始した時刻を示す処理開始時刻情報とを関連付けて記憶するスレッド開始時間記憶部と、
前記プロセスに予め定められた数を超える数の前記スレッドの生成が必要となった場合に生成可能な前記スレッドの最大数を示す値を最大スレッド数として記憶する最大スレッド数記憶部と、
前記スレッドが処理を終了した時点から、該スレッドが次の処理を実行できる状態になるまでの時間を示す値を処理間隔として記憶する処理間隔記憶部と
を備え、
前記障害対策部は、
回避部と、
いずれかの前記スレッドが処理を終了した時、当該処理に要した時間を、当該スレッドの前記スレッド識別情報と関連付けられ記憶されている前記処理開始時刻情報と、現在の時刻とに基づいて算出する機能を備えている遅延検知部と
を備え、
前記回避部は、
いずれかの前記スレッドが処理を終了した時に前記遅延検知部が算出した処理時間が予め定められた第1の時間以上である場合、前記最大スレッド数記憶部に記憶されている前記最大スレッド数を予め定められた第1の値から該第1の値より小さい予め定められた第2の値に変更するとともに、前記処理間隔記憶部に記憶されている前記処理間隔を予め定められた第3の値から該第3の値より大きい予め定められた第4の値に変更する障害回避処理を実行する
ことを特徴とする情報処理装置。
(付記2)
プログラムの実行時に生成されプログラムの実行単位であるプロセスと、
前記プロセスに生成され前記プロセスの処理単位である複数のスレッドと、
障害対策部と
を備え、さらに、
前記プロセスに属する前記スレッドの総数を示す値を記憶するスレッド総数記憶部と、
前記スレッドを識別するスレッド識別情報と、該スレッド識別情報により特定される前記スレッドが処理を開始した時刻を示す処理開始時刻情報とを関連付けて記憶するスレッド開始時間記憶部と、
前記プロセスに予め定められた数を超える数のスレッドの生成が必要となった場合に生成可能なスレッドの最大数を示す値を最大スレッド数として記憶する最大スレッド数記憶部と、
前記スレッドが処理を終了した時点から、当該スレッドが次の処理を実行できる状態になるまでの時間を示す値を処理間隔として記憶する処理間隔記憶部と、
次の処理に備えている待機中の前記スレッドの数を示す値を待機スレッド数として記憶する待機スレッド数記憶部と
を備え、
前記障害対策部は、
回避部と、
いずれかの前記スレッドが処理を終了した時、当該処理に要した時間を、前記スレッド開始時間記憶部に当該スレッドを識別する前記スレッド識別情報と関連付けて記憶されている前記処理開始時刻情報と、現在の時刻とに基づいて算出する機能と、いずれかの前記スレッドが処理を終了した時、前記スレッド総数記憶部に記憶されている前記スレッドの総数に対する、前記待機スレッド数記憶部に記憶されている待機スレッド数の割合を待機スレッド割合として算出する機能とを備えた遅延検知部と
を備え、
前記回避部は、
いずれかの前記スレッドが処理を終了した時に前記遅延検知部が算出した前記スレッドの処理時間が予め定められた第1の時間以上であって、当該スレッドが処理を終了した時に前記遅延検知部が算出した待機スレッド割合が予め定められた値未満である場合、前記最大スレッド数記憶部に記憶されている前記最大スレッド数を予め定められた第1の値から当該第1の値より小さい予め定められた第2の値に変更するとともに、前記処理間隔記憶部に記憶されている前記処理間隔を予め定められた第3の値から当該第3の値より大きい予め定められた第4の値に変更する障害回避処理を実行する
ことを特徴とする情報処理装置。
(付記3)
前記回避部は、前記障害回避処理の実行後、いずれかの前記スレッドが処理を終了した時に前記処理時間が前記第1の時間よりも短い予め定められた第2の時間以下である場合、前記最大スレッド数記憶部に記憶されている前記最大スレッド数を前記第2の値から前記第1の値に変更するとともに、前記処理間隔記憶部に記憶されている前記処理間隔を前記第4の値から前記第3の値に変更する回復処理を実行する
ことを特徴とする付記1または付記2に記載の情報処理装置。
(付記4)
プログラムの実行時に生成されプログラムの実行単位であるプロセスと、
前記プロセスに生成され前記プロセスの処理単位である複数のスレッドと、
障害対策部と、
前記プロセスに割り当てられる記憶領域を有する記憶部と
を備え、
前記記憶部は、
前記プロセスに割り当てられている前記記憶部内の記憶領域の容量である割り当て容量と、
前記プロセスが使用している記憶領域の容量であるメモリ使用量と、
前記プロセスが生成可能なスレッドの最大数を示す値である最大スレッド数と、
前記スレッドが処理を終了した時点から、該スレッドが次の処理を実行できる状態になるまでの時間である処理間隔と
を記憶し、
前記障害対策部は、
回避部と、
前記割り当て容量に対する前記メモリ使用量の割合であるメモリ使用率を算出する機能を備えているメモリ不足検知部と
を備え、
前記メモリ不足検知部が予め定められた第1の時間間隔毎に前記メモリ使用率を算出し、この算出したメモリ使用率が予め定められた第1の値以上になった時、前記メモリ不足検知部が前記第1の時間間隔より短い予め定められた第2の時間間隔毎に前記メモリ使用率を算出し始め、予め定められた時間が経過するまでに、前記メモリ使用率が前記第1の値より大きい予め定められた第2の値以下にならない場合に、前記回避部は、前記プロセスの前記最大スレッド数を予め定められた第3の値から当該第3の値より小さい予め定められた第4の値に変更するとともに、前記スレッドの処理間隔を予め定められた第5の値から当該第5の値より大きい予め定められた第6の値に変更する障害回避処理を実行する
ことを特徴とする情報処理装置。
(付記5)
前記障害回避処理の実行後、前記メモリ不足検知部が前記第2の時間間隔毎に前記メモリ使用率を算出し、この算出したメモリ使用率が前記第1の値より小さくなった場合、前記回避部は、前記プロセスの前記最大スレッド数を前記第4の値から前記第3の値に変更するとともに、前記スレッドの前記処理間隔を前記第6の値から前記第5の値に変更する回復処理を実行する
ことを特徴とする付記4記載の情報処理装置。
(付記6)
プログラムの実行時に生成されプログラムの実行単位であるプロセスと、
前記プロセスに生成され前記プロセスの処理単位である複数のスレッドと、
障害対策部と、
前記プロセスに割り当てられる記憶領域を有する記憶部と
を備え、
前記記憶部は、
前記プロセスに割り当てられている前記記憶領域の容量である割り当て容量と、
前記プロセスが使用している記憶領域の容量であるメモリ使用量と、
前記スレッドを識別するスレッド識別情報に関連付けられ当該スレッド識別情報により特定されるスレッドが処理を開始した時刻を示す処理開始時刻情報と、
前記プロセスが生成可能なスレッドの最大数である最大スレッド数と、
前記スレッドが処理を終了した時点から、当該スレッドが次の処理を実行できる状態になるまでの時間である処理間隔と
を記憶し、
前記障害対策部は、
回避部と、
前記プロセスの前記割り当て容量に対する前記メモリ使用量の割合であるメモリ使用率を算出する機能を備えているメモリ不足検知部と、
いずれかの前記スレッドが処理を終了した時、当該処理に要した処理時間を、当該スレッドの前記スレッド識別情報に関連付けられている前記処理開始時刻情報と、現在の時刻とに基づいて算出する機能を備えている遅延検知部と
を備え、
いずれかの前記スレッドが処理を終了した時に前記処理時間が予め定められた第1の時間以上であるという第1の条件と、
前記メモリ使用率を予め定められた第1の時間間隔毎に算出し、この算出した前記メモリ使用率が予め定められた第1の値以上になった時、前記第1の時間間隔より短い予め定められた第2の時間間隔毎に前記メモリ使用率を算出し始め、予め定められた時間が経過するまでに、前記メモリ使用率が前記第1の値より大きい予め定められた第2の値以下にならないという第2の条件と
が予め定められた確認時間内に成立した場合にのみ、前記回避部は、前記プロセスの前記最大スレッド数を予め定められた第4の値から当該第4の値より小さい予め定められた第5の値に変更するとともに、前記スレッドの前記処理間隔を予め定められた第6の値から当該第6の値より大きい予め定められた第7の値に変更する障害回避処理を実行する
ことを特徴とする情報処理装置。
(付記7)
プログラムの実行時に生成されプログラムの実行単位であるプロセスと、
前記プロセスに生成され前記プロセスの処理単位である複数のスレッドと、
障害対策部と、
前記プロセスに割り当てられる記憶領域を有する記憶部と
を備え、
前記記憶部は、
前記プロセスに属する前記スレッドの総数と、
前記スレッドを識別するスレッド識別情報に関連付けられ当該スレッド識別情報により特定されるスレッドが処理を開始した時刻を示す処理開始時刻と、
前記プロセスが生成可能なスレッドの最大数である最大スレッド数と、
前記スレッドが処理を終了した時点から、当該スレッドが次の処理を実行できる状態になるまでの時間である処理間隔と、
前記プロセスに割り当てられている前記記憶部内の記憶領域の容量である割り当て容量と、
前記プロセスが使用している記憶領域の容量であるメモリ使用量と
を記憶し、
前記障害対策部は、
回避部と、
前記プロセスにおける前記割り当て容量に対する前記メモリ使用量の割合であるメモリ使用率を算出する機能を備えているメモリ不足検知部と、
いずれかの前記スレッドが処理を終了した時、当該処理に要した処理時間を、当該スレッドの前記スレッド識別情報に関連付けられている前記処理開始時刻情報と、現在の時刻とに基づいて算出する機能と、いずれかの前記スレッドが処理を終了した時、前記プロセスに生成されている前記スレッドの総数に対する、次の処理に備えている待機中の前記スレッドの数の割合を待機スレッド割合として算出する機能とを備えている遅延検知部と
を備え、
いずれかの前記スレッドが処理を終了した時にその処理に要した前記処理時間が予め定められた第1の時間以上であって、前記待機スレッド割合が予め定められた第1の値未満であるという第1の条件と、
前記メモリ不足検知部が予め定められた第1の時間間隔毎に前記メモリ使用率を算出し、この算出したメモリ使用率が予め定められた第2の値以上になった時、前記メモリ不足検知部は前記第1の時間間隔より短い予め定められた第2の時間間隔毎に前記メモリ使用率を算出し始め、予め定められた時間が経過するまでに、前記メモリ使用率が前記第2の値より大きい予め定められた第3の値以下にならないという第2の条件と
が予め定められた確認時間内に成立した場合にのみ、前記回避部は、前記プロセスの前記最大スレッド数を予め定められた第4の値から当該第4の値より小さい予め定められた第5の値に変更するとともに、当該プロセスの前記処理間隔を予め定められた第6の値から該第6の値より大きい予め定められた第7の値に変更する障害回避処理を実行する
ことを特徴とする情報処理装置。
(付記8)
前記回避部は、前記障害回避処理の実行後、
前記プロセスに属するいずれかの前記スレッドが処理を終了した時にその処理に要した前記処理時間が前記第1の時間よりも短い予め定められた第2の時間以下であるという第3の条件と、
前記メモリ不足検知部が前記第2の時間間隔毎に前記メモリ使用率を算出し、この算出したメモリ使用率が前記第1の値より小さいという第4の条件と、
が成立した場合にのみ、前記プロセスの前記最大スレッド数を前記第5の値から前記第4の値に変更するとともに、前記スレッドの前記処理間隔を前記第7の値から前記第6の値に変更する回復処理を実行する
ことを特徴とする付記6または付記7に記載の情報処理装置。
(付記9)
プログラムを実行する際に当該プログラムの実行単位であるプロセスを生成し、
前記プロセスに属し前記プロセスの処理単位である複数のスレッドを生成し、
いずれかの前記スレッドが処理を終了した時、当該処理に要した処理時間を、当該スレッドを識別するスレッド識別情報に関連付けられ記憶部に記憶されている処理開始時刻情報と、現在の時刻とに基づいて算出し、
また、いずれかの前記スレッドが処理を終了した時、前記プロセスに属している前記スレッドの総数に対する、次の処理に備えている待機中の前記スレッドの数の割合を待機スレッド割合として算出し、
さらに、算出された前記処理時間が予め定められた時間以上であって、待機スレッド割合が予め定められた値未満である場合、前記プロセスの前記最大スレッド数を小さくする方向に変更するとともに、前記プロセスの前記処理間隔を長く方向に変更する
を含む障害回避方法。
(付記10)
プログラムを実行する際に当該プログラムの実行単位であるプロセスを生成し、
前記プロセスに割り当てられている記憶領域の記憶容量に対する、使用している記憶容量であるメモリ使用量の割合であるメモリ使用率を予め定められた第1の時間間隔毎に算出し、
前記メモリ使用率が予め定められた第1の値以上になった時、前記第1の時間間隔より短い予め定められた第2の時間間隔毎に前記メモリ使用率を算出し始め、予め定められた時間が経過するまでに、前記メモリ使用率が前記第1の値より大きい予め定められた第2の値以下にならない場合に、前記プロセスに属することが可能な最大スレッド数を小さくする方向に変更するとともに、前記スレッドが処理を終了してから次の処理が可能な状態になるまでの処理間隔を大きくする方向に変更する
障害回避方法。