JP6447348B2 - ダンプデータ管理プログラム、ダンプデータ管理方法、およびダンプデータ管理装置 - Google Patents

ダンプデータ管理プログラム、ダンプデータ管理方法、およびダンプデータ管理装置 Download PDF

Info

Publication number
JP6447348B2
JP6447348B2 JP2015093791A JP2015093791A JP6447348B2 JP 6447348 B2 JP6447348 B2 JP 6447348B2 JP 2015093791 A JP2015093791 A JP 2015093791A JP 2015093791 A JP2015093791 A JP 2015093791A JP 6447348 B2 JP6447348 B2 JP 6447348B2
Authority
JP
Japan
Prior art keywords
dump data
class
objects
dump
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015093791A
Other languages
English (en)
Other versions
JP2016212538A (ja
Inventor
端和 高宮
端和 高宮
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2015093791A priority Critical patent/JP6447348B2/ja
Priority to US15/083,414 priority patent/US10204000B2/en
Publication of JP2016212538A publication Critical patent/JP2016212538A/ja
Application granted granted Critical
Publication of JP6447348B2 publication Critical patent/JP6447348B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0778Dumping, i.e. gathering error/state information after a fault for later diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis

Landscapes

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

Description

本発明は、ダンプデータ管理プログラム、ダンプデータ管理方法、およびダンプデータ管理装置に関する。
マルチプロセスで動作するコンピュータシステムでは、プロセスが終了すると、そのプロセスで使用していたメモリの記憶領域が開放されるようにプログラムが作成されている。ところがプログラムの欠陥などにより、プロセスが終了しても、そのプロセスが使用していた記憶領域が開放されない場合がある。このように、メモリの記憶領域が確保されたままになることをメモリリークという。メモリリークは、システムの異常終了やスローダウンの原因となる。
例えば、使用されなくなったメモリ領域を開放する機能として、ガベージコレクション(GC:Garbage Collection)がある。GCでは、不要なデータが格納されているメモリ領域を解放することを、データの回収と称する。GCを実装したシステムでも、メモリリークは発生する。例えば、プログラムから不要なデータ(オブジェクト)への参照が残ることで、GCが不要なデータを回収できないとき、メモリリークとなる。不要なデータかどうかを機械的に正確に判断することは難しいため、GCを用いても、メモリリークを完全になくすことは困難である。
不要なオブジェクトかどうかの機械的な判断は難しいことから、実際のメモリリークの調査では、ヒープダンプ(メモリ中のデータのスナップショットダンプ)によるダンプデータやクラスヒストグラムといった資料が採取される。クラスヒストグラムは、オブジェクト指向プログラミングにおけるクラスごとのオブジェクト数の推移をグラフ化したものである。採取した資料を人手で解析することで、メモリリークの発生の有無が判断される。
メモリリークの調査において、資料の適切な採取タイミングを採取前に判断することは難しい。そのため、なるべく多くのタイミングで資料を採取することが好ましい。ただしメモリ容量の大規模化に伴い、ダンプデータのデータ量も増大している。そのため、頻繁にダンプデータを採取し、すべてのダンプデータを保存しておくと、ストレージ装置の記憶容量が圧迫される。そこで、例えばダンプデータのデータの総量が所定値に達すると、採取時期が古いダンプデータから順に削除される。
国際公開第2004/099985号 米国特許第7979748号明細書 米国特許第7953772号明細書 特開平10−333938号公報 特開2009−151680号公報
しかし、従来は、ストレージ装置の記憶容量の圧迫を避けるために、ヒープダンプなどにより繰り返し採取した多数のダンプデータのうちの一部を削除する際、メモリリークの原因解析にどの資料が有用なのか否かが考慮されていない。そのため、メモリリークの原因解析に有用なダンプデータを削除してしまう可能性がある。メモリリークの原因解析に有用なダンプデータが削除されると、原因解析が困難となる。
1つの側面では、本件は、メモリリークの原因解析に有用なダンプデータが削除されることを抑止することを目的とする。
1つの案では、コンピュータに以下の処理を実行させるダンプデータ管理プログラムが提供される。
ダンプデータ管理プログラムに基づいて、コンピュータは、複数のクラスのオブジェクトが格納されるメモリから異なる時期に取得された複数のダンプデータに基づいて、前記複数のクラスそれぞれに属するオブジェクト数の情報を生成する。次にコンピュータは、生成した前記オブジェクト数の情報に基づいて、クラスごとに、該クラスのオブジェクト数の時間変化においてオブジェクト数が極小となるダンプデータの少なくとも一部を、保存候補のダンプデータとして決定する。そしてコンピュータは、クラスごとに決定された保存候補のダンプデータを、ダンプデータ総量削減時の削除対象から除外する。
1態様によれば、メモリリークの原因解析に有用なダンプデータが削除されることを抑止できる。
第1の実施の形態に係るダンプデータ管理装置の一例を示す図である。 ダンプデータ管理処理の手順の一例を示すフローチャートである。 第2の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。 コンピュータにおけるダンプファイル管理機能を示すブロック図である。 ダンプファイルのデータ構造例を示す図である。 ヒストグラムファイルの一例を示す図である。 リーククラスのオブジェクトの数の増加量が閾値を超えたときの前後の資料を残す例を示す図である。 リーククラスのオブジェクトの数の増加量が閾値を超えたときの前後の資料を残すことによる問題を説明する図である。 1つのクラスをリーククラスとして特定して資料を削除する場合の問題を説明する図である。 オブジェクトの回収を考慮した資料削除の判断例を示す図である。 オブジェクトの生成・回収が繰り返された場合の資料削除の判断例を示す図である。 最新の資料と最もオブジェクト数が少ない資料とを残す例を示す図である。 複数のリーククラスで削除候補となった資料の削除例を示す図である。 最新の資料と各クラスの最もオブジェクト数が少ない資料とのいずれでもない資料の削除例を示す図である。 資料採取期間の違いによるオブジェクト数の増加傾向の判断結果の食い違い例を示す図である。 資料管理処理の手順の一例を示すフローチャートである。 リーククラス特定処理に使用する記憶領域内のデータの一例を示す図である。 リーククラス特定処理の手順の一例を示す図である。 資料削除処理の手順の一例を示すフローチャート(1/3)である。 資料削除処理の手順の一例を示すフローチャート(2/3)である。 資料削除処理の手順の一例を示すフローチャート(3/3)である。
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第1の実施の形態〕
以下、第1の実施の形態について説明する。第1の実施の形態は、メモリリークの原因解析用のダンプデータの総データ量の抑制のためにダンプデータの一部を削除する際に、メモリリークの原因解析に有用なダンプデータが削除されることを抑止するものである。
図1は、第1の実施の形態に係るダンプデータ管理装置の一例を示す図である。ダンプデータ管理装置10は、メモリ11、ストレージ装置12、および演算部13を有する。
メモリ11には、複数のクラスのオブジェクト11a,11b,・・・が格納される。
ストレージ装置12には、メモリ11から異なる時期に取得された複数のダンプデータ12a〜12fが格納される。例えば定期的なスナップショットダンプによりメモリ11から採取されたダンプデータが、ストレージ装置12に格納される。
演算部13は、例えばダンプデータ管理装置10が有するプロセッサである。複数のダンプデータ12a〜12fを管理する。例えば演算部13は、複数のダンプデータ12a〜12fの総データ量が所定の閾値を超えた場合、ダンプデータ総量削減処理を行う。
ダンプデータ総量を削減する際には、演算部13は、まず、複数のダンプデータ12a〜12fに基づいて、複数のクラスそれぞれに属するオブジェクト数の情報を生成する。例えばダンプデータ12a〜12fごとに、オブジェクト数のヒストグラムが生成される。
次に演算部13は、生成したオブジェクト数の情報に基づいて、クラスごとに、該クラスのオブジェクト数の時間変化においてオブジェクト数が極小となるダンプデータの少なくとも一部を、保存候補のダンプデータとして決定する。オブジェクト数が極小となるダンプデータとは、直前に取得したダンプデータよりもオブジェクト数が少なく、直後に取得したダンプデータよりもオブジェクト数が少ないダンプデータである。例えば演算部13は、複数のダンプデータ12a〜12fそれぞれを判定対象とする。そして演算部13は、判定対象のダンプデータにおけるあるクラスのオブジェクト数が、その判定対象のダンプデータより後に取得された他のダンプデータそれぞれの該クラスのオブジェクト数より少ないかどうかを判断する。演算部13は、判定対象のダンプデータのオブジェクト数の方が少ない場合、その判定対象のダンプデータを保存候補のダンプデータとする。
さらに演算部13は、クラスごとに決定された保存候補のダンプデータを、ダンプデータ総量削減時の削除対象から除外する。そして演算部13は、ダンプデータ総量が所定の閾値を超えると、ダンプデータ総量が閾値以下となるまで、保存候補以外のダンプデータを削除する。
なお演算部13は、複数のクラスのうち、メモリリークの発生原因となっている可能性の高いクラスを選択し、選択したクラスのオブジェクト数の時間遷移から、保存候補のダンプデータを決定してもよい。例えば演算部13は、複数のクラスから、属するオブジェクト数の増加傾向が大きい方から2以上のクラスを選択し、選択されたクラスについての保存候補のダンプデータを決定する。
なお、演算部13は、最後に取得されたダンプデータを、保存候補ダンプデータとしてもよい。
さらに演算部13は、保存候補のダンプデータ以外のすべてのダンプデータを削除しても、ダンプデータの総量が閾値を超える場合、クラスごとに、保存候補のダンプデータの中から該クラスのオブジェクト数が最も少ないダンプデータを特定する。そして演算部13は、特定したダンプデータと最後に取得されたダンプデータとを除く保存候補のダンプデータを、ダンプデータ総量削減時の削除対象とする。
図2は、ダンプデータ管理処理の手順の一例を示すフローチャートである。
[ステップS11]演算部13は、メモリ11からダンプデータを採取する。演算部13は、採取したダンプデータに、採取時の時刻(タイムスタンプ)を付与し、ストレージ装置12に格納する。
[ステップS12]演算部13は、ストレージ装置12に格納されたダンプデータのデータサイズの合計が、閾値を超過したか否かを判断する。データサイズの合計が閾値を超過した場合、処理がステップS13に進められる。閾値を超過していなければ、処理がステップS20に進められる。
[ステップS13]演算部13は、クラスごとのオブジェクト数の増加傾向を算出する。オブジェクト数の増加傾向は、例えばオブジェクト数の時間遷移の近似直線の傾きで表される。
[ステップS14]演算部13は、オブジェクト数のオブジェクトの増加傾向が大きい方から所定数のクラスを特定する。
[ステップS15]演算部13は、削除候補のダンプデータを抽出する。例えば演算部13は、クラスに属するオブジェクト数の推移において、オブジェクト数が極小となるときのダンプデータ、および最新のダンプデータを削除候補から除外する。そして演算部13は、いずれのクラスにおいても、削除候補から除外されなかったダンプデータを、削除候補として抽出する。
[ステップS16]演算部13は、未削除の削除候補のダンプデータがあるか否かを判断する。削除候補のダンプデータのすべてが削除済みの場合、処理がステップS19に進められる。未削除の削除候補のダンプデータがある場合、処理がステップS17に進められる。
[ステップS17]演算部13は、削除候補のダンプデータの1つを、ストレージ装置12から削除する。
[ステップS18]演算部13は、ストレージ装置12に格納されたダンプデータのデータサイズの合計が、まだ閾値を超過しているか否かを判断する。データサイズの合計が閾値を超過している場合、処理がステップS16に進められる。閾値を超過していなければ、処理がステップS20に進められる。
[ステップS19]演算部13は、最新のダンプデータと、特定したクラスのいずれかにおいてオブジェクト数が最小となるダンプデータとを残し、その他のダンプデータをストレージ装置12から削除する。
[ステップS20]演算部13は、一定時間待機後、処理をステップS11に進める。
このようにして、ダンプデータのデータ総量の抑制のためのダンプデータ削除時にメモリリークの原因解析に有用なダンプデータが削除されるのを抑止することができる。また、ダンプデータのデータサイズの合計が閾値以下となった場合、ダンプデータの削除が停止される。
例えば、図1の例であれば、クラスxについては、最新のダンプデータ12fと、オブジェクト数が極小となるダンプデータ12bとが、保存候補となる。クラスyについては、最新のダンプデータ12fと、オブジェクト数が極小となるダンプデータ12a,12eとが、保存候補となる。クラスzについては、最新のダンプデータ12fと、オブジェクト数が極小となるダンプデータ12a,12dとが、保存候補となる。保存候補とされたダンプデータは、削除対象から除外される。すると削除対象となるのはダンプデータ12cのみである。そこで、ダンプデータ12cが、ストレージ装置12から削除される。
オブジェクト数が極小となるのは、GCによりオブジェクトが回収された後のダンプデータである。従って、オブジェクト数が極小となるダンプデータを削除候補から除外することで、GCによりオブジェクトが回収された後のダンプデータが削除されることを抑止できる。GCによりオブジェクトが回収された後のダンプデータには、回収できずに残存したオブジェクトが含まれていると共に、GCで回収されたオブジェクトは含まれていない。このようなダンプデータは、オブジェクトが回収できないことにより発生しているメモリリークの原因解析に有用である。従って、図2に示す処理でダンプデータを削除することで、メモリリークの原因解析に有用なダンプデータが削除されてしまうことが抑止される。
なお、オブジェクトが極小となるダンプデータの一部のみを保存候補にしてもよい。例えば、あるクラスにおいてオブジェクト数が極小となるダンプデータであっても、そのオブジェクト数が、それ以後に取得されたダンプデータのオブジェクト数よりも多い場合、保存候補にせずに、削除対象としてもよい。前に取得したダンプデータのオブジェクト数よりも、後の時刻に取得されたダンプデータのオブジェクト数の方が少ない場合、前に取得したダンプデータには、その後、GCにより回収されるオブジェクトが含まれている。そのため、メモリリークの原因解析においては、後の時刻に取得された、よりオブジェクト数の少ないダンプデータを解析した方が効率的である。従って、あるクラスにおいてオブジェクト数が極小となるダンプデータであっても、それ以後に取得されたダンプデータよりもオブジェクト数が多い場合、削除対象とすることで、ストレージ装置12の資源を有効活用し、効率的な原因解析が可能となる。
また、最新のダンプデータについては、常に保存候補として削除しないようにすることで、最近生成され回収不能となったオブジェクトに関する情報が削除されてしまうことを抑止できる。
さらに、複数のクラスそれぞれについて、オブジェクト数が極小となるダンプデータを保存候補とすると、削除可能なダンプデータのすべてを削除しても、ダンプデータのデータ総量が閾値を超える場合もある。この場合、各クラスについて、オブジェクト数が最小となるダンプデータと最新のダンプデータのみを保存候補とすることで、十分な量のダンプデータを削除することができる。またオブジェクト数が最小のダンプデータを保存しておくことで、そのダンプデータから、その時点で回収不能となっているオブジェクトの情報を取得できる。また最新のダンプデータを保存しておくことで、オブジェクト数が最小のダンプデータ取得以後に生成され、回収されていないオブジェクトの情報を、最新のダンプデータから取得できる。従って、残されたダンプデータからも、メモリリークの原因解析が可能である。
さらにオブジェクトの増加傾向が大きい2以上のクラスを対象として、保存候補のダンプデータを判断することで、メモリリークの発生原因となっているクラスを見落とすことを抑止できる。すなわち、増加傾向が大きい1つのクラスのオブジェクトの増減のみから保存候補のダンプデータを決定したのでは、他のクラスのオブジェクトが原因でメモリリークが発生していた場合に、原因解析が困難となる。増加傾向が大きい複数のクラスそれぞれのオブジェクトの増減に基づいて、保存するダンプデータを決定すれば、判断対象外のクラスがメモリリーク発生の原因である可能性が低くなる。その結果、メモリリークの原因解析に有用なダンプデータが削除されることが抑止される。
〔第2の実施の形態〕
次に第2の実施の形態について説明する。第2の実施の形態では、ヒープダンプのような、個々のオブジェクトの内容や参照関係を保持したダンプファイルと、クラスヒストグラム情報を含むファイルを合わせて「資料」とする。第2の実施の形態では、複数の資料の中から、メモリリーク調査に有用でないものから自動で削除できるようにする。これにより、採取資料によるディスク領域の使用量と、人手で資料を取捨選択する手間を削減することができる。
すなわち、資料を大量に採取して保存し続けると、ストレージ装置の記憶容量が圧迫される。例えば、メモリリークの原因となるオブジェクトを特定するためには、一般に、オブジェクト同士の参照関係を保持したダンプファイルの解析が行われるが、一つのダンプファイルのサイズは実行環境が使用するメモリ量よりも大きくなることが多い。そのため、定期的に保存するとストレージ装置の記憶容量を大量に消費する。その結果、記憶領域が不足するなど、運用環境に影響がある場合がある。
なお採取した資料のすべてがメモリリーク調査に有用であるとは限らない。そのため、不要な資料を削除することで、使用する記憶容量の消費を抑えることができる。採取資料の自動削除のためには、メモリリークの原因解析のための資料の有用性を適切に判断することが重要となる。
例えば、ログを自動で削除する手法として、ログローテーションがある。ログローテーションは、古いデータから順に削除対象とする、ログの削除手法である。ログローテーションを用いて資料を自動で削除すると、メモリリークの原因解析に有用な資料が削除される可能性がある。例えば、システム運用開始後の早い段階で、メモリリークの発生原因となるオブジェクト(リークオブジェクト)が生成され、その後長時間にわたって資料を採取し続けた場合を想定する。この場合に、古い資料から順に削除すると、メモリリークとは無関係の資料が残り、リークオブジェクトに関する資料は削除されてしまうおそれがある。そこで、第2の実施の形態では、メモリリーク調査資料を自動で削除する際に、各資料がメモリリークの原因解析に有用かどうかを判断し、有用な資料については、削除対象から除外する。
図3は、第2の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。コンピュータ100は、プロセッサ101によって装置全体が制御されている。プロセッサ101には、バス109を介してメモリ102と複数の周辺機器が接続されている。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU、MPU(Micro Processing Unit)、またはDSP(Digital Signal Processor)である。プロセッサ101がプログラムを実行することで実現する機能の少なくとも一部を、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現してもよい。
メモリ102は、コンピュータ100の主記憶装置として使用される。メモリ102には、プロセッサ101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ102には、プロセッサ101による処理に利用する各種データが格納される。メモリ102としては、例えばRAM(Random Access Memory)などの揮発性の半導体記憶装置が使用される。
バス109に接続されている周辺機器としては、HDD(Hard Disk Drive)103、グラフィック処理装置104、入力インタフェース105、光学ドライブ装置106、機器接続インタフェース107およびネットワークインタフェース108がある。
HDD103は、内蔵したディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD103は、コンピュータ100の補助記憶装置として使用される。HDD103には、OSのプログラム、アプリケーションプログラム、各種データ、およびダンプファイルが格納される。なお、補助記憶装置としては、フラッシュメモリなどの不揮発性の半導体記憶装置(SSD:Solid State Drive)を使用することもできる。
グラフィック処理装置104には、モニタ21が接続されている。グラフィック処理装置104は、プロセッサ101からの命令に従って、画像をモニタ21の画面に表示させる。モニタ21としては、CRT(Cathode Ray Tube)を用いた表示装置や液晶表示装置などがある。
入力インタフェース105には、キーボード22とマウス23とが接続されている。入力インタフェース105は、キーボード22やマウス23から送られてくる信号をプロセッサ101に送信する。なお、マウス23は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
光学ドライブ装置106は、レーザ光などを利用して、光ディスク24に記録されたデータの読み取りを行う。光ディスク24は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク24には、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。
機器接続インタフェース107は、コンピュータ100に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース107には、メモリ装置25やメモリリーダライタ26を接続することができる。メモリ装置25は、機器接続インタフェース107との通信機能を搭載した記録媒体である。メモリリーダライタ26は、メモリカード27へのデータの書き込み、またはメモリカード27からのデータの読み出しを行う装置である。メモリカード27は、カード型の記録媒体である。
ネットワークインタフェース108は、ネットワーク20に接続されている。ネットワークインタフェース108は、ネットワーク20を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
以上のようなハードウェア構成によって、第2の実施の形態の処理機能を実現することができる。なお、第1の実施の形態に示したダンプデータ管理装置10も、図3に示したコンピュータ100と同様のハードウェアにより実現することができる。例えば図3に示すプロセッサ101は、図1の演算部13の一例である。また図3に示すHDD103は、図1に示すストレージ装置12の一例である。図3に示すメモリ102は、図1のメモリ11に対応する。
コンピュータ100は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第2の実施の形態の処理機能を実現する。コンピュータ100に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、コンピュータ100に実行させるプログラムをHDD103に格納しておくことができる。プロセッサ101は、HDD103内のプログラムの少なくとも一部をメモリ102にロードし、プログラムを実行する。またコンピュータ100に実行させるプログラムを、光ディスク24、メモリ装置25、メモリカード27などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ101からの制御により、HDD103にインストールされた後、実行可能となる。またプロセッサ101が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
このようなコンピュータ100によりプログラムを実行中に、定期的にヒープダンプによりダンプファイルが生成される。ダンプファイルは、メモリリーク調査に用いられるが、すべてのダンプファイルを保存し続けると、HDD103の記憶領域が圧迫される。そこで、コンピュータ100では、適宜、不要なダンプファイルを削除する。
図4は、コンピュータにおけるダンプファイル管理機能を示すブロック図である。コンピュータ100は、仮想マシン110、ファイルシステム120、および資料管理部130を有する。
仮想マシン110は、メモリ111とダンプファイル作成部112とを有する。メモリ111は、仮想マシン110内に仮想的に実現されたものである。ダンプファイル作成部112は、資料管理部130から資料採取コマンドを受信すると、ヒープダンプを実行し、ダンプファイルをファイルシステム120に格納する。
ファイルシステム120は、コンピュータ100内のファイルを管理する。ファイルシステム120は、複数のダンプファイル121a,121b,・・・と、複数のダンプファイル121a,121b,・・・それぞれに対応するヒストグラムファイル122a,122b,・・・とを管理する。複数のダンプファイル121a,121b,・・・とヒストグラムファイル122a,122b,・・・とは、ファイルシステム120によって、例えばHDD103内に格納される。
資料管理部130は、コマンド通知部131、ヒストグラム作成部132、リーククラス特定部133、資料削除部134を有する。
コマンド通知部131は、所定間隔で、仮想マシン110に対して資料採取コマンドを送信する。
ヒストグラム作成部132は、ファイルシステム120で管理されているダンプファイル121a,121b,・・・のクラスヒストグラムを作成する。ヒストグラム作成部132は、作成したクラスヒストグラムを含むヒストグラムファイル122a,122b,・・・を、ファイルシステム120を介してHDD103に格納する。
リーククラス特定部133は、リークの発生が疑われるクラス(リーククラス)を特定する。例えばリーククラス特定部133は、まず、オブジェクトの増加傾向をクラスごとに計算する。そしてリーククラス特定部133は、例えば、オブジェクトの増加傾向が多い方から所定数のクラスを、リーククラスとして特定する。
資料削除部134は、各クラスのオブジェクトの増加傾向を参考に、削除する資料(ダンプファイルとヒストグラムファイルとの組)を決定する。そして資料削除部134は、削除することに決定した資料を、ファイルシステム120から削除する。
なお、図4に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。また、図4に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
図5は、ダンプファイルのデータ構造例を示す図である。ダンプファイル121には、クラスの情報、オブジェクトの情報、文字列の情報、および、その他の実行環境の情報が含まれる。
クラスの情報には、ヒープダンプの実行時に、仮想マシン110の実行環境に存在したすべてのクラスのエントリが含まれる。各クラスのエントリには、例えばクラスのID、クラスに属するオブジェクトのサイズ(バイト数)、およびその他クラスに関する情報が含まれる。クラスのIDは、各クラスを一意に識別する識別情報である。クラスに属するオブジェクトのサイズ(バイト数)は、対応するクラスに属するオブジェクトそれぞれが占有するメモリ容量の合計である。
オブジェクトの情報には、ヒープダンプの実行時に、仮想マシン110の実行環境に存在したすべてのオブジェクトのエントリが含まれる。各オブジェクトのエントリには、オブジェクトのID、オブジェクトが属するクラスのID、オブジェクトのサイズ(バイト数)、およびその他オブジェクトに関する情報が含まれる。オブジェクトIDは、各オブジェクトを一意に識別する識別情報である。オブジェクトが属するクラスのIDにより、そのオブジェクトと、そのオブジェクトが属するクラスとが対応付けられる。オブジェクトのサイズ(バイト数)は、対応するオブジェクトが占有するメモリ容量である。
文字列の情報には、クラスおよびオブジェクトごとに、クラスまたはオブジェクトのIDと、そのIDに対応する名前(クラス名またはオブジェクト名)を保持するエントリが含まれる。
このようなダンプファイル121を解析することで、ヒープダンプを採取した時点に実行環境に存在したクラスの名前と、各クラスのオブジェクトの数およびサイズが得られる。そしてダンプファイル121から得られた情報に基づいて、クラスヒストグラムを作成することが可能となる。
図6は、ヒストグラムファイルの一例を示す図である。ヒストグラムファイル122には、クラスごとの情報が設定されている。例えば「num」に示される通し番号に対応付けて、各クラスの情報が設定される。「#instances」の列には、対応するクラスのオブジェクト数が設定される。「#bytes」の列には、対応するクラスのオブジェクトが占有するメモリ111の記憶容量が設定される。「class name」の列に、クラスの名前が設定される。
資料管理部130は、各ダンプファイルから得られたヒストグラムを解析することで、各資料の有用性を判断する。資料の有用性の判断では、オブジェクト数の増減に関する情報が利用できる。
使用の有用性判断では、資料に含まれるオブジェクト数の増減傾向に基づいて、リーククラスが特定される。例えば、各クラスのオブジェクト数の増加傾向が大きい所定数のクラスがリーククラスと判断される。
不要な資料を削除する手法として、例えば、リーククラスのオブジェクトの数の増加量が閾値を超えたときの前後の資料を残し、他の資料が削除することが考えられる。
図7は、リーククラスのオブジェクトの数の増加量が閾値を超えたときの前後の資料を残す例を示す図である。図7では、資料「a」〜「e」のうち、資料「c」と資料「d」との間で、オブジェクト数が閾値以上増加している。そこで、資料「c」と資料「d」とが残され、他の資料「a」、「b」、「e」が削除される。
この方法は、リーククラスのオブジェクトがあまり回収されない場合には効果的である。すなわち、オブジェクト数が閾値以上増加している期間は、通常の処理で想定している数以上のオブジェクトが生成されているものと考えられ、そのオブジェクトの生成処理が、メモリリークの原因となっている可能性がある。ただしこの例では、オブジェクトの生成・回収が繰り返されるような場合では、メモリリーク調査に有用な資料を正しく判定できない。
図8は、リーククラスのオブジェクトの数の増加量が閾値を超えたときの前後の資料を残すことによる問題を説明する図である。図8では、例えば資料「b」、「c」でオブジェクト数が増加しているが、資料「d」において、増加分のオブジェクトの大多数が回収されている。同様に資料「e」、「f」では、オブジェクト数が増加しているが、その増加分は資料「g」でほぼなくなっている。
図8の例において、リーククラスのオブジェクトの数の増加量が閾値を超えたときの前後の資料を残し、他の資料を削除する場合、資料「a」、「b」、「d」、「e」が残され、資料「c」、「f」、「g」が削除される。
しかし、資料「b」、「c」で新たに発生しているオブジェクトは、資料「d」の時点で、そのほとんどが回収されている。そうすると、資料「a」の収集後、資料「b」の収集までに生成されたオブジェクトは回収されており、メモリリークの原因ではない。そのため資料「c」だけでなく資料「b」も、メモリリークの原因解析における有用性が低い。同様に、資料「e」、「f」で新たに発生しているオブジェクトは、資料「g」の時点で、そのほとんどが回収されており、資料「f」だけでなく資料「e」も、メモリリークの原因解析の有用性が低い。それにも拘わらず資料「b」、「e」が削除されないと、ディスク容量が圧迫される。
またリーククラスとしては、複数のクラスを特定するのが好ましい。これは、リーククラスを間違いなく特定するのが困難なためである。すなわち、特定したリーククラス内にリークが疑われるオブジェクトがあったとしても、そのオブジェクトがリークオブジェクトかどうかはアプリケーションの設計に依存し、機械的に判断することは難しい。もしリーククラスを1つのクラスに限定してしまうと、誤って有用な資料を削除してしまう可能性がある。
図9は、1つのクラスをリーククラスとして特定して資料を削除する場合の問題を説明する図である。図9には、クラスx、クラスy、クラスzのオブジェクト数の時間変化が示されている。図9の例では、オブジェクトの増加傾向が最も大きいのは、クラスxである。クラスxをリーククラスと特定した場合、クラスxのオブジェクト数の増加量が閾値を超えたときの前後の資料「b」、「c」が残され、他の資料「a」、「d」、「e」は削除される(この例では、最新の資料「f」は残すものとする)。
しかし、ある時期からクラスxのオブジェクトが回収され、以後、クラスxのオブジェクト数が減少する場合もある。その場合、クラスxがリーククラスではないことが、事後的に判明する。するとクラスyまたはクラスzがリーククラスとなるが、すでにクラスxのオブジェクト数の変化に基づいて資料の削除が行われていると、メモリリークの原因解析に有用な資料が削除されている可能性がある。
このように一時的に最も増加傾向にあるクラスのみをリーククラスと判断し、それ以外のクラスを無視して資料を削除してしまうと、リーククラスの判断が間違っていた場合、有用な資料が削除されるという結果を招く。すなわち、オブジェクト数の増加傾向だけでは、リーククラスを間違いなく一意に特定するのは困難であり、リーククラスの判断の誤りにより、有用な資料を削除してしまう可能性がでてくる。そこで、第2の実施の形態では、メモリリークの発生原因となっている疑いのある複数のクラスをリーククラスとして特定することで、有用な資料が削除されることを抑止する。
また図8、図9に示したように、リーククラスのオブジェクトの数の増加量が閾値を超えたときの前後の資料を残す方法では、リーククラスのオブジェクトがたくさん生成・回収される場合などに、不要な資料を適切に削除できない。これは、オブジェクト数の増加のみを考慮しており、オブジェクトが回収されたかどうかを考慮していないことが原因である。そこで、第2の実施の形態では、オブジェクトの回収も考慮してメモリリーク調査資料の有用性を判断する。
第2の実施の形態に係るコンピュータ100は、大別して以下の3つの処理を行う。以下の処理は、例えば資料採取のタイミングで実施される。
1)仮想マシン110は、ヒープダンプによりダンプファイルを採取する。
2)資料管理部130は、ダンプファイルに含まれるオブジェクト数の増減傾向を分析し、リークが疑われる複数のクラスを特定する。例えば資料管理部130は、各クラスのオブジェクト数を分析し、増加傾向が大きい所定数のクラスをリーククラスと判断する。
3)資料管理部130は、リーククラスのオブジェクト数の増減傾向を分析し、得られた未回収オブジェクトの数に基づいて不要と判定された資料を削除候補とし、すべてのリーククラスで削除候補となった資料を、削除する資料と判断する。
4)資料管理部130は、2)を実施しても資料の総データ量が閾値を超えていた場合、クラスに関して、最新の資料と一番オブジェクト数の少ない資料を残し、それ以外の資料を削除候補として、当該クラスすべてで削除候補となったものを削除する資料と判断する。
このように、資料管理部130は、1)、2)において、リークが疑われるクラスを特定し、3)において、オブジェクト回収が行われた資料を削除候補とする。
図10は、オブジェクトの回収を考慮した資料削除の判断例を示す図である。図10の例では、オブジェクト数は、資料「b」、「c」において増加した後、資料「d」において減少している。そうすると資料「d」よりもオブジェクト数が多い資料「b」、「c」に含まれているほとんどのオブジェクトは、資料「d」の採取までに回収されている。
メモリリークの原因解析では、回収不能となったオブジェクト(リークオブジェクト)を検出することが重要となる。リークオブジェクトは、使われなくなって不要となった後も参照され続け、GCによって回収されないオブジェクトである。そのため、オブジェクト数が減少した場合、少なくとも一部のオブジェクトは回収された、つまり回収されたオブジェクトはリークしていなかった、と言える。
図10の例では、資料「d」では、資料「b」、「c」に含まれるオブジェクトの一部が、資料「d」ではGCによって回収されており、回収されたオブジェクトはリークオブジェクトではなかったということが分かる。また回収されなかったリークオブジェクトは、資料「d」においても残存している。そのため、資料「b」、「c」は、メモリリークの原因解析に対する有用性が低い。そこで資料管理部130は、資料「b」、「c」を削除候補とする。
図11は、オブジェクトの生成・回収が繰り返された場合の資料削除の判断例を示す図である。オブジェクトの生成と回収とが繰り返された場合、オブジェクト回収後の資料「d」、「g」は、削除対象外とされる。またオブジェクト数が最も少ない資料「a」も削除対象外とされる。削除対象外とされなかった資料「b」、「c」、「e」、「f」は、削除候補とされる。
ここで、削除できるすべての資料を削除しても、資料の総データ量が閾値を超えている場合があり得る。例えば図11の資料「b」、「c」、「e」、「f」を削除しても、資料の総データ量が閾値を超えている場合である。この場合、最新の資料と、最もオブジェクト数が少ない資料とを残し、他の資料が削除候補とされる。
図12は、最新の資料と最もオブジェクト数が少ない資料とを残す例を示す図である。図12の例では、最新の資料「g」と、最もオブジェクト数が少ない資料「a」が削除対象外とされ、資料「d」が削除候補とされる。
なお削除候補とする資料の特定は、リーククラスごとに行われる。すべてのリーククラスにおいて削除候補とされた資料のみ、全体での最終的な削除候補となる。
図13は、複数のリーククラスで削除候補となった資料の削除例を示す図である。図13の例では、資料「c」のみが、すべてのクラスにおいて削除候補と判断されている。従って、資料「c」が削除される。
資料「c」を削除しても資料の総データ量が閾値を超えているのであれば、最新の資料ではなく、かつ各クラスの最もオブジェクト数が少ない資料でもない資料が削除候補とされる。すなわち、削除候補とした資料のすべてを削除しても資料のデータサイズの合計が閾値を超えていた場合、なるべく資料を残すという方針が断念され、リークオブジェクトを特定するために最低限の資料を残して、その他の資料が削除される。
一般に、メモリリーク調査では、リークオブジェクトを多く含む資料とあまり含まない資料を比較して、リークオブジェクトが特定される。そのため、最新の資料と、リークが疑われているクラスのオブジェクト数が最も少ない資料が残される。最新の資料との比較対象として、リークしているクラスのオブジェクトが少ない資料ほど、最新の資料とのオブジェクト数の差が大きくなる。そのため、メモリリーク調査を行いやすくなる。なおオブジェクト数が最少の資料が複数ある場合は、例えば最新の資料が残される。
図14は、最新の資料と各クラスの最もオブジェクト数が少ない資料とのいずれでもない資料の削除例を示す図である。図14の例では、クラスxにおいてオブジェクト数が最も少ないのは、資料「b」である。そのため、クラスxにおける削除候補は、資料「a」、「d」、「f」である。クラスyにおいてオブジェクト数が最も少ないのは、資料「a」である。そのため、クラスyにおける削除候補は、資料「b」、「d」、「e」である。クラスzにおいてオブジェクト数が最も少ないのは、資料「a」である。そのため、クラスzにおける削除候補は、資料「b」、「d」、「e」である。そして各クラスで削除候補とされた資料「d」、「e」が最終的な削除候補とされる。
各クラスにおいて、オブジェクト数が最小となる資料が重複しない場合、残される資料数は、「リーククラス数+1」個となる。
なお、第2の実施の形態において削除候補資料の削除を行うのは、資料の総データ量が閾値を超えた場合である。閾値は、メモリリークの原因解析のための資料を確保できるだけの十分大きな値とする。
資料の総データ量が閾値を超えた後に資料の削除を行うことで、資料の有用性を適切に判断することができる。すなわち、資料採取の開始直後など、メモリリーク原因の判断材料となる情報が少ないときは、一時的なオブジェクト数の増減で、オブジェクト数の増加傾向が判断されてしまう。他方、資料の総サイズが最大値を超えるほど多くなると、長期的に見て増加傾向にあるクラスに着目できるようになる。
図15は、資料採取期間の違いによるオブジェクト数の増加傾向の判断結果の食い違い例を示す図である。図15では、左側に資料採取期間が短い場合のオブジェクト数の増加傾向の判断例を示し、右側に資料採取期間が長い場合のオブジェクト数の増加傾向の判断例を示している。資料採取期間が短い場合、クラスyよりもクラスxの方がオブジェクトの増加度合いが高い。そのため、資料採取期間が短いと、クラスxがリーククラスであると判断される。他方、ある程度長い期間の資料採取後にオブジェクト数の増加傾向を判断したとき、クラスxはある一定のオブジェクト数で頭打ちとなり、増加傾向がなくなっている。そうすると、クラスxは、リーククラスではない可能性が高い。それに対してクラスyは、長い期間にかけて順調にオブジェクト数が増加している。そのため資料採取期間が長ければ、クラスyの方をリーククラスと正しく判断することができる。
次に、資料管理部130による資料管理処理の手順について詳細に説明する。なお、資料管理部130には、以下の情報が予め設定されているものとする。
1)保存できる資料の総データ量(資料サイズの合計)の最大値(資料削除が行われる閾値)
2)資料採取の時間間隔(待機時間)
3)着目するクラス数(K)
図16は、資料管理処理の手順の一例を示すフローチャートである。
[ステップS101]資料管理部130のコマンド通知部131は、仮想マシン110に対して資料採取コマンドを送信する。仮想マシン110では、資料採取コマンドに応じて、ダンプファイル作成部112によりメモリ111内のデータのヒープダンプが実行される。ヒープダンプで取得されたデータは、ダンプファイルとして、ファイルシステム120を介して例えばHDD103に格納される。
[ステップS102]ダンプファイルが採取されると、ヒストグラム作成部132が、採取されたダンプファイルに含まれるクラスごとのオブジェクト数のヒストグラムを作成する。例えばヒストグラム作成部132は、ダンプファイルに含まれるオブジェクトの情報に基づいて、存在するオブジェクトを、そのオブジェクトが属するクラスと判断する。そしてヒストグラム作成部132は、クラスごとに、そのクラスに属するオブジェクト数を計数する。ヒストグラム作成部132は、各クラスのオブジェクト数を含むヒストグラムファイルを生成し、ファイルシステム120を介して、生成したヒストグラムファイルをHDD103に格納する。
[ステップS103]リーククラス特定部133は、クラスごとのオブジェクト増加傾向を計算し、増加傾向が大きい方から所定数のクラスを、リーククラスとして特定する。例えばリーククラス特定部133は、線形近似によりオブジェクト数の推移を示す直線を求め、直線の傾きによりオブジェクトの増加傾向を判断する。リーククラス特定処理の詳細は後述する(図18参照)。
[ステップS104]資料削除部134は、各クラスのヒストグラムの解析などにより、各資料の有用性を判断する。そして、資料の総データ量が閾値を超えている場合、資料削除部134は、有用でない資料から順に削除する。資料削除処理の詳細は後述する(図19〜図21参照)。
[ステップS105]コマンド通知部131は、前回の資料採取コマンドの送信から一定時間待機後、処理をステップS101に進め、次の資料採取コマンドを送信する。
このような手順で、資料採取と、資料の総データ量が閾値を超えた場合の資料の削除とが繰り返される。
次に、オブジェクト増加傾向計算処理について詳細に説明する。例えば、最小二乗法を使ってオブジェクト数の線形近似直線が計算される。例えば、クラスのオブジェクト数の近似直線の傾きが、そのクラスのオブジェクト数の増加傾向となる。
ここで、採取した資料数をn(nは1以上の整数)とする。またi番目の資料(iは1以上n以下の整数)を採取した時刻をxi、k番目のクラス(kは1以上の整数)のi番目の資料におけるオブジェクト数をykiとする。この場合の最小二乗法による近似直線の傾きは、以下の式で表される。
Figure 0006447348
式(1)の計算によりリーククラスを特定するため、リーククラス特定部133は、メモリ102内に、リーククラスを特定処理に使用する記憶領域を確保する。
図17は、リーククラス特定処理に使用する記憶領域内のデータの一例を示す図である。例えばリーククラス特定部133は、クラスリスト31、資料情報32、およびクラス情報33の記憶領域をメモリ102内に確保する。クラスリスト31の記憶領域には、各クラスのクラスIDとクラス名とが格納される。資料情報32の記憶領域には、xiの合計、xi 2の合計、採取した資料数が格納される。クラス情報33の記憶領域には、クラスIDに対応付けて、ykiの合計、xikiの合計、および傾きが格納される。図17に示したような情報を用いて、リーククラスの特定処理が実行される。
図18は、リーククラス特定処理の手順の一例を示す図である。
[ステップS111]リーククラス特定部133は、変数iの値を1に初期化する。
[ステップS112]リーククラス特定部133は、採取した資料のうちのi番目の資料の情報で、資料情報32を更新する。例えばリーククラス特定部133は、xiの合計に、i番目の資料の時刻xiを加算する。またリーククラス特定部133は、xi 2の合計に、i番目の資料の時刻xiの自乗を加算する。さらにリーククラス特定部133は、採取した資料数に1を加算する。
[ステップS113]リーククラス特定部133は、未処理の資料があるか否かを判断する。未処理の資料があれば、処理がステップS114に進められる。未処理の資料がなければ、処理がステップS115に進められる。
[ステップS114]リーククラス特定部133は、変数iに1を加算し、処理をステップS112に進める。
[ステップS115]リーククラス特定部133は、変数kの値を1に初期化する。
[ステップS116]リーククラス特定部133は、変数iの値を1に初期化する。
[ステップS117]リーククラス特定部133は、クラス情報33内のk番目のクラスに関する、ykiの合計とxikiの合計とを更新する。例えばリーククラス特定部133は、ykiの合計に、k番目のクラスのi番目の資料におけるオブジェクト数ykiを加算する。またリーククラス特定部133は、xikiの合計に、i番目の資料の時刻xiと、k番目のクラスのi番目の資料におけるオブジェクト数ykiとの乗算値を加算する。
[ステップS118]リーククラス特定部133は、未処理の資料があるか否かを判断する。未処理の資料があれば、処理がステップS119に進められる。未処理の資料がなければ、処理がステップS120に進められる。
[ステップS119]リーククラス特定部133は、変数iに1を加算し、処理をステップS117に進める。
[ステップS120]リーククラス特定部133は、k番目のクラスについて、オブジェクトの増加傾向を示す直線の傾きを計算する。例えばリーククラス特定部133は、資料情報32内の値と、クラス情報33内のk番目のクラスに関する値とを式(1)に代入し、傾きを計算する。リーククラス特定部133は、計算した傾きを、k番目のクラスのクラスIDに対応付けて、クラス情報33に設定する。
[ステップS121]リーククラス特定部133は、未処理のクラスがあるか否かを判断する。未処理のクラスがあれば、処理がステップS122に進められる。未処理のクラスがなければ、処理がステップS123に進められる。
[ステップS122]リーククラス特定部133は、変数kに1を加算し、処理をステップS116に進める。
[ステップS123]リーククラス特定部133は、オブジェクトの増加傾向が大きいK個のクラスを、リーククラスとして特定する。例えばリーククラス特定部133は、クラス情報33に含まれるクラスごとのエントリを、傾きで降順にソートする。そしてリーククラス特定部133は、上位K個のクラスを、リーククラスとして特定する。
複数のリーククラスが特定されると、各リーククラスのオブジェクト数の増減に基づいて、削除候補の資料が判定される。そして、資料の総データ量が閾値以下となるまで、削除候補の資料が削除される。
以下、図19〜図21を参照して、資料の削除処理について詳細に説明する。なお、以下の説明で用いる変数の意味は以下の通りである。
i:資料ID
I:資料数(削除した資料を含む)
j:クラスID
J:クラス数
Y[i][j]:資料iに含まれるクラスjのオブジェクト数
S={S0,S1,...,Si,...,SI-1}:採取した資料の集合
k:着目するクラスIDのインデックス
K:着目するクラス数
X={X0,X1,...,Xk,...,XK-1}:注目するクラスIDの集合
(0≦k<K,0≦Xk<j)
DS[k]:クラス(ID==Xk)の削除候補資料の集合
TDS:全体での削除候補資料の集合(DS[0]〜DS[K−1]の積集合)
図19は、資料削除処理の手順の一例を示すフローチャート(1/3)である。図19には、クラスごとの削除候補資料を決定するまでの処理が示されている。
[ステップS131]資料削除部134は、新たに採取した資料に基づいて、変数の値を更新する。例えば資料削除部134は、Iに1を加算する。また資料削除部134は、Sに、新たに採取した資料(I−1番目の資料)を追加する。さらに資料削除部134は、Y[I−1][j](0≦j<J)に、新たに採取した資料(SI-1)に含まれる各クラスのオブジェクト数を代入する。
[ステップS132]資料削除部134は、資料サイズ(バイト数)の合計が閾値を超過しているか否かを判断する。資料サイズの合計が閾値を超過している場合、処理がステップS133に進められる。閾値を超過していなければ、資料を削除せずに、資料削除処理が終了する。
[ステップS133]資料削除部134は、Xを初期化する。例えば資料削除部134は、オブジェクト数の増加傾向が大きいクラスのクラスIDから順に、XにクラスIDを追加する。また資料削除部134は、kの値を「0」に初期化する。
[ステップS134]資料削除部134は、iにI−1を設定する。また資料削除部134は、jにXkを設定する。また資料削除部134は、minに、設定可能な整数の最大値を設定する。さらに資料削除部134は、DS[k]を空集合に初期化する。
[ステップS135]資料削除部134は、SにSiが存在するか否かを判断する。Siが削除されていなければ、SiはSに存在する。Siが存在する場合、処理がステップS136に進められる。Siが存在しなければ、処理がステップS139に進められる。
[ステップS136]資料削除部134は、Y[i][j]の値がminより小さいか否かを判断する。Y[i][j]の値がminより小さい場合、処理がステップS137に進められる。Y[i][j]の値がmin以上であれば、処理がステップS138に進められる。
[ステップS137]資料削除部134は、minに、現在のY[i][j]の値を設定し、処理をステップS139に進める。
[ステップS138]資料削除部134は、DS[k]に、i番目の資料Siを含める。
[ステップS139]資料削除部134は、iの値が「0」か否かを判断する。iの値が「0」であれば、処理がステップS141に進められる。iの値が「0」でなければ、処理がステップS140に進められる。
[ステップS140]資料削除部134は、iの値をデクリメント(「1」を減算)し、処理をステップS135に進める。
[ステップS141]資料削除部134は、kの値がK−1か否かを判断する。kの値がK−1であれば、処理がステップS151(図20参照)に進められる。kの値がK−1でなければ、処理がステップS142に進められる。
[ステップS142]資料削除部134は、kの値をインクリメント(「1」を加算)して、処理をステップS134に進める。
図20は、資料削除処理の手順の一例を示すフローチャート(2/3)である。図20には、図19の処理により各クラスで削除候補となった資料の削除処理が示されている。
[ステップS151]資料削除部134は、TDSに、DS[0]〜DS[K−1]の積集合を設定する。
[ステップS152]資料削除部134は、TDSが空か否かを判断する。TDSが空であれば、処理がステップS161(図21参照)に進められる。TDSが空でなければ、処理がステップS153に進められる。
[ステップS153]資料削除部134は、TDSの中で採取時期が最も古い資料Soldを削除する。例えば資料削除部134は、ファイルシステム120に対して、資料Soldに含まれるダンプファイルとヒストグラムファイルとの削除コマンドを送信する。すると、ファイルシステム120により、HDD103から該当するダンプファイルとヒストグラムファイルとが削除される。資料削除部134は、TDSからも資料Soldを削除する。
[ステップS154]資料削除部134は、資料サイズの合計が閾値を超過しているか否かを判断する。閾値を超過していれば、処理がステップS152に進められる。閾値を超過していなければ、資料削除処理が終了する。
このように新しい(iが大きい)資料のオブジェクト数から順に調査され、既知の最小値よりオブジェクト数が小さい場合は最小値が更新され、それ以外の場合は削除候補資料の集合に資料番号が追加される。K個のクラスすべてに対して計算し終わると、各クラスの集合の積集合をとって、削除候補資料の集合が算出される。そして、資料サイズの合計が閾値を超えるか、集合が空になるまで集合に含まれる資料が削除される。このように、新しい資料から順に調査し、いずれかのクラスのオブジェクト数の最小値が更新される資料を残すことで、オブジェクト回収後に残存したオブジェクトに関する資料を、削除せずに残しておくことができる。その結果、残存した資料を解析することで、回収できないオブジェクトを容易に見つけ出すことができる。
図19、図20の処理により資料を削除しても、資料の総データ量が閾値を超えている場合、図21に示す処理により、さらに資料の削除が行われる。
図21は、資料削除処理の手順の一例を示すフローチャート(3/3)である。図21には、図20の処理では、最新の資料と、各クラスにおけるオブジェクト数が最小の資料以外を削除候補資料として、資料を削除する処理が示されている。なお図21の処理で削除する資料の集合をESとする。
[ステップS161]資料削除部134は、kの値を「0」に初期化する。また資料削除部134は、ESに、最新の資料を除外した資料の集合「S−SI-1」を設定する。
[ステップS162]資料削除部134は、SにSI-2が存在するか否かを判断する。SI-2が存在する場合、処理がステップS163に進められる。SI-2が存在しない場合、処理がステップS172に進められる。
[ステップS163]資料削除部134は、iにI−2を設定する。また資料削除部134は、jにXkを設定する。さらに資料削除部134は、minにY[I−1][j]の値を設定する。そして資料削除部134は、min_i(オブジェクト数が最小値となる資料の番号)に初期値「−1」を設定する。
[ステップS164]資料削除部134は、Y[i][j]の値がminの値より小さいか否かを判断する。Y[i][j]の値の方が小さければ、処理がステップS165に進められる。Y[i][j]の値がminの値以上であれば、処理がステップS166に進められる。
[ステップS165]資料削除部134は、minにY[i][j]の値を設定する。また資料削除部134は、min_iに、現在判断している資料の番号iの値を設定する。
[ステップS166]資料削除部134は、iの値が「0」か否かを判断する。iの値が「0」であれば、処理がステップS168に進められる。iの値が「0」でなければ、処理がステップS167に進められる。
[ステップS167]資料削除部134は、iの値をデクリメントして、処理をステップS164に進める。
[ステップS168]資料削除部134は、min_iの値が「−1」か否かを判断する。min_iの値が「−1」の場合とは、最後に採取した資料のオブジェクト数が最も少ない場合である。min_iの値が「−1」であれば、処理がステップS170に進められる。min_iの値が「−1」でなければ、処理がステップS169に進められる。
[ステップS169]資料削除部134は、ESからSmin-iを削除する。
[ステップS170]資料削除部134は、kの値がK−1と同じか否かを判断する。kの値がK−1と同じであれば、処理がステップS172に進められる。kの値がK−1と同じでなければ、処理がステップS171に進められる。
[ステップS171]資料削除部134は、kの値をインクリメント(1を加算)して、処理をステップS163に進める。
[ステップS172]資料削除部134は、ESに含まれている資料を削除する。例えば、ファイルシステム120に対して、ESに含まれる資料のダンプファイルとヒストグラムファイルとの削除コマンドを送信する。すると、ファイルシステム120により、HDD103から該当するダンプファイルとヒストグラムファイルとが削除される。資料削除部134は、Sからも、ESに含まれる資料を示す要素を削除する。
図21に示したように、K個のクラスすべてに対してオブジェクト数が最も少ない資料が求められ、その資料と最新の資料を除いたすべての資料が削除候補となる。オブジェクト数が最も少ない資料は、回収可能なオブジェクトの多くが回収された後の資料と考えられる。そのため、オブジェクト数が最も少ない資料を解析すれば、回収ができないオブジェクトを容易に見つけ出すことができる。また最新の資料には、現在存在するオブジェクトがすべて含まれる。そのため、最新の資料を削除せずに残すことで、資料の削除により、回収できないオブジェクトの痕跡が消失してしまうことを抑止できる。
以上説明したように、第2の実施の形態によれば、オブジェクトの生成前と回収後の資料を残し、その他の収資を削除することで、メモリリークの原因解析に特に有用な資料を残して、有用性が低い資料を削除することができる。その結果、資料の総データ量を閾値以内に抑えながらも、メモリリークの解析に有効な資料を確実に保存することができる。
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。
10 ダンプデータ管理装置
11 メモリ
11a,11b,・・・ オブジェクト
12 ストレージ装置
12a〜12f ダンプデータ
13 演算部

Claims (7)

  1. コンピュータに、
    複数のクラスのオブジェクトが格納されるメモリから異なる時期に取得された複数のダンプデータに基づいて、前記複数のクラスそれぞれに属するオブジェクト数の情報を生成し、
    生成した前記オブジェクト数の情報に基づいて、クラスごとに、該クラスのオブジェクト数の時間変化においてオブジェクト数が極小となるダンプデータの少なくとも一部を、保存候補のダンプデータとして決定し、
    クラスごとに決定された前記保存候補のダンプデータを、ダンプデータ総量削減時の削除対象から除外する、
    処理を実行させるダンプデータ管理プログラム。
  2. 前記保存候補のダンプデータの決定では、最後に取得されたダンプデータも、前記保存候補ダンプデータとする、
    請求項1記載のダンプデータ管理プログラム。
  3. 前記保存候補のダンプデータの決定では、前記複数のダンプデータそれぞれを判定対象とし、判定対象のダンプデータにおける一クラスのオブジェクト数が、該判定対象のダンプデータより後に取得された他のダンプデータそれぞれの前記一クラスのオブジェクト数より少ない場合、該判定対象のダンプデータを、前記保存候補のダンプデータとして決定する、
    請求項1または2記載のダンプデータ管理プログラム。
  4. 前記コンピュータに、さらに、
    前記保存候補のダンプデータ以外のすべてのダンプデータを削除しても、ダンプデータの総量が閾値を超える場合、クラスごとに、前記保存候補のダンプデータの中から該クラスのオブジェクト数が最も少ないダンプデータを特定し、
    該特定したダンプデータと最後に取得されたダンプデータとを除く前記保存候補のダンプデータを、ダンプデータ総量削減時の削除対象とする、
    請求項1乃至3のいずれかに記載のダンプデータ管理プログラム。
  5. 前記コンピュータに、さらに、
    前記複数のクラスから、属するオブジェクト数の増加傾向が大きい方から2以上のクラスを選択する処理を実行させ、
    前記保存候補のダンプデータの決定では、選択されたクラスについてのオブジェクト数の時間変化に基づいて、前記保存候補のダンプデータを決定する、
    請求項1乃至4のいずれかに記載のダンプデータ管理プログラム。
  6. コンピュータが、
    複数のクラスのオブジェクトが格納されるメモリから異なる時期に取得された複数のダンプデータに基づいて、前記複数のクラスそれぞれに属するオブジェクト数の情報を生成し、
    生成した前記オブジェクト数の情報に基づいて、クラスごとに、該クラスのオブジェクト数の時間変化においてオブジェクト数が極小となるダンプデータの少なくとも一部を、保存候補のダンプデータとして決定し、
    クラスごとに決定された前記保存候補のダンプデータを、ダンプデータ総量削減時の削除対象から除外する、
    ダンプデータ管理方法。
  7. 複数のクラスのオブジェクトが格納されるメモリから異なる時期に取得された複数のダンプデータを記憶するストレージ装置と、
    前記複数のダンプデータに基づいて、前記複数のクラスそれぞれに属するオブジェクト数の情報を生成し、生成した前記オブジェクト数の情報に基づいて、クラスごとに、該クラスのオブジェクト数の時間変化においてオブジェクト数が極小となるダンプデータの少なくとも一部を、保存候補のダンプデータとして決定し、クラスごとに決定された前記保存候補のダンプデータを、ダンプデータ総量削減時の削除対象から除外する演算部と、
    を有するダンプデータ管理装置。
JP2015093791A 2015-05-01 2015-05-01 ダンプデータ管理プログラム、ダンプデータ管理方法、およびダンプデータ管理装置 Active JP6447348B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015093791A JP6447348B2 (ja) 2015-05-01 2015-05-01 ダンプデータ管理プログラム、ダンプデータ管理方法、およびダンプデータ管理装置
US15/083,414 US10204000B2 (en) 2015-05-01 2016-03-29 Apparatus and method for managing dump data for cause analysis of a memory leak

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015093791A JP6447348B2 (ja) 2015-05-01 2015-05-01 ダンプデータ管理プログラム、ダンプデータ管理方法、およびダンプデータ管理装置

Publications (2)

Publication Number Publication Date
JP2016212538A JP2016212538A (ja) 2016-12-15
JP6447348B2 true JP6447348B2 (ja) 2019-01-09

Family

ID=57204119

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015093791A Active JP6447348B2 (ja) 2015-05-01 2015-05-01 ダンプデータ管理プログラム、ダンプデータ管理方法、およびダンプデータ管理装置

Country Status (2)

Country Link
US (1) US10204000B2 (ja)
JP (1) JP6447348B2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10289347B2 (en) * 2016-04-26 2019-05-14 Servicenow, Inc. Detection and remediation of memory leaks
CN110032502B (zh) * 2018-01-11 2023-05-26 广州市康锦信息技术有限公司 一种异常处理的方法、装置及电子设备
KR102536266B1 (ko) * 2018-08-02 2023-05-25 삼성전자주식회사 메모리 누수 검출 방법 및 그 전자 장치
US11307923B2 (en) * 2019-07-23 2022-04-19 Vmware, Inc. Memory leak detection
US11300967B2 (en) * 2019-10-25 2022-04-12 Toyota Research Institute, Inc. System and method for collection of performance data by a vehicle
US20210191745A1 (en) * 2019-12-19 2021-06-24 Cerner Innovation, Inc. System and methods for reconstituting an object in a runtime environment using heap memory
KR20230034646A (ko) * 2021-09-03 2023-03-10 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US11789845B2 (en) 2021-10-15 2023-10-17 International Business Machines Corporation Software object identification using record generating code insertion

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10333938A (ja) 1997-06-04 1998-12-18 Toshiba Corp 計算機システムにおける実行ログの記録、表示方法、ならびに同方法を用いた計算機システム、及び同方法がプログラムされ記録される記録媒体
JP4170988B2 (ja) 2003-05-09 2008-10-22 富士通株式会社 実行環境の危険予測/回避方法,システム,プログラムおよびその記録媒体
US7222133B1 (en) * 2004-02-05 2007-05-22 Unisys Corporation Method for reducing database recovery time
US7685575B1 (en) * 2004-06-08 2010-03-23 Sun Microsystems, Inc. Method and apparatus for analyzing an application
US8255435B2 (en) * 2004-10-07 2012-08-28 International Business Machines Corporation Detecting memory management anti-patterns
JP2006350876A (ja) * 2005-06-20 2006-12-28 Hitachi Ltd ヒープダンプ取得方法
US7734666B2 (en) * 2006-04-28 2010-06-08 Sap Ag Method and system for inspecting memory leaks and analyzing contents of garbage collection files
JP4847300B2 (ja) 2006-11-27 2011-12-28 株式会社日立製作所 メモリリーク検出方法、メモリリーク検出装置及びメモリリーク検出プログラム
US7743280B2 (en) 2007-02-27 2010-06-22 International Business Machines Corporation Method and system for analyzing memory leaks occurring in java virtual machine data storage heaps
JP2009151680A (ja) 2007-12-21 2009-07-09 Brother Ind Ltd 情報処理装置、ログ監視プログラム及びログ監視方法
US8032568B2 (en) * 2008-06-30 2011-10-04 International Business Machines Corporation Method for performing memory leak analysis inside a virtual machine
US8601323B2 (en) * 2010-12-13 2013-12-03 Sap Ag Advanced management of runtime errors

Also Published As

Publication number Publication date
JP2016212538A (ja) 2016-12-15
US20160321130A1 (en) 2016-11-03
US10204000B2 (en) 2019-02-12

Similar Documents

Publication Publication Date Title
JP6447348B2 (ja) ダンプデータ管理プログラム、ダンプデータ管理方法、およびダンプデータ管理装置
US9753801B2 (en) Detection method and information processing device
US9563552B2 (en) Storage control device and storage control method
US8522216B2 (en) Memory leak detection
US20070136402A1 (en) Automatic prediction of future out of memory exceptions in a garbage collected virtual machine
JP2016015111A (ja) 評価プログラム、評価方法、および評価装置
US9959197B2 (en) Automated bug detection with virtual machine forking
CN106294206B (zh) 一种缓存数据处理方法以及装置
US9612837B2 (en) Trace method and information processing apparatus
US9766815B2 (en) Determining causes of external fragmentation of memory
US20110191393A1 (en) Marking algorithm for low-bandwith memory
US9274946B2 (en) Pre-leak detection scan to identify non-pointer data to be excluded from a leak detection scan
US9870400B2 (en) Managed runtime cache analysis
US8904360B2 (en) Automated identification of redundant method calls
RU2697961C1 (ru) Система и способ оценки деградации устройства хранения данных и обеспечения сохранности наиболее важных данных
US11010158B2 (en) Determining the availability of memory optimizations by analyzing a running binary
US10776240B2 (en) Non-intrusive performance monitor and service engine
JP2009217617A (ja) メモリリーク箇所の特定方法及び装置
US8140597B2 (en) Computer system memory management
CN106959888B (zh) 云存储系统中的任务处理方法及装置
US20140040585A1 (en) Computer, management method, and recording medium
JP2007323380A (ja) メモリ管理装置及びメモリ管理方法及びプログラム
JP2020155008A (ja) 制御方法,情報処理装置および制御プログラム
US11914493B2 (en) Information processing device, information processing system, monitoring method, and recording medium
JP5278901B2 (ja) 頻繁に発生するイベントを推定する方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180206

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20181030

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20181106

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181119

R150 Certificate of patent or registration of utility model

Ref document number: 6447348

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150