(57)【特許請求の範囲】
【請求項１】
コンピュータに、
複数のクラスのオブジェクトが格納されるメモリから異なる時期に取得された複数のダンプデータに基づいて、前記複数のクラスそれぞれに属するオブジェクト数の情報を生成し、
生成した前記オブジェクト数の情報に基づいて、クラスごとに、該クラスのオブジェクト数の時間変化においてオブジェクト数が極小となるダンプデータの少なくとも一部を、保存候補のダンプデータとして決定し、
クラスごとに決定された前記保存候補のダンプデータを、ダンプデータ総量削減時の削除対象から除外する、
処理を実行させるダンプデータ管理プログラム。
【請求項２】
前記保存候補のダンプデータの決定では、最後に取得されたダンプデータも、前記保存候補ダンプデータとする、
請求項１記載のダンプデータ管理プログラム。
【請求項３】
前記保存候補のダンプデータの決定では、前記複数のダンプデータそれぞれを判定対象とし、判定対象のダンプデータにおける一クラスのオブジェクト数が、該判定対象のダンプデータより後に取得された他のダンプデータそれぞれの前記一クラスのオブジェクト数より少ない場合、該判定対象のダンプデータを、前記保存候補のダンプデータとして決定する、
請求項１または２記載のダンプデータ管理プログラム。
【請求項４】
前記コンピュータに、さらに、
前記保存候補のダンプデータ以外のすべてのダンプデータを削除しても、ダンプデータの総量が閾値を超える場合、クラスごとに、前記保存候補のダンプデータの中から該クラスのオブジェクト数が最も少ないダンプデータを特定し、
該特定したダンプデータと最後に取得されたダンプデータとを除く前記保存候補のダンプデータを、ダンプデータ総量削減時の削除対象とする、
請求項１乃至３のいずれかに記載のダンプデータ管理プログラム。
【請求項５】
前記コンピュータに、さらに、
前記複数のクラスから、属するオブジェクト数の増加傾向が大きい方から２以上のクラスを選択する処理を実行させ、
前記保存候補のダンプデータの決定では、選択されたクラスについてのオブジェクト数の時間変化に基づいて、前記保存候補のダンプデータを決定する、
請求項１乃至４のいずれかに記載のダンプデータ管理プログラム。
【請求項６】
コンピュータが、
複数のクラスのオブジェクトが格納されるメモリから異なる時期に取得された複数のダンプデータに基づいて、前記複数のクラスそれぞれに属するオブジェクト数の情報を生成し、
生成した前記オブジェクト数の情報に基づいて、クラスごとに、該クラスのオブジェクト数の時間変化においてオブジェクト数が極小となるダンプデータの少なくとも一部を、保存候補のダンプデータとして決定し、
クラスごとに決定された前記保存候補のダンプデータを、ダンプデータ総量削減時の削除対象から除外する、
ダンプデータ管理方法。
【請求項７】
複数のクラスのオブジェクトが格納されるメモリから異なる時期に取得された複数のダンプデータを記憶するストレージ装置と、
前記複数のダンプデータに基づいて、前記複数のクラスそれぞれに属するオブジェクト数の情報を生成し、生成した前記オブジェクト数の情報に基づいて、クラスごとに、該クラスのオブジェクト数の時間変化においてオブジェクト数が極小となるダンプデータの少なくとも一部を、保存候補のダンプデータとして決定し、クラスごとに決定された前記保存候補のダンプデータを、ダンプデータ総量削減時の削除対象から除外する演算部と、
を有するダンプデータ管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ダンプデータ管理プログラム、ダンプデータ管理方法、およびダンプデータ管理装置に関する。
【背景技術】
【０００２】
マルチプロセスで動作するコンピュータシステムでは、プロセスが終了すると、そのプロセスで使用していたメモリの記憶領域が開放されるようにプログラムが作成されている。ところがプログラムの欠陥などにより、プロセスが終了しても、そのプロセスが使用していた記憶領域が開放されない場合がある。このように、メモリの記憶領域が確保されたままになることをメモリリークという。メモリリークは、システムの異常終了やスローダウンの原因となる。
【０００３】
例えば、使用されなくなったメモリ領域を開放する機能として、ガベージコレクション（ＧＣ：Garbage Collection）がある。ＧＣでは、不要なデータが格納されているメモリ領域を解放することを、データの回収と称する。ＧＣを実装したシステムでも、メモリリークは発生する。例えば、プログラムから不要なデータ（オブジェクト）への参照が残ることで、ＧＣが不要なデータを回収できないとき、メモリリークとなる。不要なデータかどうかを機械的に正確に判断することは難しいため、ＧＣを用いても、メモリリークを完全になくすことは困難である。
【０００４】
不要なオブジェクトかどうかの機械的な判断は難しいことから、実際のメモリリークの調査では、ヒープダンプ（メモリ中のデータのスナップショットダンプ）によるダンプデータやクラスヒストグラムといった資料が採取される。クラスヒストグラムは、オブジェクト指向プログラミングにおけるクラスごとのオブジェクト数の推移をグラフ化したものである。採取した資料を人手で解析することで、メモリリークの発生の有無が判断される。
【０００５】
メモリリークの調査において、資料の適切な採取タイミングを採取前に判断することは難しい。そのため、なるべく多くのタイミングで資料を採取することが好ましい。ただしメモリ容量の大規模化に伴い、ダンプデータのデータ量も増大している。そのため、頻繁にダンプデータを採取し、すべてのダンプデータを保存しておくと、ストレージ装置の記憶容量が圧迫される。そこで、例えばダンプデータのデータの総量が所定値に達すると、採取時期が古いダンプデータから順に削除される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２００４／０９９９８５号
【特許文献２】米国特許第７９７９７４８号明細書
【特許文献３】米国特許第７９５３７７２号明細書
【特許文献４】特開平１０−３３３９３８号公報
【特許文献５】特開２００９−１５１６８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、従来は、ストレージ装置の記憶容量の圧迫を避けるために、ヒープダンプなどにより繰り返し採取した多数のダンプデータのうちの一部を削除する際、メモリリークの原因解析にどの資料が有用なのか否かが考慮されていない。そのため、メモリリークの原因解析に有用なダンプデータを削除してしまう可能性がある。メモリリークの原因解析に有用なダンプデータが削除されると、原因解析が困難となる。
【０００８】
１つの側面では、本件は、メモリリークの原因解析に有用なダンプデータが削除されることを抑止することを目的とする。
【課題を解決するための手段】
【０００９】
１つの案では、コンピュータに以下の処理を実行させるダンプデータ管理プログラムが提供される。
ダンプデータ管理プログラムに基づいて、コンピュータは、複数のクラスのオブジェクトが格納されるメモリから異なる時期に取得された複数のダンプデータに基づいて、前記複数のクラスそれぞれに属するオブジェクト数の情報を生成する。次にコンピュータは、生成した前記オブジェクト数の情報に基づいて、クラスごとに、該クラスのオブジェクト数の時間変化においてオブジェクト数が極小となるダンプデータの少なくとも一部を、保存候補のダンプデータとして決定する。そしてコンピュータは、クラスごとに決定された保存候補のダンプデータを、ダンプデータ総量削減時の削除対象から除外する。
【発明の効果】
【００１０】
１態様によれば、メモリリークの原因解析に有用なダンプデータが削除されることを抑止できる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態に係るダンプデータ管理装置の一例を示す図である。
【図２】ダンプデータ管理処理の手順の一例を示すフローチャートである。
【図３】第２の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。
【図４】コンピュータにおけるダンプファイル管理機能を示すブロック図である。
【図５】ダンプファイルのデータ構造例を示す図である。
【図６】ヒストグラムファイルの一例を示す図である。
【図７】リーククラスのオブジェクトの数の増加量が閾値を超えたときの前後の資料を残す例を示す図である。
【図８】リーククラスのオブジェクトの数の増加量が閾値を超えたときの前後の資料を残すことによる問題を説明する図である。
【図９】１つのクラスをリーククラスとして特定して資料を削除する場合の問題を説明する図である。
【図１０】オブジェクトの回収を考慮した資料削除の判断例を示す図である。
【図１１】オブジェクトの生成・回収が繰り返された場合の資料削除の判断例を示す図である。
【図１２】最新の資料と最もオブジェクト数が少ない資料とを残す例を示す図である。
【図１３】複数のリーククラスで削除候補となった資料の削除例を示す図である。
【図１４】最新の資料と各クラスの最もオブジェクト数が少ない資料とのいずれでもない資料の削除例を示す図である。
【図１５】資料採取期間の違いによるオブジェクト数の増加傾向の判断結果の食い違い例を示す図である。
【図１６】資料管理処理の手順の一例を示すフローチャートである。
【図１７】リーククラス特定処理に使用する記憶領域内のデータの一例を示す図である。
【図１８】リーククラス特定処理の手順の一例を示す図である。
【図１９】資料削除処理の手順の一例を示すフローチャート（１／３）である。
【図２０】資料削除処理の手順の一例を示すフローチャート（２／３）である。
【図２１】資料削除処理の手順の一例を示すフローチャート（３／３）である。
【発明を実施するための形態】
【００１２】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
以下、第１の実施の形態について説明する。第１の実施の形態は、メモリリークの原因解析用のダンプデータの総データ量の抑制のためにダンプデータの一部を削除する際に、メモリリークの原因解析に有用なダンプデータが削除されることを抑止するものである。
【００１３】
図１は、第１の実施の形態に係るダンプデータ管理装置の一例を示す図である。ダンプデータ管理装置１０は、メモリ１１、ストレージ装置１２、および演算部１３を有する。
メモリ１１には、複数のクラスのオブジェクト１１ａ，１１ｂ，・・・が格納される。
【００１４】
ストレージ装置１２には、メモリ１１から異なる時期に取得された複数のダンプデータ１２ａ〜１２ｆが格納される。例えば定期的なスナップショットダンプによりメモリ１１から採取されたダンプデータが、ストレージ装置１２に格納される。
【００１５】
演算部１３は、例えばダンプデータ管理装置１０が有するプロセッサである。複数のダンプデータ１２ａ〜１２ｆを管理する。例えば演算部１３は、複数のダンプデータ１２ａ〜１２ｆの総データ量が所定の閾値を超えた場合、ダンプデータ総量削減処理を行う。
【００１６】
ダンプデータ総量を削減する際には、演算部１３は、まず、複数のダンプデータ１２ａ〜１２ｆに基づいて、複数のクラスそれぞれに属するオブジェクト数の情報を生成する。例えばダンプデータ１２ａ〜１２ｆごとに、オブジェクト数のヒストグラムが生成される。
【００１７】
次に演算部１３は、生成したオブジェクト数の情報に基づいて、クラスごとに、該クラスのオブジェクト数の時間変化においてオブジェクト数が極小となるダンプデータの少なくとも一部を、保存候補のダンプデータとして決定する。オブジェクト数が極小となるダンプデータとは、直前に取得したダンプデータよりもオブジェクト数が少なく、直後に取得したダンプデータよりもオブジェクト数が少ないダンプデータである。例えば演算部１３は、複数のダンプデータ１２ａ〜１２ｆそれぞれを判定対象とする。そして演算部１３は、判定対象のダンプデータにおけるあるクラスのオブジェクト数が、その判定対象のダンプデータより後に取得された他のダンプデータそれぞれの該クラスのオブジェクト数より少ないかどうかを判断する。演算部１３は、判定対象のダンプデータのオブジェクト数の方が少ない場合、その判定対象のダンプデータを保存候補のダンプデータとする。
【００１８】
さらに演算部１３は、クラスごとに決定された保存候補のダンプデータを、ダンプデータ総量削減時の削除対象から除外する。そして演算部１３は、ダンプデータ総量が所定の閾値を超えると、ダンプデータ総量が閾値以下となるまで、保存候補以外のダンプデータを削除する。
【００１９】
なお演算部１３は、複数のクラスのうち、メモリリークの発生原因となっている可能性の高いクラスを選択し、選択したクラスのオブジェクト数の時間遷移から、保存候補のダンプデータを決定してもよい。例えば演算部１３は、複数のクラスから、属するオブジェクト数の増加傾向が大きい方から２以上のクラスを選択し、選択されたクラスについての保存候補のダンプデータを決定する。
【００２０】
なお、演算部１３は、最後に取得されたダンプデータを、保存候補ダンプデータとしてもよい。
さらに演算部１３は、保存候補のダンプデータ以外のすべてのダンプデータを削除しても、ダンプデータの総量が閾値を超える場合、クラスごとに、保存候補のダンプデータの中から該クラスのオブジェクト数が最も少ないダンプデータを特定する。そして演算部１３は、特定したダンプデータと最後に取得されたダンプデータとを除く保存候補のダンプデータを、ダンプデータ総量削減時の削除対象とする。
【００２１】
図２は、ダンプデータ管理処理の手順の一例を示すフローチャートである。
［ステップＳ１１］演算部１３は、メモリ１１からダンプデータを採取する。演算部１３は、採取したダンプデータに、採取時の時刻（タイムスタンプ）を付与し、ストレージ装置１２に格納する。
【００２２】
［ステップＳ１２］演算部１３は、ストレージ装置１２に格納されたダンプデータのデータサイズの合計が、閾値を超過したか否かを判断する。データサイズの合計が閾値を超過した場合、処理がステップＳ１３に進められる。閾値を超過していなければ、処理がステップＳ２０に進められる。
【００２３】
［ステップＳ１３］演算部１３は、クラスごとのオブジェクト数の増加傾向を算出する。オブジェクト数の増加傾向は、例えばオブジェクト数の時間遷移の近似直線の傾きで表される。
【００２４】
［ステップＳ１４］演算部１３は、オブジェクト数のオブジェクトの増加傾向が大きい方から所定数のクラスを特定する。
［ステップＳ１５］演算部１３は、削除候補のダンプデータを抽出する。例えば演算部１３は、クラスに属するオブジェクト数の推移において、オブジェクト数が極小となるときのダンプデータ、および最新のダンプデータを削除候補から除外する。そして演算部１３は、いずれのクラスにおいても、削除候補から除外されなかったダンプデータを、削除候補として抽出する。
【００２５】
［ステップＳ１６］演算部１３は、未削除の削除候補のダンプデータがあるか否かを判断する。削除候補のダンプデータのすべてが削除済みの場合、処理がステップＳ１９に進められる。未削除の削除候補のダンプデータがある場合、処理がステップＳ１７に進められる。
【００２６】
［ステップＳ１７］演算部１３は、削除候補のダンプデータの１つを、ストレージ装置１２から削除する。
［ステップＳ１８］演算部１３は、ストレージ装置１２に格納されたダンプデータのデータサイズの合計が、まだ閾値を超過しているか否かを判断する。データサイズの合計が閾値を超過している場合、処理がステップＳ１６に進められる。閾値を超過していなければ、処理がステップＳ２０に進められる。
【００２７】
［ステップＳ１９］演算部１３は、最新のダンプデータと、特定したクラスのいずれかにおいてオブジェクト数が最小となるダンプデータとを残し、その他のダンプデータをストレージ装置１２から削除する。
【００２８】
［ステップＳ２０］演算部１３は、一定時間待機後、処理をステップＳ１１に進める。
このようにして、ダンプデータのデータ総量の抑制のためのダンプデータ削除時にメモリリークの原因解析に有用なダンプデータが削除されるのを抑止することができる。また、ダンプデータのデータサイズの合計が閾値以下となった場合、ダンプデータの削除が停止される。
【００２９】
例えば、図１の例であれば、クラスｘについては、最新のダンプデータ１２ｆと、オブジェクト数が極小となるダンプデータ１２ｂとが、保存候補となる。クラスｙについては、最新のダンプデータ１２ｆと、オブジェクト数が極小となるダンプデータ１２ａ，１２ｅとが、保存候補となる。クラスｚについては、最新のダンプデータ１２ｆと、オブジェクト数が極小となるダンプデータ１２ａ，１２ｄとが、保存候補となる。保存候補とされたダンプデータは、削除対象から除外される。すると削除対象となるのはダンプデータ１２ｃのみである。そこで、ダンプデータ１２ｃが、ストレージ装置１２から削除される。
【００３０】
オブジェクト数が極小となるのは、ＧＣによりオブジェクトが回収された後のダンプデータである。従って、オブジェクト数が極小となるダンプデータを削除候補から除外することで、ＧＣによりオブジェクトが回収された後のダンプデータが削除されることを抑止できる。ＧＣによりオブジェクトが回収された後のダンプデータには、回収できずに残存したオブジェクトが含まれていると共に、ＧＣで回収されたオブジェクトは含まれていない。このようなダンプデータは、オブジェクトが回収できないことにより発生しているメモリリークの原因解析に有用である。従って、図２に示す処理でダンプデータを削除することで、メモリリークの原因解析に有用なダンプデータが削除されてしまうことが抑止される。
【００３１】
なお、オブジェクトが極小となるダンプデータの一部のみを保存候補にしてもよい。例えば、あるクラスにおいてオブジェクト数が極小となるダンプデータであっても、そのオブジェクト数が、それ以後に取得されたダンプデータのオブジェクト数よりも多い場合、保存候補にせずに、削除対象としてもよい。前に取得したダンプデータのオブジェクト数よりも、後の時刻に取得されたダンプデータのオブジェクト数の方が少ない場合、前に取得したダンプデータには、その後、ＧＣにより回収されるオブジェクトが含まれている。そのため、メモリリークの原因解析においては、後の時刻に取得された、よりオブジェクト数の少ないダンプデータを解析した方が効率的である。従って、あるクラスにおいてオブジェクト数が極小となるダンプデータであっても、それ以後に取得されたダンプデータよりもオブジェクト数が多い場合、削除対象とすることで、ストレージ装置１２の資源を有効活用し、効率的な原因解析が可能となる。
【００３２】
また、最新のダンプデータについては、常に保存候補として削除しないようにすることで、最近生成され回収不能となったオブジェクトに関する情報が削除されてしまうことを抑止できる。
【００３３】
さらに、複数のクラスそれぞれについて、オブジェクト数が極小となるダンプデータを保存候補とすると、削除可能なダンプデータのすべてを削除しても、ダンプデータのデータ総量が閾値を超える場合もある。この場合、各クラスについて、オブジェクト数が最小となるダンプデータと最新のダンプデータのみを保存候補とすることで、十分な量のダンプデータを削除することができる。またオブジェクト数が最小のダンプデータを保存しておくことで、そのダンプデータから、その時点で回収不能となっているオブジェクトの情報を取得できる。また最新のダンプデータを保存しておくことで、オブジェクト数が最小のダンプデータ取得以後に生成され、回収されていないオブジェクトの情報を、最新のダンプデータから取得できる。従って、残されたダンプデータからも、メモリリークの原因解析が可能である。
【００３４】
さらにオブジェクトの増加傾向が大きい２以上のクラスを対象として、保存候補のダンプデータを判断することで、メモリリークの発生原因となっているクラスを見落とすことを抑止できる。すなわち、増加傾向が大きい１つのクラスのオブジェクトの増減のみから保存候補のダンプデータを決定したのでは、他のクラスのオブジェクトが原因でメモリリークが発生していた場合に、原因解析が困難となる。増加傾向が大きい複数のクラスそれぞれのオブジェクトの増減に基づいて、保存するダンプデータを決定すれば、判断対象外のクラスがメモリリーク発生の原因である可能性が低くなる。その結果、メモリリークの原因解析に有用なダンプデータが削除されることが抑止される。
【００３５】
〔第２の実施の形態〕
次に第２の実施の形態について説明する。第２の実施の形態では、ヒープダンプのような、個々のオブジェクトの内容や参照関係を保持したダンプファイルと、クラスヒストグラム情報を含むファイルを合わせて「資料」とする。第２の実施の形態では、複数の資料の中から、メモリリーク調査に有用でないものから自動で削除できるようにする。これにより、採取資料によるディスク領域の使用量と、人手で資料を取捨選択する手間を削減することができる。
【００３６】
すなわち、資料を大量に採取して保存し続けると、ストレージ装置の記憶容量が圧迫される。例えば、メモリリークの原因となるオブジェクトを特定するためには、一般に、オブジェクト同士の参照関係を保持したダンプファイルの解析が行われるが、一つのダンプファイルのサイズは実行環境が使用するメモリ量よりも大きくなることが多い。そのため、定期的に保存するとストレージ装置の記憶容量を大量に消費する。その結果、記憶領域が不足するなど、運用環境に影響がある場合がある。
【００３７】
なお採取した資料のすべてがメモリリーク調査に有用であるとは限らない。そのため、不要な資料を削除することで、使用する記憶容量の消費を抑えることができる。採取資料の自動削除のためには、メモリリークの原因解析のための資料の有用性を適切に判断することが重要となる。
【００３８】
例えば、ログを自動で削除する手法として、ログローテーションがある。ログローテーションは、古いデータから順に削除対象とする、ログの削除手法である。ログローテーションを用いて資料を自動で削除すると、メモリリークの原因解析に有用な資料が削除される可能性がある。例えば、システム運用開始後の早い段階で、メモリリークの発生原因となるオブジェクト（リークオブジェクト）が生成され、その後長時間にわたって資料を採取し続けた場合を想定する。この場合に、古い資料から順に削除すると、メモリリークとは無関係の資料が残り、リークオブジェクトに関する資料は削除されてしまうおそれがある。そこで、第２の実施の形態では、メモリリーク調査資料を自動で削除する際に、各資料がメモリリークの原因解析に有用かどうかを判断し、有用な資料については、削除対象から除外する。
【００３９】
図３は、第２の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。コンピュータ１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０９を介してメモリ１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ、ＭＰＵ（Micro Processing Unit）、またはＤＳＰ（Digital Signal Processor）である。プロセッサ１０１がプログラムを実行することで実現する機能の少なくとも一部を、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現してもよい。
【００４０】
メモリ１０２は、コンピュータ１００の主記憶装置として使用される。メモリ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０２には、プロセッサ１０１による処理に利用する各種データが格納される。メモリ１０２としては、例えばＲＡＭ（Random Access Memory）などの揮発性の半導体記憶装置が使用される。
【００４１】
バス１０９に接続されている周辺機器としては、ＨＤＤ（Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、機器接続インタフェース１０７およびネットワークインタフェース１０８がある。
【００４２】
ＨＤＤ１０３は、内蔵したディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３は、コンピュータ１００の補助記憶装置として使用される。ＨＤＤ１０３には、ＯＳのプログラム、アプリケーションプログラム、各種データ、およびダンプファイルが格納される。なお、補助記憶装置としては、フラッシュメモリなどの不揮発性の半導体記憶装置（ＳＳＤ：Solid State Drive）を使用することもできる。
【００４３】
グラフィック処理装置１０４には、モニタ２１が接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像をモニタ２１の画面に表示させる。モニタ２１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００４４】
入力インタフェース１０５には、キーボード２２とマウス２３とが接続されている。入力インタフェース１０５は、キーボード２２やマウス２３から送られてくる信号をプロセッサ１０１に送信する。なお、マウス２３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００４５】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク２４に記録されたデータの読み取りを行う。光ディスク２４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク２４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００４６】
機器接続インタフェース１０７は、コンピュータ１００に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース１０７には、メモリ装置２５やメモリリーダライタ２６を接続することができる。メモリ装置２５は、機器接続インタフェース１０７との通信機能を搭載した記録媒体である。メモリリーダライタ２６は、メモリカード２７へのデータの書き込み、またはメモリカード２７からのデータの読み出しを行う装置である。メモリカード２７は、カード型の記録媒体である。
【００４７】
ネットワークインタフェース１０８は、ネットワーク２０に接続されている。ネットワークインタフェース１０８は、ネットワーク２０を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００４８】
以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。なお、第１の実施の形態に示したダンプデータ管理装置１０も、図３に示したコンピュータ１００と同様のハードウェアにより実現することができる。例えば図３に示すプロセッサ１０１は、図１の演算部１３の一例である。また図３に示すＨＤＤ１０３は、図１に示すストレージ装置１２の一例である。図３に示すメモリ１０２は、図１のメモリ１１に対応する。
【００４９】
コンピュータ１００は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。コンピュータ１００に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、コンピュータ１００に実行させるプログラムをＨＤＤ１０３に格納しておくことができる。プロセッサ１０１は、ＨＤＤ１０３内のプログラムの少なくとも一部をメモリ１０２にロードし、プログラムを実行する。またコンピュータ１００に実行させるプログラムを、光ディスク２４、メモリ装置２５、メモリカード２７などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ１０１からの制御により、ＨＤＤ１０３にインストールされた後、実行可能となる。またプロセッサ１０１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００５０】
このようなコンピュータ１００によりプログラムを実行中に、定期的にヒープダンプによりダンプファイルが生成される。ダンプファイルは、メモリリーク調査に用いられるが、すべてのダンプファイルを保存し続けると、ＨＤＤ１０３の記憶領域が圧迫される。そこで、コンピュータ１００では、適宜、不要なダンプファイルを削除する。
【００５１】
図４は、コンピュータにおけるダンプファイル管理機能を示すブロック図である。コンピュータ１００は、仮想マシン１１０、ファイルシステム１２０、および資料管理部１３０を有する。
【００５２】
仮想マシン１１０は、メモリ１１１とダンプファイル作成部１１２とを有する。メモリ１１１は、仮想マシン１１０内に仮想的に実現されたものである。ダンプファイル作成部１１２は、資料管理部１３０から資料採取コマンドを受信すると、ヒープダンプを実行し、ダンプファイルをファイルシステム１２０に格納する。
【００５３】
ファイルシステム１２０は、コンピュータ１００内のファイルを管理する。ファイルシステム１２０は、複数のダンプファイル１２１ａ，１２１ｂ，・・・と、複数のダンプファイル１２１ａ，１２１ｂ，・・・それぞれに対応するヒストグラムファイル１２２ａ，１２２ｂ，・・・とを管理する。複数のダンプファイル１２１ａ，１２１ｂ，・・・とヒストグラムファイル１２２ａ，１２２ｂ，・・・とは、ファイルシステム１２０によって、例えばＨＤＤ１０３内に格納される。
【００５４】
資料管理部１３０は、コマンド通知部１３１、ヒストグラム作成部１３２、リーククラス特定部１３３、資料削除部１３４を有する。
コマンド通知部１３１は、所定間隔で、仮想マシン１１０に対して資料採取コマンドを送信する。
【００５５】
ヒストグラム作成部１３２は、ファイルシステム１２０で管理されているダンプファイル１２１ａ，１２１ｂ，・・・のクラスヒストグラムを作成する。ヒストグラム作成部１３２は、作成したクラスヒストグラムを含むヒストグラムファイル１２２ａ，１２２ｂ，・・・を、ファイルシステム１２０を介してＨＤＤ１０３に格納する。
【００５６】
リーククラス特定部１３３は、リークの発生が疑われるクラス（リーククラス）を特定する。例えばリーククラス特定部１３３は、まず、オブジェクトの増加傾向をクラスごとに計算する。そしてリーククラス特定部１３３は、例えば、オブジェクトの増加傾向が多い方から所定数のクラスを、リーククラスとして特定する。
【００５７】
資料削除部１３４は、各クラスのオブジェクトの増加傾向を参考に、削除する資料（ダンプファイルとヒストグラムファイルとの組）を決定する。そして資料削除部１３４は、削除することに決定した資料を、ファイルシステム１２０から削除する。
【００５８】
なお、図４に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。また、図４に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
【００５９】
図５は、ダンプファイルのデータ構造例を示す図である。ダンプファイル１２１には、クラスの情報、オブジェクトの情報、文字列の情報、および、その他の実行環境の情報が含まれる。
【００６０】
クラスの情報には、ヒープダンプの実行時に、仮想マシン１１０の実行環境に存在したすべてのクラスのエントリが含まれる。各クラスのエントリには、例えばクラスのＩＤ、クラスに属するオブジェクトのサイズ（バイト数）、およびその他クラスに関する情報が含まれる。クラスのＩＤは、各クラスを一意に識別する識別情報である。クラスに属するオブジェクトのサイズ（バイト数）は、対応するクラスに属するオブジェクトそれぞれが占有するメモリ容量の合計である。
【００６１】
オブジェクトの情報には、ヒープダンプの実行時に、仮想マシン１１０の実行環境に存在したすべてのオブジェクトのエントリが含まれる。各オブジェクトのエントリには、オブジェクトのＩＤ、オブジェクトが属するクラスのＩＤ、オブジェクトのサイズ（バイト数）、およびその他オブジェクトに関する情報が含まれる。オブジェクトＩＤは、各オブジェクトを一意に識別する識別情報である。オブジェクトが属するクラスのＩＤにより、そのオブジェクトと、そのオブジェクトが属するクラスとが対応付けられる。オブジェクトのサイズ（バイト数）は、対応するオブジェクトが占有するメモリ容量である。
【００６２】
文字列の情報には、クラスおよびオブジェクトごとに、クラスまたはオブジェクトのＩＤと、そのＩＤに対応する名前（クラス名またはオブジェクト名）を保持するエントリが含まれる。
【００６３】
このようなダンプファイル１２１を解析することで、ヒープダンプを採取した時点に実行環境に存在したクラスの名前と、各クラスのオブジェクトの数およびサイズが得られる。そしてダンプファイル１２１から得られた情報に基づいて、クラスヒストグラムを作成することが可能となる。
【００６４】
図６は、ヒストグラムファイルの一例を示す図である。ヒストグラムファイル１２２には、クラスごとの情報が設定されている。例えば「num」に示される通し番号に対応付けて、各クラスの情報が設定される。「#instances」の列には、対応するクラスのオブジェクト数が設定される。「#bytes」の列には、対応するクラスのオブジェクトが占有するメモリ１１１の記憶容量が設定される。「class name」の列に、クラスの名前が設定される。
【００６５】
資料管理部１３０は、各ダンプファイルから得られたヒストグラムを解析することで、各資料の有用性を判断する。資料の有用性の判断では、オブジェクト数の増減に関する情報が利用できる。
【００６６】
使用の有用性判断では、資料に含まれるオブジェクト数の増減傾向に基づいて、リーククラスが特定される。例えば、各クラスのオブジェクト数の増加傾向が大きい所定数のクラスがリーククラスと判断される。
【００６７】
不要な資料を削除する手法として、例えば、リーククラスのオブジェクトの数の増加量が閾値を超えたときの前後の資料を残し、他の資料が削除することが考えられる。
図７は、リーククラスのオブジェクトの数の増加量が閾値を超えたときの前後の資料を残す例を示す図である。図７では、資料「ａ」〜「ｅ」のうち、資料「ｃ」と資料「ｄ」との間で、オブジェクト数が閾値以上増加している。そこで、資料「ｃ」と資料「ｄ」とが残され、他の資料「ａ」、「ｂ」、「ｅ」が削除される。
【００６８】
この方法は、リーククラスのオブジェクトがあまり回収されない場合には効果的である。すなわち、オブジェクト数が閾値以上増加している期間は、通常の処理で想定している数以上のオブジェクトが生成されているものと考えられ、そのオブジェクトの生成処理が、メモリリークの原因となっている可能性がある。ただしこの例では、オブジェクトの生成・回収が繰り返されるような場合では、メモリリーク調査に有用な資料を正しく判定できない。
【００６９】
図８は、リーククラスのオブジェクトの数の増加量が閾値を超えたときの前後の資料を残すことによる問題を説明する図である。図８では、例えば資料「ｂ」、「ｃ」でオブジェクト数が増加しているが、資料「ｄ」において、増加分のオブジェクトの大多数が回収されている。同様に資料「ｅ」、「ｆ」では、オブジェクト数が増加しているが、その増加分は資料「ｇ」でほぼなくなっている。
【００７０】
図８の例において、リーククラスのオブジェクトの数の増加量が閾値を超えたときの前後の資料を残し、他の資料を削除する場合、資料「ａ」、「ｂ」、「ｄ」、「ｅ」が残され、資料「ｃ」、「ｆ」、「ｇ」が削除される。
【００７１】
しかし、資料「ｂ」、「ｃ」で新たに発生しているオブジェクトは、資料「ｄ」の時点で、そのほとんどが回収されている。そうすると、資料「ａ」の収集後、資料「ｂ」の収集までに生成されたオブジェクトは回収されており、メモリリークの原因ではない。そのため資料「ｃ」だけでなく資料「ｂ」も、メモリリークの原因解析における有用性が低い。同様に、資料「ｅ」、「ｆ」で新たに発生しているオブジェクトは、資料「ｇ」の時点で、そのほとんどが回収されており、資料「ｆ」だけでなく資料「ｅ」も、メモリリークの原因解析の有用性が低い。それにも拘わらず資料「ｂ」、「ｅ」が削除されないと、ディスク容量が圧迫される。
【００７２】
またリーククラスとしては、複数のクラスを特定するのが好ましい。これは、リーククラスを間違いなく特定するのが困難なためである。すなわち、特定したリーククラス内にリークが疑われるオブジェクトがあったとしても、そのオブジェクトがリークオブジェクトかどうかはアプリケーションの設計に依存し、機械的に判断することは難しい。もしリーククラスを１つのクラスに限定してしまうと、誤って有用な資料を削除してしまう可能性がある。
【００７３】
図９は、１つのクラスをリーククラスとして特定して資料を削除する場合の問題を説明する図である。図９には、クラスｘ、クラスｙ、クラスｚのオブジェクト数の時間変化が示されている。図９の例では、オブジェクトの増加傾向が最も大きいのは、クラスｘである。クラスｘをリーククラスと特定した場合、クラスｘのオブジェクト数の増加量が閾値を超えたときの前後の資料「ｂ」、「ｃ」が残され、他の資料「ａ」、「ｄ」、「ｅ」は削除される（この例では、最新の資料「ｆ」は残すものとする）。
【００７４】
しかし、ある時期からクラスｘのオブジェクトが回収され、以後、クラスｘのオブジェクト数が減少する場合もある。その場合、クラスｘがリーククラスではないことが、事後的に判明する。するとクラスｙまたはクラスｚがリーククラスとなるが、すでにクラスｘのオブジェクト数の変化に基づいて資料の削除が行われていると、メモリリークの原因解析に有用な資料が削除されている可能性がある。
【００７５】
このように一時的に最も増加傾向にあるクラスのみをリーククラスと判断し、それ以外のクラスを無視して資料を削除してしまうと、リーククラスの判断が間違っていた場合、有用な資料が削除されるという結果を招く。すなわち、オブジェクト数の増加傾向だけでは、リーククラスを間違いなく一意に特定するのは困難であり、リーククラスの判断の誤りにより、有用な資料を削除してしまう可能性がでてくる。そこで、第２の実施の形態では、メモリリークの発生原因となっている疑いのある複数のクラスをリーククラスとして特定することで、有用な資料が削除されることを抑止する。
【００７６】
また図８、図９に示したように、リーククラスのオブジェクトの数の増加量が閾値を超えたときの前後の資料を残す方法では、リーククラスのオブジェクトがたくさん生成・回収される場合などに、不要な資料を適切に削除できない。これは、オブジェクト数の増加のみを考慮しており、オブジェクトが回収されたかどうかを考慮していないことが原因である。そこで、第２の実施の形態では、オブジェクトの回収も考慮してメモリリーク調査資料の有用性を判断する。
【００７７】
第２の実施の形態に係るコンピュータ１００は、大別して以下の３つの処理を行う。以下の処理は、例えば資料採取のタイミングで実施される。
１）仮想マシン１１０は、ヒープダンプによりダンプファイルを採取する。
２）資料管理部１３０は、ダンプファイルに含まれるオブジェクト数の増減傾向を分析し、リークが疑われる複数のクラスを特定する。例えば資料管理部１３０は、各クラスのオブジェクト数を分析し、増加傾向が大きい所定数のクラスをリーククラスと判断する。
３）資料管理部１３０は、リーククラスのオブジェクト数の増減傾向を分析し、得られた未回収オブジェクトの数に基づいて不要と判定された資料を削除候補とし、すべてのリーククラスで削除候補となった資料を、削除する資料と判断する。
４）資料管理部１３０は、２）を実施しても資料の総データ量が閾値を超えていた場合、クラスに関して、最新の資料と一番オブジェクト数の少ない資料を残し、それ以外の資料を削除候補として、当該クラスすべてで削除候補となったものを削除する資料と判断する。
【００７８】
このように、資料管理部１３０は、１）、２）において、リークが疑われるクラスを特定し、３）において、オブジェクト回収が行われた資料を削除候補とする。
図１０は、オブジェクトの回収を考慮した資料削除の判断例を示す図である。図１０の例では、オブジェクト数は、資料「ｂ」、「ｃ」において増加した後、資料「ｄ」において減少している。そうすると資料「ｄ」よりもオブジェクト数が多い資料「ｂ」、「ｃ」に含まれているほとんどのオブジェクトは、資料「ｄ」の採取までに回収されている。
【００７９】
メモリリークの原因解析では、回収不能となったオブジェクト（リークオブジェクト）を検出することが重要となる。リークオブジェクトは、使われなくなって不要となった後も参照され続け、ＧＣによって回収されないオブジェクトである。そのため、オブジェクト数が減少した場合、少なくとも一部のオブジェクトは回収された、つまり回収されたオブジェクトはリークしていなかった、と言える。
【００８０】
図１０の例では、資料「ｄ」では、資料「ｂ」、「ｃ」に含まれるオブジェクトの一部が、資料「ｄ」ではＧＣによって回収されており、回収されたオブジェクトはリークオブジェクトではなかったということが分かる。また回収されなかったリークオブジェクトは、資料「ｄ」においても残存している。そのため、資料「ｂ」、「ｃ」は、メモリリークの原因解析に対する有用性が低い。そこで資料管理部１３０は、資料「ｂ」、「ｃ」を削除候補とする。
【００８１】
図１１は、オブジェクトの生成・回収が繰り返された場合の資料削除の判断例を示す図である。オブジェクトの生成と回収とが繰り返された場合、オブジェクト回収後の資料「ｄ」、「ｇ」は、削除対象外とされる。またオブジェクト数が最も少ない資料「ａ」も削除対象外とされる。削除対象外とされなかった資料「ｂ」、「ｃ」、「ｅ」、「ｆ」は、削除候補とされる。
【００８２】
ここで、削除できるすべての資料を削除しても、資料の総データ量が閾値を超えている場合があり得る。例えば図１１の資料「ｂ」、「ｃ」、「ｅ」、「ｆ」を削除しても、資料の総データ量が閾値を超えている場合である。この場合、最新の資料と、最もオブジェクト数が少ない資料とを残し、他の資料が削除候補とされる。
【００８３】
図１２は、最新の資料と最もオブジェクト数が少ない資料とを残す例を示す図である。図１２の例では、最新の資料「ｇ」と、最もオブジェクト数が少ない資料「ａ」が削除対象外とされ、資料「ｄ」が削除候補とされる。
【００８４】
なお削除候補とする資料の特定は、リーククラスごとに行われる。すべてのリーククラスにおいて削除候補とされた資料のみ、全体での最終的な削除候補となる。
図１３は、複数のリーククラスで削除候補となった資料の削除例を示す図である。図１３の例では、資料「ｃ」のみが、すべてのクラスにおいて削除候補と判断されている。従って、資料「ｃ」が削除される。
【００８５】
資料「ｃ」を削除しても資料の総データ量が閾値を超えているのであれば、最新の資料ではなく、かつ各クラスの最もオブジェクト数が少ない資料でもない資料が削除候補とされる。すなわち、削除候補とした資料のすべてを削除しても資料のデータサイズの合計が閾値を超えていた場合、なるべく資料を残すという方針が断念され、リークオブジェクトを特定するために最低限の資料を残して、その他の資料が削除される。
【００８６】
一般に、メモリリーク調査では、リークオブジェクトを多く含む資料とあまり含まない資料を比較して、リークオブジェクトが特定される。そのため、最新の資料と、リークが疑われているクラスのオブジェクト数が最も少ない資料が残される。最新の資料との比較対象として、リークしているクラスのオブジェクトが少ない資料ほど、最新の資料とのオブジェクト数の差が大きくなる。そのため、メモリリーク調査を行いやすくなる。なおオブジェクト数が最少の資料が複数ある場合は、例えば最新の資料が残される。
【００８７】
図１４は、最新の資料と各クラスの最もオブジェクト数が少ない資料とのいずれでもない資料の削除例を示す図である。図１４の例では、クラスｘにおいてオブジェクト数が最も少ないのは、資料「ｂ」である。そのため、クラスｘにおける削除候補は、資料「ａ」、「ｄ」、「ｆ」である。クラスｙにおいてオブジェクト数が最も少ないのは、資料「ａ」である。そのため、クラスｙにおける削除候補は、資料「ｂ」、「ｄ」、「ｅ」である。クラスｚにおいてオブジェクト数が最も少ないのは、資料「ａ」である。そのため、クラスｚにおける削除候補は、資料「ｂ」、「ｄ」、「ｅ」である。そして各クラスで削除候補とされた資料「ｄ」、「ｅ」が最終的な削除候補とされる。
【００８８】
各クラスにおいて、オブジェクト数が最小となる資料が重複しない場合、残される資料数は、「リーククラス数＋１」個となる。
なお、第２の実施の形態において削除候補資料の削除を行うのは、資料の総データ量が閾値を超えた場合である。閾値は、メモリリークの原因解析のための資料を確保できるだけの十分大きな値とする。
【００８９】
資料の総データ量が閾値を超えた後に資料の削除を行うことで、資料の有用性を適切に判断することができる。すなわち、資料採取の開始直後など、メモリリーク原因の判断材料となる情報が少ないときは、一時的なオブジェクト数の増減で、オブジェクト数の増加傾向が判断されてしまう。他方、資料の総サイズが最大値を超えるほど多くなると、長期的に見て増加傾向にあるクラスに着目できるようになる。
【００９０】
図１５は、資料採取期間の違いによるオブジェクト数の増加傾向の判断結果の食い違い例を示す図である。図１５では、左側に資料採取期間が短い場合のオブジェクト数の増加傾向の判断例を示し、右側に資料採取期間が長い場合のオブジェクト数の増加傾向の判断例を示している。資料採取期間が短い場合、クラスｙよりもクラスｘの方がオブジェクトの増加度合いが高い。そのため、資料採取期間が短いと、クラスｘがリーククラスであると判断される。他方、ある程度長い期間の資料採取後にオブジェクト数の増加傾向を判断したとき、クラスｘはある一定のオブジェクト数で頭打ちとなり、増加傾向がなくなっている。そうすると、クラスｘは、リーククラスではない可能性が高い。それに対してクラスｙは、長い期間にかけて順調にオブジェクト数が増加している。そのため資料採取期間が長ければ、クラスｙの方をリーククラスと正しく判断することができる。
【００９１】
次に、資料管理部１３０による資料管理処理の手順について詳細に説明する。なお、資料管理部１３０には、以下の情報が予め設定されているものとする。
１）保存できる資料の総データ量（資料サイズの合計）の最大値（資料削除が行われる閾値）
２）資料採取の時間間隔（待機時間）
３）着目するクラス数（Ｋ）
図１６は、資料管理処理の手順の一例を示すフローチャートである。
【００９２】
［ステップＳ１０１］資料管理部１３０のコマンド通知部１３１は、仮想マシン１１０に対して資料採取コマンドを送信する。仮想マシン１１０では、資料採取コマンドに応じて、ダンプファイル作成部１１２によりメモリ１１１内のデータのヒープダンプが実行される。ヒープダンプで取得されたデータは、ダンプファイルとして、ファイルシステム１２０を介して例えばＨＤＤ１０３に格納される。
【００９３】
［ステップＳ１０２］ダンプファイルが採取されると、ヒストグラム作成部１３２が、採取されたダンプファイルに含まれるクラスごとのオブジェクト数のヒストグラムを作成する。例えばヒストグラム作成部１３２は、ダンプファイルに含まれるオブジェクトの情報に基づいて、存在するオブジェクトを、そのオブジェクトが属するクラスと判断する。そしてヒストグラム作成部１３２は、クラスごとに、そのクラスに属するオブジェクト数を計数する。ヒストグラム作成部１３２は、各クラスのオブジェクト数を含むヒストグラムファイルを生成し、ファイルシステム１２０を介して、生成したヒストグラムファイルをＨＤＤ１０３に格納する。
【００９４】
［ステップＳ１０３］リーククラス特定部１３３は、クラスごとのオブジェクト増加傾向を計算し、増加傾向が大きい方から所定数のクラスを、リーククラスとして特定する。例えばリーククラス特定部１３３は、線形近似によりオブジェクト数の推移を示す直線を求め、直線の傾きによりオブジェクトの増加傾向を判断する。リーククラス特定処理の詳細は後述する（図１８参照）。
【００９５】
［ステップＳ１０４］資料削除部１３４は、各クラスのヒストグラムの解析などにより、各資料の有用性を判断する。そして、資料の総データ量が閾値を超えている場合、資料削除部１３４は、有用でない資料から順に削除する。資料削除処理の詳細は後述する（図１９〜図２１参照）。
【００９６】
［ステップＳ１０５］コマンド通知部１３１は、前回の資料採取コマンドの送信から一定時間待機後、処理をステップＳ１０１に進め、次の資料採取コマンドを送信する。
このような手順で、資料採取と、資料の総データ量が閾値を超えた場合の資料の削除とが繰り返される。
【００９７】
次に、オブジェクト増加傾向計算処理について詳細に説明する。例えば、最小二乗法を使ってオブジェクト数の線形近似直線が計算される。例えば、クラスのオブジェクト数の近似直線の傾きが、そのクラスのオブジェクト数の増加傾向となる。
【００９８】
ここで、採取した資料数をｎ（ｎは１以上の整数）とする。またｉ番目の資料（ｉは１以上ｎ以下の整数）を採取した時刻をｘi、ｋ番目のクラス（ｋは１以上の整数）のｉ番目の資料におけるオブジェクト数をｙkiとする。この場合の最小二乗法による近似直線の傾きは、以下の式で表される。
【００９９】
【数１】
0006447348.tif 000002
【０１００】
式（１）の計算によりリーククラスを特定するため、リーククラス特定部１３３は、メモリ１０２内に、リーククラスを特定処理に使用する記憶領域を確保する。
図１７は、リーククラス特定処理に使用する記憶領域内のデータの一例を示す図である。例えばリーククラス特定部１３３は、クラスリスト３１、資料情報３２、およびクラス情報３３の記憶領域をメモリ１０２内に確保する。クラスリスト３１の記憶領域には、各クラスのクラスＩＤとクラス名とが格納される。資料情報３２の記憶領域には、ｘiの合計、ｘi2の合計、採取した資料数が格納される。クラス情報３３の記憶領域には、クラスＩＤに対応付けて、ｙkiの合計、ｘiｙkiの合計、および傾きが格納される。図１７に示したような情報を用いて、リーククラスの特定処理が実行される。
【０１０１】
図１８は、リーククラス特定処理の手順の一例を示す図である。
［ステップＳ１１１］リーククラス特定部１３３は、変数ｉの値を１に初期化する。
［ステップＳ１１２］リーククラス特定部１３３は、採取した資料のうちのｉ番目の資料の情報で、資料情報３２を更新する。例えばリーククラス特定部１３３は、ｘiの合計に、ｉ番目の資料の時刻ｘiを加算する。またリーククラス特定部１３３は、ｘi2の合計に、ｉ番目の資料の時刻ｘiの自乗を加算する。さらにリーククラス特定部１３３は、採取した資料数に１を加算する。
【０１０２】
［ステップＳ１１３］リーククラス特定部１３３は、未処理の資料があるか否かを判断する。未処理の資料があれば、処理がステップＳ１１４に進められる。未処理の資料がなければ、処理がステップＳ１１５に進められる。
【０１０３】
［ステップＳ１１４］リーククラス特定部１３３は、変数ｉに１を加算し、処理をステップＳ１１２に進める。
［ステップＳ１１５］リーククラス特定部１３３は、変数ｋの値を１に初期化する。
【０１０４】
［ステップＳ１１６］リーククラス特定部１３３は、変数ｉの値を１に初期化する。
［ステップＳ１１７］リーククラス特定部１３３は、クラス情報３３内のｋ番目のクラスに関する、ｙkiの合計とｘiｙkiの合計とを更新する。例えばリーククラス特定部１３３は、ｙkiの合計に、ｋ番目のクラスのｉ番目の資料におけるオブジェクト数ｙkiを加算する。またリーククラス特定部１３３は、ｘiｙkiの合計に、ｉ番目の資料の時刻ｘiと、ｋ番目のクラスのｉ番目の資料におけるオブジェクト数ｙkiとの乗算値を加算する。
【０１０５】
［ステップＳ１１８］リーククラス特定部１３３は、未処理の資料があるか否かを判断する。未処理の資料があれば、処理がステップＳ１１９に進められる。未処理の資料がなければ、処理がステップＳ１２０に進められる。
【０１０６】
［ステップＳ１１９］リーククラス特定部１３３は、変数ｉに１を加算し、処理をステップＳ１１７に進める。
［ステップＳ１２０］リーククラス特定部１３３は、ｋ番目のクラスについて、オブジェクトの増加傾向を示す直線の傾きを計算する。例えばリーククラス特定部１３３は、資料情報３２内の値と、クラス情報３３内のｋ番目のクラスに関する値とを式（１）に代入し、傾きを計算する。リーククラス特定部１３３は、計算した傾きを、ｋ番目のクラスのクラスＩＤに対応付けて、クラス情報３３に設定する。
【０１０７】
［ステップＳ１２１］リーククラス特定部１３３は、未処理のクラスがあるか否かを判断する。未処理のクラスがあれば、処理がステップＳ１２２に進められる。未処理のクラスがなければ、処理がステップＳ１２３に進められる。
【０１０８】
［ステップＳ１２２］リーククラス特定部１３３は、変数ｋに１を加算し、処理をステップＳ１１６に進める。
［ステップＳ１２３］リーククラス特定部１３３は、オブジェクトの増加傾向が大きいＫ個のクラスを、リーククラスとして特定する。例えばリーククラス特定部１３３は、クラス情報３３に含まれるクラスごとのエントリを、傾きで降順にソートする。そしてリーククラス特定部１３３は、上位Ｋ個のクラスを、リーククラスとして特定する。
【０１０９】
複数のリーククラスが特定されると、各リーククラスのオブジェクト数の増減に基づいて、削除候補の資料が判定される。そして、資料の総データ量が閾値以下となるまで、削除候補の資料が削除される。
【０１１０】
以下、図１９〜図２１を参照して、資料の削除処理について詳細に説明する。なお、以下の説明で用いる変数の意味は以下の通りである。
ｉ：資料ＩＤ
Ｉ：資料数（削除した資料を含む）
ｊ：クラスＩＤ
Ｊ：クラス数
Ｙ［ｉ］［ｊ］：資料ｉに含まれるクラスｊのオブジェクト数
Ｓ＝｛Ｓ0，Ｓ1，...，Ｓi，...，ＳI-1｝：採取した資料の集合
ｋ：着目するクラスＩＤのインデックス
Ｋ：着目するクラス数
Ｘ＝｛Ｘ0，Ｘ1，...，Ｘk，...，ＸK-1｝：注目するクラスＩＤの集合
（０≦ｋ＜Ｋ，０≦Ｘk＜ｊ）
ＤＳ［ｋ］：クラス（ＩＤ＝＝Ｘk）の削除候補資料の集合
ＴＤＳ：全体での削除候補資料の集合（ＤＳ［０］〜ＤＳ［Ｋ−１］の積集合）
図１９は、資料削除処理の手順の一例を示すフローチャート（１／３）である。図１９には、クラスごとの削除候補資料を決定するまでの処理が示されている。
【０１１１】
［ステップＳ１３１］資料削除部１３４は、新たに採取した資料に基づいて、変数の値を更新する。例えば資料削除部１３４は、Ｉに１を加算する。また資料削除部１３４は、Ｓに、新たに採取した資料（Ｉ−１番目の資料）を追加する。さらに資料削除部１３４は、Ｙ［Ｉ−１］［ｊ］（０≦ｊ＜Ｊ）に、新たに採取した資料（ＳI-1）に含まれる各クラスのオブジェクト数を代入する。
【０１１２】
［ステップＳ１３２］資料削除部１３４は、資料サイズ（バイト数）の合計が閾値を超過しているか否かを判断する。資料サイズの合計が閾値を超過している場合、処理がステップＳ１３３に進められる。閾値を超過していなければ、資料を削除せずに、資料削除処理が終了する。
【０１１３】
［ステップＳ１３３］資料削除部１３４は、Ｘを初期化する。例えば資料削除部１３４は、オブジェクト数の増加傾向が大きいクラスのクラスＩＤから順に、ＸにクラスＩＤを追加する。また資料削除部１３４は、ｋの値を「０」に初期化する。
【０１１４】
［ステップＳ１３４］資料削除部１３４は、ｉにＩ−１を設定する。また資料削除部１３４は、ｊにＸkを設定する。また資料削除部１３４は、ｍｉｎに、設定可能な整数の最大値を設定する。さらに資料削除部１３４は、ＤＳ［ｋ］を空集合に初期化する。
【０１１５】
［ステップＳ１３５］資料削除部１３４は、ＳにＳiが存在するか否かを判断する。Ｓiが削除されていなければ、ＳiはＳに存在する。Ｓiが存在する場合、処理がステップＳ１３６に進められる。Ｓiが存在しなければ、処理がステップＳ１３９に進められる。
【０１１６】
［ステップＳ１３６］資料削除部１３４は、Ｙ［ｉ］［ｊ］の値がｍｉｎより小さいか否かを判断する。Ｙ［ｉ］［ｊ］の値がｍｉｎより小さい場合、処理がステップＳ１３７に進められる。Ｙ［ｉ］［ｊ］の値がｍｉｎ以上であれば、処理がステップＳ１３８に進められる。
【０１１７】
［ステップＳ１３７］資料削除部１３４は、ｍｉｎに、現在のＹ［ｉ］［ｊ］の値を設定し、処理をステップＳ１３９に進める。
［ステップＳ１３８］資料削除部１３４は、ＤＳ［ｋ］に、ｉ番目の資料Ｓiを含める。
【０１１８】
［ステップＳ１３９］資料削除部１３４は、ｉの値が「０」か否かを判断する。ｉの値が「０」であれば、処理がステップＳ１４１に進められる。ｉの値が「０」でなければ、処理がステップＳ１４０に進められる。
【０１１９】
［ステップＳ１４０］資料削除部１３４は、ｉの値をデクリメント（「１」を減算）し、処理をステップＳ１３５に進める。
［ステップＳ１４１］資料削除部１３４は、ｋの値がＫ−１か否かを判断する。ｋの値がＫ−１であれば、処理がステップＳ１５１（図２０参照）に進められる。ｋの値がＫ−１でなければ、処理がステップＳ１４２に進められる。
【０１２０】
［ステップＳ１４２］資料削除部１３４は、ｋの値をインクリメント（「１」を加算）して、処理をステップＳ１３４に進める。
図２０は、資料削除処理の手順の一例を示すフローチャート（２／３）である。図２０には、図１９の処理により各クラスで削除候補となった資料の削除処理が示されている。
【０１２１】
［ステップＳ１５１］資料削除部１３４は、ＴＤＳに、ＤＳ［０］〜ＤＳ［Ｋ−１］の積集合を設定する。
［ステップＳ１５２］資料削除部１３４は、ＴＤＳが空か否かを判断する。ＴＤＳが空であれば、処理がステップＳ１６１（図２１参照）に進められる。ＴＤＳが空でなければ、処理がステップＳ１５３に進められる。
【０１２２】
［ステップＳ１５３］資料削除部１３４は、ＴＤＳの中で採取時期が最も古い資料Ｓoldを削除する。例えば資料削除部１３４は、ファイルシステム１２０に対して、資料Ｓoldに含まれるダンプファイルとヒストグラムファイルとの削除コマンドを送信する。すると、ファイルシステム１２０により、ＨＤＤ１０３から該当するダンプファイルとヒストグラムファイルとが削除される。資料削除部１３４は、ＴＤＳからも資料Ｓoldを削除する。
【０１２３】
［ステップＳ１５４］資料削除部１３４は、資料サイズの合計が閾値を超過しているか否かを判断する。閾値を超過していれば、処理がステップＳ１５２に進められる。閾値を超過していなければ、資料削除処理が終了する。
【０１２４】
このように新しい（ｉが大きい）資料のオブジェクト数から順に調査され、既知の最小値よりオブジェクト数が小さい場合は最小値が更新され、それ以外の場合は削除候補資料の集合に資料番号が追加される。Ｋ個のクラスすべてに対して計算し終わると、各クラスの集合の積集合をとって、削除候補資料の集合が算出される。そして、資料サイズの合計が閾値を超えるか、集合が空になるまで集合に含まれる資料が削除される。このように、新しい資料から順に調査し、いずれかのクラスのオブジェクト数の最小値が更新される資料を残すことで、オブジェクト回収後に残存したオブジェクトに関する資料を、削除せずに残しておくことができる。その結果、残存した資料を解析することで、回収できないオブジェクトを容易に見つけ出すことができる。
【０１２５】
図１９、図２０の処理により資料を削除しても、資料の総データ量が閾値を超えている場合、図２１に示す処理により、さらに資料の削除が行われる。
図２１は、資料削除処理の手順の一例を示すフローチャート（３／３）である。図２１には、図２０の処理では、最新の資料と、各クラスにおけるオブジェクト数が最小の資料以外を削除候補資料として、資料を削除する処理が示されている。なお図２１の処理で削除する資料の集合をＥＳとする。
【０１２６】
［ステップＳ１６１］資料削除部１３４は、ｋの値を「０」に初期化する。また資料削除部１３４は、ＥＳに、最新の資料を除外した資料の集合「Ｓ−ＳI-1」を設定する。
［ステップＳ１６２］資料削除部１３４は、ＳにＳI-2が存在するか否かを判断する。ＳI-2が存在する場合、処理がステップＳ１６３に進められる。ＳI-2が存在しない場合、処理がステップＳ１７２に進められる。
【０１２７】
［ステップＳ１６３］資料削除部１３４は、ｉにＩ−２を設定する。また資料削除部１３４は、ｊにＸkを設定する。さらに資料削除部１３４は、ｍｉｎにＹ［Ｉ−１］［ｊ］の値を設定する。そして資料削除部１３４は、ｍｉｎ＿ｉ（オブジェクト数が最小値となる資料の番号）に初期値「−１」を設定する。
【０１２８】
［ステップＳ１６４］資料削除部１３４は、Ｙ［ｉ］［ｊ］の値がｍｉｎの値より小さいか否かを判断する。Ｙ［ｉ］［ｊ］の値の方が小さければ、処理がステップＳ１６５に進められる。Ｙ［ｉ］［ｊ］の値がｍｉｎの値以上であれば、処理がステップＳ１６６に進められる。
【０１２９】
［ステップＳ１６５］資料削除部１３４は、ｍｉｎにＹ［ｉ］［ｊ］の値を設定する。また資料削除部１３４は、ｍｉｎ＿ｉに、現在判断している資料の番号ｉの値を設定する。
【０１３０】
［ステップＳ１６６］資料削除部１３４は、ｉの値が「０」か否かを判断する。ｉの値が「０」であれば、処理がステップＳ１６８に進められる。ｉの値が「０」でなければ、処理がステップＳ１６７に進められる。
【０１３１】
［ステップＳ１６７］資料削除部１３４は、ｉの値をデクリメントして、処理をステップＳ１６４に進める。
［ステップＳ１６８］資料削除部１３４は、ｍｉｎ＿ｉの値が「−１」か否かを判断する。ｍｉｎ＿ｉの値が「−１」の場合とは、最後に採取した資料のオブジェクト数が最も少ない場合である。ｍｉｎ＿ｉの値が「−１」であれば、処理がステップＳ１７０に進められる。ｍｉｎ＿ｉの値が「−１」でなければ、処理がステップＳ１６９に進められる。
【０１３２】
［ステップＳ１６９］資料削除部１３４は、ＥＳからＳmin-iを削除する。
［ステップＳ１７０］資料削除部１３４は、ｋの値がＫ−１と同じか否かを判断する。ｋの値がＫ−１と同じであれば、処理がステップＳ１７２に進められる。ｋの値がＫ−１と同じでなければ、処理がステップＳ１７１に進められる。
【０１３３】
［ステップＳ１７１］資料削除部１３４は、ｋの値をインクリメント（１を加算）して、処理をステップＳ１６３に進める。
［ステップＳ１７２］資料削除部１３４は、ＥＳに含まれている資料を削除する。例えば、ファイルシステム１２０に対して、ＥＳに含まれる資料のダンプファイルとヒストグラムファイルとの削除コマンドを送信する。すると、ファイルシステム１２０により、ＨＤＤ１０３から該当するダンプファイルとヒストグラムファイルとが削除される。資料削除部１３４は、Ｓからも、ＥＳに含まれる資料を示す要素を削除する。
【０１３４】
図２１に示したように、Ｋ個のクラスすべてに対してオブジェクト数が最も少ない資料が求められ、その資料と最新の資料を除いたすべての資料が削除候補となる。オブジェクト数が最も少ない資料は、回収可能なオブジェクトの多くが回収された後の資料と考えられる。そのため、オブジェクト数が最も少ない資料を解析すれば、回収ができないオブジェクトを容易に見つけ出すことができる。また最新の資料には、現在存在するオブジェクトがすべて含まれる。そのため、最新の資料を削除せずに残すことで、資料の削除により、回収できないオブジェクトの痕跡が消失してしまうことを抑止できる。
【０１３５】
以上説明したように、第２の実施の形態によれば、オブジェクトの生成前と回収後の資料を残し、その他の収資を削除することで、メモリリークの原因解析に特に有用な資料を残して、有用性が低い資料を削除することができる。その結果、資料の総データ量を閾値以内に抑えながらも、メモリリークの解析に有効な資料を確実に保存することができる。
【０１３６】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０１３７】
１０  ダンプデータ管理装置
１１  メモリ
１１ａ，１１ｂ，・・・  オブジェクト
１２  ストレージ装置
１２ａ〜１２ｆ  ダンプデータ
１３  演算部
【図１】
0006447348.tif 000003
【図２】
0006447348.tif 000004
【図３】
0006447348.tif 000005
【図４】
0006447348.tif 000006
【図５】
0006447348.tif 000007
【図６】
0006447348.tif 000008
【図７】
0006447348.tif 000009
【図８】
0006447348.tif 000010
【図９】
0006447348.tif 000011
【図１０】
0006447348.tif 000012
【図１１】
0006447348.tif 000013
【図１２】
0006447348.tif 000014
【図１３】
0006447348.tif 000015
【図１４】
0006447348.tif 000016
【図１５】
0006447348.tif 000017
【図１６】
0006447348.tif 000018
【図１７】
0006447348.tif 000019
【図１８】
0006447348.tif 000020
【図１９】
0006447348.tif 000021
【図２０】
0006447348.tif 000022
【図２１】
0006447348.tif 000023