(57)【要約】【課題】コンピュータ資源の解放漏れを早期に検知し、かつ、コンピュータ資源使用量増加率の大小にかかわらず、コンピュータ資源解放漏れ有無の誤判定を行うおそれを少なくする。【解決手段】メモリリーク判定装置（資源解放漏れ判定装置）１において、メモリ使用量取得部（資源使用量取得部）２１が、各プロセスのメモリ使用量（資源使用量）を取得し、最大値更新回数計数部２２が、メモリ使用量の最大値更新回数をプロセス毎に計数する。メモリリーク判定部（資源解放漏れ判定部）２３は、メモリ使用量の最大値更新回数が所定の閾値以上、かつ、メモリ使用量が所定の閾値以上の場合に、メモリリーク（資源解放漏れ）有りと判定する。【選択図】図１
2011233075.tif 000002
【特許請求の範囲】
【請求項１】
プロセスが使用するコンピュータ資源の解放漏れの有無を判定する資源解放漏れ判定装置であって、
前記プロセスのコンピュータ資源使用量を取得するコンピュータ資源使用量取得部と、
前記コンピュータ資源使用量取得部が取得する前記コンピュータ資源使用量の最大値更新回数を計数する最大値更新回数計数部と、
前記最大値更新回数計数部が計数する前記最大値更新回数に基づいて、前記コンピュータ資源の解放漏れの有無を判定する解放漏れ判定部と、
を具備することを特徴とする資源解放漏れ判定装置。
【請求項２】
プロセスがメモリを使用する際のメモリリークの有無を判定するメモリリーク判定装置であって、
前記プロセスのメモリ使用量を取得するメモリ使用量取得部と、
前記メモリ使用量取得部が取得する前記メモリ使用量の最大値更新回数を計数する最大値更新回数計数部と、
前記最大値更新回数計数部が計数する前記最大値更新回数に基づいて、前記メモリリークの有無を判定するメモリリーク判定部と、
を具備することを特徴とするメモリリーク判定装置。
【請求項３】
前記メモリリーク判定部は、前記最大値更新回数が所定の回数より以上となり、かつ、前記メモリ使用量が閾値以上となった場合に、前記メモリリーク有りと判定することを特徴とする請求項２に記載のメモリリーク判定装置。
【請求項４】
前記メモリリーク判定部は、前記メモリ使用量取得部が最初に取得した前記メモリ使用量であるメモリ使用量初期値を所定定数倍した値を前記閾値とすることを特徴とする請求項３に記載のメモリリーク判定装置。
【請求項５】
前記メモリ使用量取得部は、複数の前記プロセスのメモリ使用量の合計値を前記メモリ使用量として取得することを特徴とする請求項２から４のいずれか１項に記載のメモリリーク判定装置。
【請求項６】
プロセスが使用するコンピュータ資源の解放漏れの有無を判定する資源解放漏れ判定装置の資源漏れ判定方法であって、
コンピュータ資源使用量取得部が、前記プロセスのコンピュータ資源使用量を取得するコンピュータ資源使用量取得ステップと、
最大値更新回数計数部が、前記コンピュータ資源使用量取得部が取得する前記コンピュータ資源使用量の最大値更新回数を計数する最大値更新回数計数ステップと、
解放漏れ判定部が、前記最大値更新回数計数部が計数する前記最大値更新回数に基づいて、前記コンピュータ資源の解放漏れの有無を判定する解放漏れ判定ステップと、
を具備することを特徴とする資源解放漏れ判定方法。
【請求項７】
プロセスが使用するコンピュータ資源の解放漏れの有無を判定する資源解放漏れ判定装置としてのコンピュータに、
前記プロセスのコンピュータ資源使用量を取得するコンピュータ資源使用量取得ステップと、
前記コンピュータ資源使用量取得部が取得する前記コンピュータ資源使用量の最大値更新回数を計数する最大値更新回数計数ステップと、
前記最大値更新回数計数部が計数する前記最大値更新回数に基づいて、前記コンピュータ資源の解放漏れの有無を判定する解放漏れ判定ステップと、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、資源解放漏れ判定装置、メモリリーク判定装置、資源解放漏れ判定方法およびプログラムに関する。
【背景技術】
【０００２】
プログラムのバグやウィルスの混入など何らかの原因で、オペレーティングシステム（Operating System；ＯＳ）やアプリケーションソフトのプロセスが、動的に確保したメモリ領域を開放しない現象は、メモリリークと呼ばれている。メモリリークが生じると、使用可能なメモリ領域が減少してコンピュータの処理能力が低下する、あるいは、コンピュータの動作が不安定になるおそれがある。
メモリリークの有無を判定する方法として、プロセス毎のメモリ使用量を検出し、いずれかのプロセスのメモリ使用量が所定の閾値を超えた場合に、メモリリーク有りと判定する方法がある。しかし、この方法では、メモリ使用量が当該閾値を超えるまでメモリリーク有りとの判定が行われず、メモリリークの検知が遅れてしまう。また、実際にはメモリリークが発生しておらず、メモリ使用量が一時的に閾値を超えたに過ぎない場合も、メモリリーク有りとの誤検出を行ってしまう。
そこで、特許文献１では、プロセス毎に、直近２４時間のメモリ使用量平均値と過去のメモリ使用量平均値とを比較してメモリ使用量増加率を算出し、いずれかのプロセスのメモリ使用量増加率が予め定められた閾値を超える場合に、メモリリーク有りと判定する方法が示されている。この方法によれば、メモリ使用量増加率に基づいてメモリリークの有無を判定するので、メモリ使用量が比較的小さい早期段階でメモリリークを検知し得る。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００５-２５０７５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１の方法では、比較的大きなメモリ領域を確保するプロセスが一定時間以上（例えば、直近２４時間近く）実行状態にある場合にも、メモリ使用量増加率が閾値を超えることが考えられる。この場合、実際にはメモリリークが発生していないにもかかわらず、メモリリーク有りとの誤判定を行ってしまうおそれがある。また、この方法では、メモリ使用量増加率が閾値以下のメモリリークを検出することはできない。
【０００５】
また、かかる課題は、メモリ資源に限らず様々なコンピュータ資源について生じうる。例えば、プロセスがオープンしたファイルのクローズ漏れの有無を、プロセスがオープンしたファイル数と閾値との比較により判定する場合や、マルチスレッド処理を行うプロセスのスレッド終了漏れを、スレッド数と閾値との比較により判定する場合も、上記の場合と同様に、オープンファイル数やスレッド数の一時的な増加により誤判定を行ってしまうおそれがある。
【０００６】
本発明は、このような事情を考慮してなされたものであり、その目的は、コンピュータ資源の解放漏れを早期に検知し、かつ、コンピュータ資源使用量増加率の大小にかかわらず、コンピュータ資源解放漏れ有無の誤判定を行うおそれの少ない資源解放漏れ判定装置、メモリリーク判定装置、資源解放漏れ判定方法およびプログラムを提供することにある。
【課題を解決するための手段】
【０００７】
この発明は上述した課題を解決するためになされたもので、本発明の一態様による資源解放漏れ判定装置は、プロセスが使用するコンピュータ資源の解放漏れの有無を判定する資源解放漏れ判定装置であって、前記プロセスのコンピュータ資源使用量を取得するコンピュータ資源使用量取得部と、前記コンピュータ資源使用量取得部が取得する前記コンピュータ資源使用量の最大値更新回数を計数する最大値更新回数計数部と、前記最大値更新回数計数部が計数する前記最大値更新回数に基づいて、前記コンピュータ資源の解放漏れの有無を判定する解放漏れ判定部と、を具備することを特徴とする。
【０００８】
また、本発明の一態様による資源解放漏れ判定方法は、プロセスが使用するコンピュータ資源の解放漏れの有無を判定する資源解放漏れ判定装置の資源漏れ判定方法であって、コンピュータ資源使用量取得部が、前記プロセスのコンピュータ資源使用量を取得するコンピュータ資源使用量取得ステップと、最大値更新回数計数部が、前記コンピュータ資源使用量取得部が取得する前記コンピュータ資源使用量の最大値更新回数を計数する最大値更新回数計数ステップと、解放漏れ判定部が、前記最大値更新回数計数部が計数する前記最大値更新回数に基づいて、前記コンピュータ資源の解放漏れの有無を判定する解放漏れ判定ステップと、を具備することを特徴とする。
【０００９】
また、本発明の一態様によるプログラムは、プロセスが使用するコンピュータ資源の解放漏れの有無を判定する資源解放漏れ判定装置としてのコンピュータに、前記プロセスのコンピュータ資源使用量を取得するコンピュータ資源使用量取得ステップと、前記コンピュータ資源使用量取得部が取得する前記コンピュータ資源使用量の最大値更新回数を計数する最大値更新回数計数ステップと、前記最大値更新回数計数部が計数する前記最大値更新回数に基づいて、前記コンピュータ資源の解放漏れの有無を判定する解放漏れ判定ステップと、を実行させるためのプログラムである。
【発明の効果】
【００１０】
本発明によれば、コンピュータ資源の解放漏れを早期に検知し、かつ、コンピュータ資源使用量増加率の大小にかかわらず、コンピュータ資源解放漏れ有無の誤判定を行うおそれを少なくできる。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施形態におけるメモリリーク判定装置の概略構成を示す構成図である。
【図２】同実施形態において、プロセス情報記憶部３１１が記憶するプロセス情報の例を示す図である。
【図３】同実施形態において、メモリ使用量情報記憶部３１２が記憶するメモリ使用量情報の例を示す図である。
【図４】同実施形態において、判定条件情報記憶部３１３が記憶する判定条件情報の例を示す図である。
【図５】同実施形態において、処理内容情報記憶部３１４が記憶する処理内容情報の例を示す図である。
【図６】同実施形態において、処理結果情報記憶部３１５が記憶する処理結果情報の例を示す図である。
【図７】同実施形態において、メモリリーク判定部２３が、メモリリーク有りと判定する例を示すグラフである。
【図８】同実施形態において、メモリリーク判定部が、メモリリーク無しと判定する第１の例を示すグラフである。
【図９】同実施形態において、メモリリーク判定部が、メモリリーク無しと判定する第２の例を示すグラフである。
【図１０】同実施形態において、メモリリーク判定部が、メモリリーク無しと判定する第３の例を示すグラフである。
【図１１】同実施形態において、メモリリーク判定装置１が、ある１つのプロセスに関して行う、メモリリーク有無の判定処理手順を示す図である。
【図１２】本発明の第１の変形例におけるファイルリーク判定装置の概略構成を示す構成図である。
【図１３】本発明の第２の変形例におけるスレッドリーク判定装置の概略構成を示す構成図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して、本発明の実施の形態について説明する。
図１は、本発明の一実施形態におけるメモリリーク判定装置の概略構成を示す構成図である。同図において、メモリリーク判定装置（資源解放漏れ判定装置）１は、操作入力部１１と、表示部１２と、メモリ使用量取得部（コンピュータ資源使用量取得部）２１と、最大値更新回数計数部２２と、メモリリーク判定部（解放漏れ判定部）２３と、対策処理実行部２４と、記憶部３１とを具備する。記憶部３１は、プロセス情報記憶部３１１と、メモリ使用量情報記憶部３１２と、判定条件情報記憶部３１３と、処理内容情報記憶部３１４と、処理結果情報記憶部３１５とを具備する。
【００１３】
メモリリーク判定装置１は、コンピュータ上のプロセスのメモリ使用量に基づいて、メモリリークの有無を判定する。
記憶部３１は、メモリリーク判定対象のコンピュータ（以下では、単に「コンピュータ」という）の記憶領域上に実現されて、各種情報を記憶する。プロセス情報記憶部３１１は、メモリリーク判定装置１が各プロセスのメモリ使用量を取得するために用いる情報であるプロセス情報をプロセス毎に記憶する。
図２は、プロセス情報記憶部３１１が記憶するプロセス情報の例を示す図である。同図の例では、プロセス情報には、プロセスの識別番号である「プロセスＩＤ」と、当該プロセスの「プロセス名」と、当該プロセスの「実行開始時刻」と、メモリリーク判定装置１が次に当該プロセスのメモリ使用量を取得する時刻である「次回時刻」とが含まれている。
【００１４】
メモリ使用量情報記憶部３１２は、実行中のプロセスのメモリ使用量に関する情報であるメモリ使用量情報をプロセス毎に記憶する。
図３は、メモリ使用量情報記憶部３１２が記憶するメモリ使用量情報の例を示す図である。同図の例では、メモリ使用量情報には、上述した「プロセスＩＤ」および「プロセス名」と、当該プロセスのメモリ使用量の「初期値」および「最大値」および「現在値」と、当該最大値が更新された回数を示す「最大値更新回数」と、メモリリーク判定装置１がメモリリークの判定を行う際に用いる閾値である「メモリ使用量閾値」とが含まれている。
【００１５】
判定条件情報記憶部３１３は、メモリリーク判定装置１がメモリリークの判定を行う際の閾値や閾値算出基準を記憶する。
図４は、判定条件情報記憶部３１３が記憶する判定条件情報の例を示す図である。同図の例では、判定条件情報には、メモリ使用量最大値の更新回数の閾値である「更新回数閾値」と、メモリ使用量の閾値の算出基準である「メモリ使用量閾値算出係数」と、メモリリーク判定装置１がメモリリークの有無を判定する時間間隔である「判定時間間隔」とが含まれている。更新回数閾値とメモリ使用量閾値算出係数と判定時間間隔とは、例えば、ユーザの操作を受けた操作入力部１１が、判定条件情報記憶部３１３に書き込む。
【００１６】
処理内容情報記憶部３１４は、メモリリーク有りと判定されたプロセスに対する処理の内容を記憶する。
図５は、処理内容情報記憶部３１４が記憶する処理内容情報の例を示す図である。同図の例で示すように、処理内容情報には、メモリリーク有りと判定されたプロセスに対して行う処理の「処理項目名」と、当該処理を実行するための「実行コマンド」と、当該処理を行うか否かを示す「選択フラグ」とが含まれている。処理項目名としては、メモリリーク有りと判定されたプロセスを停止させる（ＫＩＬＬする）「対象プロセス停止」や、予め定められたスクリプトを実行する「スクリプト実行」や、メモリリークに関する情報をログに出力する「ログ出力」と、メモリリークが発生したことをユーザ（コンピュータの管理者）に警告する「警告表示」とが示されている。実行コマンド欄には、当該処理を実行するためのコマンドが格納されている。また、選択フラグの「○」は、当該処理を行うことを示し、「×」は当該処理を行わないことを示す。選択フラグの値は、例えば、ユーザの入力操作を受けた操作入力部１１が、処理内容情報記憶部３１４に書き込む。
【００１７】
処理結果情報記憶部３１５は、メモリリーク有りと判定されたプロセスに対する処理結果を記憶する。
図６は、処理結果情報記憶部３１５が記憶する処理結果情報の例を示す図である。同図の例では、処理結果情報には、メモリリーク判定装置がメモリリーク有りと判定した「判定時刻」と、メモリリーク有りと判定されたプロセスの「プロセスＩＤ」および「プロセス名」と、当該プロセスに対する「処理項目名」と、当該処理を行った結果の記録である「処理結果」とが含まれている。
【００１８】
メモリ使用量取得部２１は、実行中の各プロセスのメモリ使用量を取得して、メモリ使用量情報記憶部３１２の現在値の欄に書き込む。例えばメモリリーク有無の判定時間間隔が５分に設定されている場合、メモリ使用量取得部２１は、プロセス情報記憶部３１１が記憶する次回時刻に基づいてメモリ使用量を取得し、取得後速やかに、次回時刻に５分加算することにより、実行中の各プロセスについて５分毎にメモリ使用量を取得する。
最大値更新回数計数部２２は、メモリ使用量取得部の取得するメモリ使用量が最大値か否かを判定し、最大値と判定した場合は、メモリ使用量情報記憶部３１２の記憶するメモリ使用量の最大値と最大値更新回数とを書き換える。
【００１９】
メモリリーク判定部２３は、メモリリークの有無を、プロセスのメモリ使用量の最大値更新回数が更新回数閾値以上であり、かつ、メモリ使用量の現在値がメモリ使用量閾値以上であるか否かに基づいて、メモリリークの有無を判定する。
対策処理実行部２４は、メモリリーク判定部２３がメモリリーク有りと判定した場合に、処理内容情報記憶部３１４が記憶する処理内容情報に基づいて対策処理を行う。
【００２０】
操作入力部１１は、キーボードやマウス等を具備し、ユーザの入力操作を受け付ける。操作入力部１１は、更新回数閾値、または、メモリ使用量閾値算出係数の入力を受け付けると判定条件情報記憶部３１３の該当欄に書込み、選択フラグの値の入力を受け付けると処理内容情報記憶部３１４の記憶する選択フラグの該当欄に書き込む。
表示部１２は、液晶ディスプレイ等の表示画面を含み、メモリリーク発生時に警告を表示する。具体的には、警告表示の選択フラグが「○」になっている場合、メモリリークが発生すると、対策処理実行部２４から表示部１２に対して、警告画面の画像データが出力される。表示部１２は、対策処理実行部２４から出力される画像データに基づいて、メモリリーク発生を示す警告画面を表示する。
【００２１】
なお、メモリリーク判定装置１は、メモリリーク判定対象のコンピュータ内に実現されていてもよいし、当該コンピュータとは独立した装置として実現されていてもよい。
メモリリーク判定装置１がメモリリーク判定対象のコンピュータ内に実現される場合、例えば、メモリ使用量取得部２１と、最大値更新回数計数部２２と、メモリリーク判定部２３と対策処理実行部２４とは、コンピュータの中央演算装置（Central Processing Unit；ＣＰＵ）上のプロセスとして実現され、記憶部３１の各部は、コンピュータの記憶装置上に記憶領域を確保することにより実現される。
【００２２】
メモリリーク判定装置１がメモリリーク判定対象のコンピュータと独立した装置として実現される場合、メモリリーク判定装置１は、メモリリーク判定対象のコンピュータと通信して当該コンピュータ上で実行中の各プロセスのメモリ使用量を取得する。また、メモリリーク有りと判定した場合は、当該コンピュータに対策処理の実行を指示する信号を送信する。メモリリーク判定装置１は、他のコンピュータ上に実現されていてもよいし、専用の演算回路等により専用のハードウェア装置として実現されていてもよい。
【００２３】
次に、図７〜図１０を参照して、メモリリーク判定部２３が行うメモリリーク有無の判定について説明する。
図７は、メモリリーク判定部２３が、メモリリーク有りと判定する例を示すグラフであり、メモリ使用量取得部２１が取得する、あるプロセスのメモリ使用量の変化を示す。同図の縦軸はメモリサイズを示す。また、同図の横軸は時間軸であり、プロセスが起動してからの時間を示す。点Ｐ１０１〜Ｐ１１０は、それぞれの時間においてメモリ使用量取得部２１が取得する、当該プロセスのメモリ使用量を示す。また、ＴＨＲはメモリ使用量閾値であり、メモリ使用量初回取得時の点Ｐ１０１におけるメモリ使用量ＶＰに、判定条件情報記憶部３１３が記憶するメモリ使用量閾値算出係数を乗じた値を示す。
【００２４】
メモリリーク判定部２３は、メモリ使用量情報記憶部３１２のメモリ使用量情報を参照して、メモリ使用量の現在値がメモリ使用量閾値以上であり、かつ、メモリ使用量最大値更新回数が判定条件情報記憶部３１３の記憶する更新回数閾値以上である場合にメモリリーク有りと判定する。以下、図７〜図１０で説明する例では、更新回数閾値は「８」に設定されている。
図７の例では、点Ｐ１０９および点Ｐ１１０において、メモリ使用量の現在値がメモリ使用量閾値ＴＨＲ以上となっている。また、最大値更新回数計数部２２は、メモリ使用量初回取得時の点Ｐ１０１では、最大値更新回数を「０」としてメモリ使用量情報記憶部３１２の最大値更新回数欄に書き込む。以降、点Ｐ１０２で最大値更新回数を「１」、点Ｐ１０３で「２」というように、最大値が更新される毎に最大値更新回数に１を加算してメモリ使用量情報記憶部３１２の最大値更新回数欄に書き込む。図７の場合、点Ｐ１０６では最大値が更新されていないので、点Ｐ１１０において、最大値更新回数が更新回数閾値の「８」に達する。
【００２５】
あるプロセスにメモリリークが発生している場合、当該プロセスが確保したメモリ領域のうちメモリリークする領域が解放されないので、当該プロセスのメモリ使用量は図７に示すように時間経過に応じて増加していくと考えられる。そこで、メモリリーク判定部２３は、メモリ使用量の最大値更新回数が更新回数閾値以上であることを、メモリリーク判定条件の１つとしている。一方、プロセスの正常動作においてメモリ使用量が増加する場合は、当該プロセスの確保したメモリ領域が処理終了後に解放されることにより、当該プロセスのメモリ使用量が一定の範囲内に収まる、すなわち一定値以上とならないことが期待できる。そこで、メモリリーク判定部２３は、プロセスの正常動作におけるメモリ使用量の漸増によりメモリリーク有りとする誤判定を低減させるために、メモリ使用量の現在値が、メモリ使用量閾値ＴＨＲ以下である場合は、メモリ使用量の最大値更新回数が更新回数閾値以上か否かにかかわらず、メモリリーク無しと判定する。
【００２６】
なお、メモリリーク判定部２３が、メモリ使用量最大値の更新回数と更新回数閾値との比較のみでメモリリークの有無を判定するようにしてもよい。この場合、メモリ使用量の最大値更新回数が更新回数閾値以上となると、メモリリーク判定部２３は、メモリ使用量の現在値にかかわらずメモリリーク有りと判定するので、より早い段階でメモリリークを検出し得る。
一方、上述のように、メモリ使用量最大値の更新回数が更新回数閾値以上であることに加えて、メモリ使用量の現在値がメモリ使用量閾値ＴＨＲ以上であることも判定条件とすることにより、正常動作におけるメモリ使用量の漸増によりメモリリーク有りと誤判定する可能性を低減できる。
【００２７】
なお、プロセス起動直後は、プロセスが未だメモリ領域を確保しておらず、メモリ使用量が極端に小さい値を示すことが考えられる。このため、メモリ使用量取得部２１が、メモリ使用量の初回取得値としてプロセス起動直後のメモリ使用量を取得し、この値に基づいてメモリ使用量閾値ＴＨＲを算出すると、メモリ使用量閾値ＴＨＲの値が極端に小さい値となり、上述した、プロセスの正常動作におけるメモリ使用量の漸増によりメモリリーク有りとする誤判定の低減を行えないおそれがある。そこで、メモリ使用量取得部２１は、プロセス起動から一定時間経過後の点Ｐ１０１において初回のメモリ使用量取得を行っている。
なお、プロセスが起動時に直ちにメモリ領域を確保するようプログラムされている場合は、メモリ使用量取得部２１が、プロセス起動時に初回のメモリ使用量取得を行うようにしてもよい。これにより、メモリ使用量取得部２１が、プロセス起動から一定時間経過後に初回のメモリ使用量取得を行う場合よりも更に早い段階でメモリリークを検出し得る。
【００２８】
図８は、メモリリーク判定部が、メモリリーク無しと判定する第１の例を示すグラフであり、プロセスのメモリ使用量が一時的にメモリ使用量閾値以上となる例を示している。図７と同様、図８の縦軸はメモリサイズを示し、横軸はプロセスが起動してからの時間を示す。点Ｐ２０１〜Ｐ２１０は、それぞれの時間においてメモリ使用量取得部２１が取得する、当該プロセスのメモリ使用量を示す。ＴＨＲはメモリ使用量閾値を示す。
【００２９】
グラフ表示されているプロセスのメモリ使用量は、点Ｐ２０２においてメモリ使用量閾値ＴＨＲ以上となっているが、この時点でのメモリ使用量の最大値更新回数は「１」であり、更新回数閾値「８」未満なので、メモリリーク判定部２３は、メモリリーク無しと判定する。また、点Ｐ２０３〜Ｐ２１０でのメモリ使用量は、点Ｐ２０２でのメモリ使用量以下なので、メモリ使用量の最大値更新回数は「１」のまままである。このため、メモリ使用量の最大値更新回数が「０」の点Ｐ２０１も含め、点Ｐ２０１および点Ｐ２０３〜Ｐ２１０でも、メモリリーク判定部２３は、メモリリーク無しと判定する。なお、点Ｐ２０１および点Ｐ２０３〜２１０では、メモリ使用量の現在値がメモリ使用量閾値ＴＨＲ未満であることからも、メモリリーク判定部２３は、メモリリーク無しと判定する。
【００３０】
このように、メモリリーク判定部２３は、メモリ使用量の最大値更新回数に基づいてメモリリークの有無を判定するので、メモリ使用量とメモリ使用量閾値との比較のみでメモリリークの判定を行う方法とは異なり、プロセスの正常動作において増減するメモリ使用量が、一時的にメモリ使用量閾値よりも大きくなった場合に、メモリリーク有りと誤判定する可能性を低減できる。
【００３１】
図９は、メモリリーク判定部が、メモリリーク無しと判定する第２の例を示すグラフであり、プロセスが定期的に一定のメモリ領域を確保する場合の例を示している。図７〜図８と同様、図９の縦軸はメモリサイズを示し、横軸はプロセスが起動してからの時間を示す。点Ｐ３０１〜Ｐ３１０は、それぞれの時間においてメモリ使用量取得部２１が取得する、当該プロセスのメモリ使用量を示す。ＴＨＲはメモリ使用量閾値を示す。
【００３２】
グラフ表示されているプロセスのメモリ使用量は、点Ｐ３０２においてメモリ使用量閾値ＴＨＲ以上となっているが、この時点でのメモリ使用量の最大値更新回数は「１」であり、更新回数閾値「８」未満なので、メモリリーク判定部２３は、メモリリーク無しと判定する。また、点Ｐ３０６および点Ｐ３０９でのメモリ使用量は、点Ｐ３０３でのメモリ使用量と同じであり、点Ｐ３０４〜Ｐ３１０でメモリ使用量の最大値更新回数は「１」のままである。このため、メモリ使用量の最大値更新回数が「０」の点Ｐ３０１〜Ｐ３０２も含め、点Ｐ３０１〜Ｐ３０２および点Ｐ３０４〜Ｐ３１０でも、メモリリーク判定部２３は、メモリリーク無しと判定する。なお、点Ｐ３０１とＰ３０２とＰ３０４とＰ３０５とＰ３０７とＰ３０８とＰ３１０とでは、メモリ使用量の現在値がメモリ使用量閾値ＴＨＲ未満であることからも、メモリリーク判定部２３は、メモリリーク無しと判定する。
【００３３】
このように、メモリリーク判定部２３は、メモリ使用量の最大値更新回数に基づいてメモリリークの有無を判定するので、メモリ使用量とメモリ使用量閾値との比較のみでメモリリークの判定を行う方法とは異なり、プロセスの正常動作において増減するメモリ使用量が、定期的にメモリ使用量閾値よりも大きくなる場合にも、メモリリーク有りと誤判定する可能性を低減できる。
【００３４】
図１０は、メモリリーク判定部が、メモリリーク無しと判定する第３の例を示すグラフであり、プロセスのメモリ使用量がメモリ使用量閾値未満の範囲で変化する場合の例を示している。図７〜図９と同様、図１０の縦軸はメモリサイズを示し、横軸はプロセスが起動してからの時間を示す。点Ｐ４０１〜Ｐ４１０は、それぞれの時間においてメモリ使用量取得部２１が取得する、当該プロセスのメモリ使用量を示す。ＴＨＲはメモリ使用量閾値を示す。
【００３５】
同図の例では、点Ｐ４０２〜Ｐ４０９でメモリ使用量の最大値が更新され、点４０９で最大値更新回数が更新回数閾値と同じ「８」となっている。しかし、点Ｐ４０９の現在値は判定閾値ＴＨＲよりも小さいため、メモリリーク判定部２３は、点Ｐ４０９でメモリリーク無しと判定する。また、点Ｐ４０１〜Ｐ４０８およびＰ４１０でも、メモリ使用量はメモリ使用量閾値未満であり、メモリリーク判定部２３はメモリリーク無しと判定する。なお、点Ｐ４０１〜Ｐ４０８では、メモリ使用量の最大値更新回数は、更新回数閾値「８」未満であり、この点でも、メモリリーク判定部２３は、メモリリーク無しと判定する。
【００３６】
プロセスの正常動作においてメモリ使用量が増加する場合は、当該プロセスの確保したメモリ領域が処理終了後に解放されることにより、例えば図１０の点P４１０のように、メモリ使用量が減少することが期待できる。これにより、当該プロセスのメモリ使用量が一定の範囲内に収まる、すなわち一定値以上とならないことが期待できる。そこで、前述したように、メモリリーク判定部２３は、プロセスの正常動作におけるメモリ使用量の漸増によりメモリリーク有りとする誤判定を低減させるために、メモリ使用量の現在値が、メモリ使用量閾値ＴＨＲ以上であることを、メモリリーク判定条件の１つとしている。
【００３７】
次に、図１１を参照して、メモリリーク判定装置１の動作について説明する。
図１１は、メモリリーク判定装置１が、ある１つのプロセスに関して行う、メモリリーク有無の判定処理手順を示す図である。メモリリーク判定装置１は、新たにプロセスが実行されると同図の処理を開始する。以下では、同図でメモリリーク有無の判定対象となるプロセスを「対象プロセス」という。
新たに対象プロセスが実行されると、例えばＯＳ（Operating System）が、対象プロセスのプロセスＩＤとプロセス名と実行開始時刻とをメモリ使用量取得部２１に出力する。メモリ使用量取得部２１は、ＯＳから出力されたプロセスＩＤとプロセス名と実行開始時刻とを対応付けて、プロセス情報記憶部３１１が記憶するプロセス情報に追加する。また、メモリ使用量取得部２１は、ＯＳから出力されたプロセスＩＤとプロセス名とを対応付けて、メモリ使用量情報記憶部３１２が記憶するメモリ使用量情報に追加する（以上、ステップＳ１０１）。
【００３８】
その後、メモリ使用量取得部２１は、所定の時間経過を待って（ステップＳ１０２）、対象プロセスのメモリ使用量を取得する（ステップＳ１０３）。
所定の時間経過を待つのは、上述したように、対象プロセスが未だメモリ領域を確保していない状態における、極端に小さいメモリ使用量に基づいて、メモリ使用量閾値ＴＨＲを算出することを防止するためである。ステップＳ１０２での待ち時間は、判定条件情報記憶部３１３が記憶する判定時間間隔と同じであってもよいし、判定時間間隔とは別に定められた時間であってもよい。例えば、ユーザが、プロセスの正常動作時における時間毎のメモリ使用量の統計をとり、この統計に基づいてステップＳ１０２の待ち時間とメモリ使用量閾値算出係数とを決定して判定条件情報記憶部３１３に書き込むようにしてもよい。
メモリ使用量取得部２１は、例えば、実行中の各プロセスのプロセスＩＤとプロセス名とメモリ使用量との出力をＯＳから随時受けており、ステップＳ１０２の所定時間経過時にＯＳから出力されるメモリ使用量を、メモリ使用量取得値とする。
【００３９】
メモリ使用量取得部２１は、取得したメモリ使用量を、メモリ使用量情報記憶部３１２の記憶するメモリ使用量情報の、対象プロセスの行の初期値欄と最大値欄と現在値欄とに書き込む。また、メモリ使用量取得部２１は、判定条件情報記憶部３１３からメモリ使用量閾値算出係数を読み出し、読み出したメモリ使用量閾値算出係数を、先に取得したメモリ使用量に乗じることにより、メモリ使用量閾値を算出する。メモリ使用量取得部２１は、算出したメモリ使用量閾値を、メモリ使用量情報の対象プロセスの行のメモリ使用量閾値欄に書き込む。さらに、メモリ使用量取得部２１は、メモリ使用量情報の対象プロセスの行の最大値更新回数欄に「０」を書き込む。加えて、メモリ使用量取得部２１は、判定条件情報記憶部３１３から判定時間間隔を読み出し、読み出した判定時間間隔を、ステップＳ１０３においてメモリ使用量を取得した時刻に加えることにより、対象プロセスのメモリリーク有無の判定を次に行う時刻を算出する。メモリ使用量取得部２１は、算出した時刻を、プロセス情報の当該プロセスの行の次回時刻欄に書き込む（以上、ステップＳ１０４）。
【００４０】
そして、メモリ使用量取得部２１は、次回時刻に書き込んだ時刻となるまで時間経過待ちを行う（ステップＳ１０５）。その後、メモリ使用量取得部２１は、対象プロセスが実行中か否かを判定する。例えば、メモリ使用量取得部２１は、ＯＳから随時出力される実行中のプロセスの情報に、対象プロセスのプロセスＩＤとプロセス名とが含まれている場合は、対象プロセスが実行中であると判定する。一方、対象プロセスのプロセスＩＤとプロセス名とが含まれていない場合は、メモリ使用量取得部２１は、対象プロセスが実行中ではないと判定する（以上、ステップＳ１０６）。対象プロセスが実行中でないと判定した場合（ステップＳ１０６：ＮＯ）、メモリ使用量取得部２１は、プロセス情報とメモリ使用量情報とから、対象プロセスの行を削除する（ステップＳ１２１）。その後、図１１の処理を終了する。
【００４１】
一方、ステップＳ１０６で、対象プロセスが実行中であると判定した場合（ステップＳ１０６：ＹＥＳ）、メモリ使用量取得部２１は、対象プロセスのメモリ使用量を取得し（ステップＳ１０７）、メモリ使用量情報記憶部３１２が記憶する対象プロセスのメモリ使用量の現在値を、取得したメモリ使用量に更新する。
また、メモリ使用量取得部２１は、プロセス情報記憶部３１１が記憶するプロセス情報から次回時刻を読み出す。上述したように、次回時刻は、メモリリーク判定装置１（のメモリリーク判定部２３）が、次に対象プロセスのメモリリークを判定する時刻を示す情報である。また、メモリ使用量取得部２１は、判定条件情報記憶部３１３が記憶する判定条件情報から、判定時間間隔を読み出す。メモリ使用量取得部２１は、読み出した次回時刻に判定時間間隔を加えることにより新たな次回時刻を算出し、プロセス情報記憶部３１１の記憶する対象プロセスの次回時刻を、算出した次回時刻に更新する。
【００４２】
その後、メモリ使用量取得部２１は、メモリ使用量の現在値を更新したことを示す信号を最大値更新回数計数部２２に出力する。例えば、メモリ使用量取得部２１は、メモリ使用量現在値を更新したことを示す信号に対象プロセスのプロセスＩＤを含めて出力する。これにより、最大値更新回数計数部２２は、対象プロセスがどのプロセスかを把握できる（以上、ステップＳ１０８）。
【００４３】
最大値更新回数計数部２２は、メモリ使用量の現在値を更新したことを示す信号の出力を受けると、対象プロセスのメモリ使用量の現在値と最大値とをメモリ使用量情報記憶部３１２から読み出す。そして、最大値更新回数計数部２２は、最大値が更新されたか否か、すなわち、読み出した現在値が最大値よりも大きいか否かを判定する（以上、ステップＳ１０９）。最大値が更新されたと判定した場合（ステップＳ１０９：ＹＥＳ）、最大値更新回数計数部２２は、メモリ使用量情報記憶部３１２の記憶する、対象プロセスのメモリ使用量の最大値欄に、対象プロセスのメモリ使用量の現在値を書き込む。また、最大値更新回数計数部２２は、メモリ使用量情報記憶部３１２の記憶する、対象プロセスのメモリ使用量の最大値更新回数を、当該最大値更新回数に１を加えた値に更新する。
その後、最大値更新回数計数部２２は、メモリ使用量取得部２１から出力された、メモリ使用量の現在値を更新したことを示す信号を、メモリリーク判定部２３に出力（転送）する（以上、ステップＳ１１０）。
【００４４】
メモリリーク判定部２３は、メモリ使用量の現在値を更新したことを示す信号の出力を受けると、対象プロセスに関するメモリリークの有無を判定する。上述したように、メモリリーク判定部２３は、メモリ使用量情報記憶部３１２から、対象プロセスのメモリ使用量の現在値Ｍと、最大値更新回数Ｕと、メモリ使用量閾値ＴＭとを読み出し、判定条件情報記憶部３１３から、更新回数閾値ＴＵを読み出す。そして、メモリリーク判定部２３は、式（１）が成立する場合は、対象プロセスに関してメモリリーク有りと判定し、成立しない場合は、対象プロセスに関してメモリリーク無しと判定する（以上ステップＳ１１１）。
Ｍ≧ＴＭ、かつ、Ｕ≧ＴＵ  ・・・  式（１）
【００４５】
メモリリーク有りと判定した場合（ステップＳ１１１：ＹＥＳ）、メモリリーク判定部２３は、対策処理の実行を指示する信号に対象プロセスのプロセスＩＤを含めて対策処理実行部２４に出力する。
対策処理実行部２４は、対策処理の実行を指示する信号の出力を受けると、メモリリークに対する対策処理を実行する。具体的には、対策処理実行部２４は、対策処理の実行を指示する信号から対象プロセスのプロセスＩＤを読み出し、また、処理内容情報記憶部３１４から、選択フラグが「○」になっている処理の実行コマンドを読み出す。そして、対策処理実行部２４は、読み出したプロセスＩＤが示す対象プロセスに関して、読み出した実行コマンドを実行する（以上ステップＳ１１２）。その後、ステップＳ１０５に戻る。
【００４６】
一方、ステップＳ１０９において、最大値が更新されていないと判定した場合（ステップＳ１０９：ＮＯ）はステップＳ１１１に進む。すなわち、最大値および最大値更新回数を更新せずに、メモリリーク有無の判定に進む。
また、ステップＳ１１１でメモリリーク無しと判定した場合（ステップＳ１１１：ＮＯ）はステップＳ１０５に戻る。すなわち、メモリリークに対する対策処理を行わずに、次回時刻到達を待ち受ける。
【００４７】
以上のように、メモリリーク判定装置１のメモリリーク判定部２３は、対象プロセスのメモリ使用量の最大値更新回数が最大値更新回数閾値以上か否かに基づいてメモリリークの有無を判定する。したがって、プロセスのメモリ使用量が閾値以上か否かのみでメモリリークの有無を判定するメモリリーク判定装置と比較すると、メモリリーク判定装置１は、メモリ使用量が当該閾値未満の、より早い段階でメモリリークを検出できる。この点で、メモリリーク判定装置１は、メモリリークの発生を早期に検知できる。
また、実際にはメモリリークが発生しておらず、対象プロセスのメモリ使用量が一時的に増加したに過ぎない場合、メモリリーク判定装置１は、対象プロセスのメモリ使用量の最大値更新回数に基づいて、メモリリーク無しと判定し得る。
【００４８】
また、比較的大きなメモリ領域を確保するプロセスが一定時間以上実行状態にある場合など、メモリ使用量増加率が大きな値となる場合でも、メモリリークが発生していない場合は、メモリ使用量が一定の範囲内に収まり、メモリ使用量の最大値更新回数が最大値更新回数閾値を超えないことが期待できる。この場合、メモリリーク判定装置１は、メモリリーク無しと判定できる。この点で、メモリリーク判定装置１は、メモリ使用量増加率の大小にかかわらず、メモリリークの有無について誤判定を行うおそれが少ない。
さらに、メモリリークが発生している場合は、メモリ使用量の増加率の大小にかかわらず、メモリ使用量が増加し続けることが考えられる。メモリ使用量の増加率が小さい場合でも、メモリリーク検出装置１は、メモリ使用量の最大値更新回数が更新回数閾値以上、かつ、メモリ使用量がメモリ使用量閾値以上となった時点で、メモリ使用量が増加し続けていることを検出し、メモリリーク有りと判定できる。この点でも、メモリリーク判定装置１は、メモリ使用量増加率の大小にかかわらず、メモリリークの有無について誤判定を行うおそれが少ない。
【００４９】
また、メモリリーク判定部２３は、対象プロセスのメモリ使用量の最大値更新回数が最大値更新回数閾値以上か否かに加えて、対象プロセスのメモリ使用量の現在値がメモリ使用量閾値以上か否かに基づいてメモリリークの有無を判定する。これにより、メモリリークが発生しておらず、対象プロセスのメモリ使用量が一定の範囲内に収まる場合に、プロセスの正常動作におけるメモリ使用量の漸増によりメモリリーク有りとする誤判定を低減できる。
また、メモリリーク判定装置１は、プロセスのメモリ使用量が閾値以上か否かのみでメモリリークの有無を判定するメモリリーク判定装置と比較すると、メモリ使用量閾値を小さい値に設定しても誤判定の可能性を低減できる。なぜなら、対象プロセスのメモリ使用量が一時的にあるいは定期的にメモリ使用量閾値以上となる場合でも、対象プロセスのメモリ使用量の最大値更新回数が最大値更新回数閾値以上か否かの判定により、メモリリークが発生していないにもかかわらずメモリリーク有りとする誤判定の可能性を低減し得るからである。
したがって、プロセスのメモリ使用量が閾値以上か否かのみでメモリリークの有無を判定するメモリリーク判定装置よりも、対象プロセスのメモリ使用量が小さい段階で、すなわち、より早期にメモリリークを検出できる。
【００５０】
また、メモリリーク判定装置１では、メモリ使用量取得部２１は、メモリ使用量の初期値にメモリ使用量閾値算出係数を乗じた値、すなわち、メモリ使用量の初期値を所定定数倍した値をメモリ使用量閾値とし、メモリリーク判定部２３は、このメモリ使用量閾値を用いてメモリリークの有無を判定する。このように、メモリリーク判定部２３は、判定対象のプロセスの規模に応じて設定されたメモリ使用量閾値を用いてメモリリーク有無を判定するので、より正確にメモリリーク有無を判定できることが期待できる。
【００５１】
なお、メモリリーク判定部２３が、複数のプロセスについて纏めてメモリリークの有無を判定するようにしてもよい。例えば、メモリ使用量取得部２１は、実行中の全プロセスについてメモリ使用量を取得し、実行中の全プロセスのメモリ使用量を実行中のプロセス数で除したメモリ使用量平均値を算出する。メモリリーク判定部２３は、メモリ使用量取得部２１が算出したメモリ使用量平均値について、当該メモリ使用量平均値の最大値更新回数が更新回数閾値以上、かつ、当該メモリ使用量平均値がメモリ使用量平均値閾値以上のときに、メモリリーク有りと判定する。
このように、複数のプロセスについて纏めてメモリリークの有無を判定することにより、メモリ使用量情報等をプロセス毎に記憶する必要が無いので、メモリリーク判定に用いるメモリ容量を低減できる。
【００５２】
なお、メモリリーク判定部２３がメモリリークの有無の判定に用いるメモリ使用量閾値は、上述したメモリ使用量の初期値に基づくものに限らない。例えば、プロセスの種類に応じて、メモリ使用量閾値が予め定められていてもよい。これにより、メモリ使用量取得部がメモリ使用量閾値を算出する負荷を削減できる。
【００５３】
＜第１の変形例＞
以上ではメモリリークの有無の判定を行う場合について説明したが、本発明は、プロセスがオープンしたファイルのクローズ漏れ（以下では、「ファイルリーク」という）の有無の判定にも適用できる。
ファイルリークが発生すると、クローズ漏れしたファイルのメモリ領域が解放されないことによりメモリリークが生じる。また、クローズ漏れしたファイルの解放を待っているプロセスが存在する場合、当該プロセスが当該ファイルを取得でないことにより、当該プロセス、ひいてはコンピュータの処理速度低下や動作不安定化が生じるおそれがある。
【００５４】
図１２は、本発明の第１の変形例におけるファイルリーク判定装置の概略構成を示す構成図である。同図において、ファイルリーク判定装置（コンピュータ資源解放漏れ判定装置）４は、操作入力部１１と、表示部１２と、オープンファイル数取得部（コンピュータ資源使用量取得部）５１と、最大値更新回数計数部５２と、ファイルリーク判定部（解放漏れ判定部）５３と、対策処理実行部２４と、記憶部６１とを具備する。記憶部６１は、プロセス情報記憶部３１１と、オープンファイル数情報記憶部６１２と、判定条件情報記憶部６１３と、処理内容情報記憶部３１４と、処理結果情報記憶部３１５とを具備する。
同図において、図１の各部と同様の機能を有する部分には、同一の符号（１１、１２、２４、３１１、３１４、３１５）を付し、説明を省略する。
【００５５】
オープンファイル数情報記憶部６１２は、実行中の各プロセスのメモリ使用量の初期値と最大値と現在値とに換えて、実行中の各プロセスのオープンファイル数の初期値と最大値と現在値とを記憶する点、および、メモリ使用量閾値に代えて、オープンファイル数閾値（オープンファイル数の現在値に対する判定閾値）を記憶する点で、図１のメモリ使用量情報記憶部３１２と異なる。
判定条件情報記憶部６１３は、メモリ使用量閾値算出係数に換えて、オープンファイル数閾値算出係数を記憶する点で、図１の判定条件情報記憶部３１３と異なる。オープンファイル数閾値算出係数は、オープンファイル数情報記憶部６１２が記憶するオープンファイル数初期値に乗じることにより、同じくオープンファイル数情報記憶部６１２が記憶するオープンファイル数閾値を算出するための係数である。
【００５６】
オープンファイル数取得部５１は、実行中の各プロセスのオープンファイル数をＯＳから取得し、各プロセスのオープンファイル数の初期値や現在値やオープンファイル数閾値を含むオープンファイル数情報を、オープンファイル数情報記憶部６１２に書き込む点で、実行中の各プロセスのメモリ使用量をＯＳから取得し、各プロセスのメモリ使用量の初期値や現在値やメモリ使用量閾値を含むメモリ使用量情報を、メモリ使用量情報記憶部３１２に書き込む図１のメモリ使用量取得部２１と異なる。
最大値更新回数計数部５２は、オープンファイル数の最大値が更新されたか否かを判定し、更新されたと判定した場合は、オープンファイル数情報記憶部６１２が記憶するオープンファイル数の最大値と最大値更新回数とを更新する点で、メモリ使用量の最大値が更新されたか否かを判定し、更新されたと判定した場合には、メモリ使用量情報記憶部３１２が記憶するメモリ使用量の最大値と最大値更新回数とを更新する図１の最大値更新回数計数部２２と異なる。
ファイルリーク判定部５３は、オープンファイル数情報記憶部６１２からオープンファイル数の現在値と最大値更新回数とオープンファイル数閾値とを読み出し、判定条件情報記憶部６１３から更新回数閾値を読み出して、最大値更新回数閾値が更新回数閾値以上であり、かつ、オープンファイル数の現在値がオープンファイル数閾値以上である場合にファイルリーク有りと判定する点で、メモリ使用量情報記憶部３１２からメモリ使用量の現在値と最大値更新回数とメモリ使用量閾値とを読み出し、判定条件情報記憶部３１３から更新回数閾値を読み出して、最大値更新回数閾値が更新回数閾値以上であり、かつ、メモリ使用量の現在値がメモリ使用量閾値以上である場合にメモリリーク有りと判定する図１のメモリリーク判定部２３と異なる。
【００５７】
ファイルリーク判定装置４は、オープンファイル数の最大値更新回数に基づいてファイルリークの有無を判定するので、オープンファイル数が閾値以上か否かのみでファイルリークの有無を判定するファイルリーク判定装置と比較すると、オープンファイル数が当該閾値未満の、より早い段階でファイルリークを検出できる。
また、実際にはファイルリークが発生しておらず、ファイルリーク判定対象のプロセス（以下、「対象プロセス」という）のオープンファイル数が一時的に増加したに過ぎない場合、ファイルリーク判定装置４は、対象プロセスのオープンファイル数の最大値更新回数に基づいて、ファイルリーク無しと判定し得る。
【００５８】
また、多数のファイルを使用するプロセスが一定時間以上実行状態にある場合など、オープンファイル数増加率が大きな値となる場合でも、ファイルリークが発生していない場合は、オープンファイル数が一定の範囲内に収まり、オープンファイル数の最大値更新回数が最大値更新回数閾値を超えないことが期待できる。この場合、ファイルリーク判定装置４は、ファイルリーク無しと判定できる。この点で、ファイルリーク判定装置１は、オープンファイル数増加率の大小にかかわらず、ファイルリークの有無について誤判定を行うおそれが少ない。
さらに、ファイルリークが発生している場合は、オープンファイル数の増加率の大小にかかわらず、オープンファイル数が増加し続けることが考えられる。オープンファイル数の増加率が小さい場合でも、ファイルリーク検出装置４は、オープンファイル数の最大値更新回数が更新回数閾値以上、かつ、オープンファイル数がオープンファイル数閾値以上となった時点で、オープンファイル数が増加し続けていることを検出し、ファイルリーク有りと判定できる。この点でも、ファイルリーク判定装置４は、オープンファイル数増加率の大小にかかわらず、ファイルリークの有無について誤判定を行うおそれが少ない。
【００５９】
また、ファイルリーク判定部５３は、対象プロセスのオープンファイル数の最大値更新回数が最大値更新回数閾値以上か否かに加えて、対象プロセスのオープンファイル数の現在値がオープンファイル数閾値以上か否かに基づいてファイルリークの有無を判定する。これにより、ファイルリークが発生しておらず、対象プロセスのオープンフィル数が一定の範囲内に収まる場合に、プロセスの正常動作におけるオープンファイル数の漸増によりファイルリーク有りとする誤判定を低減できる。
また、ファイルリーク判定装置４は、プロセスのオープンファイル数が閾値以上か否かのみでファイルリークの有無を判定するファイルリーク判定装置と比較すると、オープンファイル数閾値を小さい値に設定しても誤判定の可能性を低減できる。なぜなら、対象プロセスのオープンファイル数が一時的にあるいは定期的にオープンファイル数閾値以上となる場合でも、対象プロセスのオープンファイル数の最大値更新回数が最大値更新回数閾値以上か否かの判定により、ファイルリークが発生していないにもかかわらずファイルリーク有りとする誤判定の可能性を低減し得るからである。
したがって、プロセスのオープンファイル数が閾値以上か否かのみでファイルリークの有無を判定するファイルリーク判定装置よりも、対象プロセスのオープンファイル数が小さい段階で、すなわち、より早期にファイルリークを検出できる。
【００６０】
また、ファイルリーク判定装置４では、オープンファイル数取得部５１は、オープンファイル数の初期値にオープンファイル数閾値算出係数を乗じた値、すなわち、オープンファイル数の初期値を所定定数倍した値をオープンファイル数閾値とし、ファイルリーク判定部５３は、このオープンファイル数閾値を用いてファイルリークの有無を判定する。このように、ファイルリーク判定部５３は、判定対象のプロセスの規模に応じて設定されたオープンファイル数閾値用いてファイルリーク有無を判定するので、より正確にファイルリーク有無を判定できることが期待できる。
【００６１】
＜第２の変形例＞
また、本発明は、マルチスレッド処理を行うプロセスのスレッド終了漏れ（以下では、「スレッドリーク」という）の有無の判定にも適用できる。
スレッドリークが発生すると、終了漏れしたスレッドが使用する資源の解放漏れが生じ、この解放漏れした資源を他のプロセスや他のスレッドが使用でないことにより、当該プロセス、ひいてはコンピュータの処理速度低下や動作不安定化が生じるおそれがある。
【００６２】
図１３は、本発明の第２の変形例におけるスレッドリーク判定装置の概略構成を示す構成図である。同図において、スレッドリーク判定装置（コンピュータ資源解放漏れ判定装置）７は、操作入力部１１と、表示部１２と、スレッド数取得部（コンピュータ資源使用量取得部）８１と、最大値更新回数計数部８２と、スレッドリーク判定部（解放漏れ判定部）８３と、対策処理実行部２４と、記憶部９１とを具備する。記憶部９１は、プロセス情報記憶部３１１と、スレッド数情報記憶部９１２と、判定条件情報記憶部９１３と、処理内容情報記憶部３１４と、処理結果情報記憶部３１５とを具備する。
同図において、図１の各部と同様の機能を有する部分には、同一の符号（１１、１２、２４、３１１、３１４、３１５）を付し、説明を省略する。
【００６３】
スレッド数情報記憶部９１２は、実行中の各プロセスのメモリ使用量の初期値と最大値と現在値とに換えて、実行中の各プロセスのスレッド数の初期値と最大値と現在値とを記憶する点、および、メモリ使用量閾値に代えて、スレッド数閾値（スレッド数の現在値に対する判定閾値）を記憶する点で、図１のメモリ使用量情報記憶部３１２と異なる。
判定条件情報記憶部９１３は、メモリ使用量閾値算出係数に換えて、スレッド数閾値算出係数を記憶する点で、図１の判定条件情報記憶部３１３と異なる。スレッド数閾値算出係数は、スレッド数情報記憶部９１２が記憶するスレッド数初期値に乗じることにより、同じくスレッド数情報記憶部９１２が記憶するスレッド数閾値を算出するための係数である。
【００６４】
スレッド数取得部８１は、実行中の各プロセスのスレッド数をＯＳから取得し、各プロセスのスレッド数の初期値や現在値やスレッド数閾値を含むスレッド数情報を、スレッド数情報記憶部９１２に書き込む点で、実行中の各プロセスのメモリ使用量をＯＳから取得し、各プロセスのメモリ使用量の初期値や現在値やメモリ使用量閾値を含むメモリ使用量情報を、メモリ使用量情報記憶部３１２に書き込む図１のメモリ使用量取得部２１と異なる。
最大値更新回数計数部８２は、スレッド数の最大値が更新されたか否かを判定し、更新されたと判定した場合は、スレッド数情報記憶部９１２が記憶するスレッド数の最大値と最大値更新回数とを更新する点で、メモリ使用量の最大値が更新されたか否かを判定し、更新されたと判定した場合には、メモリ使用量情報記憶部３１２が記憶するメモリ使用量の最大値と最大値更新回数とを更新する図１の最大値更新回数計数部２２と異なる。
スレッドリーク判定部８３は、スレッド数情報記憶部９１２からスレッド数の現在値と最大値更新回数とスレッド数閾値とを読み出し、判定条件情報記憶部９１３から更新回数閾値を読み出して、最大値更新回数閾値が更新回数閾値以上であり、かつ、スレッド数の現在値がスレッド数閾値以上である場合にスレッドリーク有りと判定する点で、メモリ使用量情報記憶部３１２からメモリ使用量の現在値と最大値更新回数とメモリ使用量閾値とを読み出し、判定条件情報記憶部３１３から更新回数閾値を読み出して、最大値更新回数閾値が更新回数閾値以上であり、かつ、メモリ使用量の現在値がメモリ使用量閾値以上である場合にメモリリーク有りと判定する図１のメモリリーク判定部２３と異なる。
【００６５】
スレッドリーク判定装置７は、スレッド数の最大値更新回数に基づいてスレッドリークの有無を判定するので、スレッド数が閾値以上か否かのみでスレッドリークの有無を判定するスレッドリーク判定装置と比較すると、スレッド数が当該閾値未満の、より早い段階でスレッドリークを検出できる。
また、実際にはスレッドリークが発生しておらず、スレッドリーク判定対象のプロセス（以下、「対象プロセス」という）のスレッド数が一時的に増加したに過ぎない場合、スレッドリーク判定装置７は、対象プロセスのスレッド数の最大値更新回数に基づいて、スレッドリーク無しと判定し得る。
【００６６】
また、多数のスレッドを使用するプロセスが一定時間以上実行状態にある場合など、スレッド数増加率が大きな値となる場合でも、スレッドリークが発生していない場合は、スレッド数が一定の範囲内に収まり、スレッド数の最大値更新回数が最大値更新回数閾値を超えないことが期待できる。この場合、スレッドリーク判定装置４は、スレッドリーク無しと判定できる。この点で、スレッドリーク判定装置７は、スレッド数増加率の大小にかかわらず、スレッドリークの有無について誤判定を行うおそれが少ない。
さらに、スレッドリークが発生している場合は、スレッド数の増加率の大小にかかわらず、スレッド数が増加し続けることが考えられる。スレッド数の増加率が小さい場合でも、スレッドリーク検出装置７は、スレッド数の最大値更新回数が更新回数閾値以上、かつ、スレッド数がスレッド数閾値以上となった時点で、スレッド数が増加し続けていることを検出し、スレッドリーク有りと判定できる。この点でも、スレッドリーク判定装置７は、スレッド数増加率の大小にかかわらず、スレッドリークの有無について誤判定を行うおそれが少ない。
【００６７】
また、スレッドリーク判定部８３は、対象プロセスのスレッド数の最大値更新回数が最大値更新回数閾値以上か否かに加えて、対象プロセスのスレッド数の現在値がスレッド数閾値以上か否かに基づいてスレッドリークの有無を判定する。これにより、スレッドリークが発生しておらず、対象プロセスのオープンフィル数が一定の範囲内に収まる場合に、プロセスの正常動作におけるスレッド数の漸増によりスレッドリーク有りとする誤判定を低減できる。
また、スレッドリーク判定装置７は、プロセスのスレッド数が閾値以上か否かのみでスレッドリークの有無を判定するスレッドリーク判定装置と比較すると、スレッド数閾値を小さい値に設定しても誤判定の可能性を低減できる。なぜなら、対象プロセスのスレッド数が一時的にあるいは定期的にスレッド数閾値以上となる場合でも、対象プロセスのスレッド数の最大値更新回数が最大値更新回数閾値以上か否かの判定により、スレッドリークが発生していないにもかかわらずスレッドリーク有りとする誤判定の可能性を低減し得るからである。
したがって、プロセスのスレッド数が閾値以上か否かのみでスレッドリークの有無を判定するスレッドリーク判定装置、対象プロセスのスレッド数が小さい段階で、すなわち、より早期にスレッドリークを検出できる。
【００６８】
また、スレッドリーク判定装置７では、スレッド数取得部８１は、スレッド数の初期値にスレッド数閾値算出係数を乗じた値、すなわち、スレッド数の初期値を所定定数倍した値をスレッド数閾値とし、スレッドリーク判定部８３は、このスレッド数閾値を用いてスレッドリークの有無を判定する。このように、スレッドリーク判定部８３は、判定対象のプロセスの規模に応じて設定されたスレッド数閾値を用いてスレッドリークの有無を判定するので、より正確にスレッドリーク有無を判定できることが期待できる。
【００６９】
なお、上述したように、メモリリーク判定装置１を、コンピュータ内に実現してもよい。同様に、ファイルリーク判定装置４やスレッドリーク判定装置７も、コンピュータ内に実現してもよい。具体的には、メモリリーク判定装置１や、ファイルリーク判定装置４や、スレッドリーク判定装置７の全部または一部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより各部の処理を行ってもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。
また、「コンピュータシステム」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含むものとする。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであってもよい。
【００７０】
以上、本発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【産業上の利用可能性】
【００７１】
本発明は、資源解放漏れ判定装置、メモリリーク判定装置、資源解放漏れ判定方法およびプログラムに用いて好適である。
【符号の説明】
【００７２】
１  メモリリーク判定装置
１１  操作入力部
１２  表示部
２１  メモリ使用量取得部
２２、５２、８２  最大値更新回数計数部
２３  メモリリーク判定部
２４  対策処理実行部
３１、６１、９１  記憶部
３１１  プロセス情報記憶部
３１２  メモリ使用量情報記憶部
３１３、６１３、９１３  判定条件情報記憶部
３１４  処理内容情報記憶部
３１５  処理結果情報記憶部
４  ファイルリーク判定装置
５１  オープンファイル数取得部
５３  ファイルリーク判定部
６１２  オープンファイル数情報記憶部
７  スレッドリーク判定装置
８１  スレッド数取得部
８３  スレッドリーク判定部
９１２  スレッド数情報記憶部
【図１】
2011233075.tif 000003
【図２】
2011233075.tif 000004
【図３】
2011233075.tif 000005
【図４】
2011233075.tif 000006
【図５】
2011233075.tif 000007
【図６】
2011233075.tif 000008
【図７】
2011233075.tif 000009
【図８】
2011233075.tif 000010
【図９】
2011233075.tif 000011
【図１０】
2011233075.tif 000012
【図１１】
2011233075.tif 000013
【図１２】
2011233075.tif 000014
【図１３】
2011233075.tif 000015