(57)【要約】【課題】コンピュータシステムにおいて動的確保したメモリの開放漏れ、つまりメモリリークはコンピュータシステムで有効なメモリ利用量を圧迫し不具合の元となるものであるが、そのメモリリークの究明は困難をきわめる。【解決手段】動的確保したメモリに時間的有効期限を設定することで、メモリリークを無くすと共に、有効期限が来たものを記録することにより、メモリリークの原因追求の情報提供を行う。【選択図】  図１
2010061248.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムにおいて、動的確保メモリを有効時間と閾値で期限管理し、メモリリークを防止することを特徴とするコンピュータシステム。
【請求項２】
記録した情報を元に動的確保メモリの有効時間を補正することを特徴とする請求項１記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステムにおける動的確保メモリの開放漏れ、つまりメモリリークを、効果的に除去し、メモリリークの原因追及のための記録を行うものに関する。
【背景技術】
【０００２】
コンピュータシステムにおいてメモリは、起動から終了まで利用することを主目的とした静的に確保するメモリと、必要に応じて利用することを主目的とした動的に確保するメモリがある。
【０００３】
静的に確保したメモリは予めそのサイズが判っていることもあり問題とならないが、動的に確保したメモリは、そのシステムのリソースの上限以上は利用できないため、必要がなくなったメモリは開放することで、そのメモリを再利用できるようにし、システムのリソース内での運用を行う。
【０００４】
【非特許文献１】日経パソコン用語事典2008
【発明の開示】
【発明が解決しようとする課題】
【０００５】
動的確保メモリを利用後に必要なくなったとき、開放漏れが生じた場合、再利用されること無くシステムリソースに存続し続けるメモリリーク(非特許文献１参照)になる。
【０００６】
この状態が続き、システムが必要とするメモリを確保しようとしたときにリソースの上限に達してしまうため、確保できずシステムに不具合が発生してしまうが、その確保できなかったメモリではなく、他の既に確保されたメモリ領域のメモリリーク部分に直接の原因があるため、追求が困難である。
【課題を解決するための手段】
【０００７】
動的メモリ確保時に時刻情報と想定または経験上または明示的な有効時間情報を合わせて保持する。時刻情報は、確保時および、そのアクセス時に更新を行う。時刻情報の更新時に有効時間情報と比較し、有効時間を越えている場合は記録を残す。
【０００８】
また、定期的に動的メモリを巡回することにより、有効時間を越えている動的メモリに対して、外部記憶への退避および外部記憶へ退避されてから有効時間を越えた回数に応じて破棄(開放)と記録を行う。
【０００９】
破棄された動的メモリに対してアクセスが生じた場合は、経験上の有効時間を求めるための記録を行う。
【発明の効果】
【００１０】
記録により、その動的メモリが、想定通りまたは経験通りの有効時間で利用されているのかが判る。
【００１１】
定期的巡回による有効時間を越えたときの破棄処理によりメモリリークそのものを無くし、また記録からその動的メモリの有効時間を割り出すことが可能となり、システムの正常動作へ向けた改善をすることが可能となる。
【発明を実施するための最良の形態】
【００１２】
以下、図面を参照して本発明の実施例を説明する。
【実施例１】
【００１３】
図１は、本発明の実施形態の例を表すブロック図である。
【００１４】
本実施形態では、動的に確保したメモリ領域１０２または外部記憶領域１０３を巡回用テーブル配列１０１に登録し、動作に応じて動作記録１０４に記録し、有効時間補正用閾値１０５で記録に対応した動作をすることを表したものである。
【００１５】
なお説明を簡略化するために、巡回用テーブルは単純な配列としてあるが、ハッシュテーブルなどよりアクセスの速い方式を利用してもよい。
【００１６】
メモリ領域１０２は図２に示すテーブル構造をしており、時刻情報２０１、有効時間２０２、データを格納するデータ領域２０３から構成される。
【００１７】
また、外部記憶領域１０３はファイルなどの外部記憶装置上に配置されるものであり、メモリ領域１０２と同じく図２に示すテーブル構造をしている。
【００１８】
巡回用テーブル配列１０１は図３の構造をしており、メモリ上にあるのか、外部記憶装置上にあるのか、破棄されたのか、を保持する記憶域情報３０１、メモリ上または外部記憶装置上の領域へのポインタ３０２、有効時間を越えた回数を保持する回数３０３、回数の上限を保持する回数閾値３０４から構成される。
【００１９】
本発明はまず、動的メモリ確保を行うときに操作が必要であり、図４がそのときのＰＡＤである。
【００２０】
図４では、まずデータ用メモリ確保４０１で、図２のテーブルを確保し、有効時間２０２に想定または経験上または明示的な有効時間情報を設定する。
【００２１】
次に巡回テーブル登録４０２で、巡回用テーブル配列１０１に登録する。このとき、巡回用テーブルの各項目の記憶域情報３０１には種別メモリを、ポインタ３０２は動的メモリ領域を、回数３０３はまだ有効時間を越えてないので０をそれぞれ格納する。
【００２２】
また、時間情報記録４０３で、現在時間を時刻情報２０１に記録する。
【００２３】
なお、動的メモリ確保時のデータ領域２０３は指定されたサイズを確保するものとし、システムやライブラリの種類によって初期化するなど行っても良い。
【００２４】
次に動的メモリ領域へのアクセス(リード／ライト)処理が発生しときに操作が必要であり、図５がそのときのＰＡＤである。
【００２５】
まず、動的メモリを格納している巡回テーブル検索５０１で配列から該当のものを検索する。
【００２６】
見つかった巡回テーブルの記憶域情報３０１は、記憶域は？５０２でどれに該当するか判断し、メモリ領域であれば、有効時間を越えたか５０４にて、現在時刻と動的メモリテーブルの時刻情報２０１の差分を有効時間２０２と大小比較をし、有効時間２０２より大きい場合は、「どの程度有効時間を越えたか」を動作記録１０４に記録５０５する。
【００２７】
その後および越えなかった場合は時刻情報を更新５０６で、時刻情報２０１を更新し、データ領域アクセス５０７を行う。
【００２８】
なお、ここで有効時間を越えたときに外部記憶装置への書き出しは行わない。これは、現時点でアクセスが発生しているため書き出す必要がないためである。
【００２９】
巡回テーブルの記憶域情報３０１が外部記憶領域であれば、有効時間を越えたか５０８にて、現在時刻と外部記憶テーブルの時刻情報２０１の差分を有効時間２０２と大小比較をし、有効時間２０２より大きい場合は、回数は回数閾値を越えたか？５０９にて有効時間を越えた回数３０３と回数閾値３０４を比較し回数閾値３０４を超えた場合は、「どの程度有効時間を越えたか」と「回数閾値を越えたこと」を動作記録１０４に記録５１０する。
【００３０】
回数閾値３０４を越えない場合は、回数３０３を＋１増加５１１する。
【００３１】
その後および有効時間を越えなかった場合は時刻情報を更新５１２で、時刻情報２０１を更新し、データ領域アクセス５１３を行う。
【００３２】
なお、ここで有効時間を越えないときに外部記憶領域からメモリ領域への再配置を行っても良いが、本説明では簡略化のために省略する。
【００３３】
巡回テーブルの記憶域情報３０１が破棄であれば、「破棄された領域へのアクセス」
を動作記録１０４に記録５０３することで、今までに記録した「どの程度有効時間を越えたか」と「回数閾値を越えたこと」を元に設定値の改善が可能となる。
【００３４】
次に本システムでは巡回テーブルを用いたメモリ領域の定期的な有効時間の確認を行う。ここでの巡回間隔は適用するシステムにより異なるため特に定めない。
【００３５】
図６が巡回テーブルを用いたメモリ領域の定期的な有効時間の確認時のＰＡＤである。
【００３６】
図６では、テーブルに登録されている数分の繰返し６０１により、各テーブル情報に対して、記録域情報は？６０２でどれに該当するか判断し、メモリ領域であれば、有効時間を越えたか６０３にて、現在時刻と動的メモリテーブルの時刻情報２０１の差分を有効時間２０２と大小比較をし、有効時間２０２より大きい場合は、「どの程度有効時間を越えたか」と「外部記憶に書き出したこと」を動作記録１０４に記録６０４し、メモリテーブル内容を外部記憶に書き出し６０５するとともに、記憶域情報３０１に外部記憶を記録し、メモリ領域内テーブルを破棄６０６する。
【００３７】
巡回テーブルの記憶域情報３０１が外部記憶領域であれば、有効時間を越えたか６０７にて、現在時刻と外部記憶テーブルの時刻情報２０１の差分を有効時間２０２と大小比較をし、有効時間２０２より大きい場合は、回数は回数閾値を越えたか？６０８にて有効時間を越えた回数３０３と回数閾値３０４を比較し回数閾値３０４を超えた場合は、「どの程度有効時間を越えたか」と「回数閾値を越えたこと」を動作記録１０４に記録６０９、外部記憶からテーブルを破棄６１０すると共に記憶域情報３０１に破棄を記録する。
【００３８】
回数閾値３０４を越えない場合は、回数３０３を＋１増加６１１する。
【００３９】
巡回テーブルの記憶域情報３０１が破棄であれば、特に処理はない。
【００４０】
図７が記録を用いた有効時間更新時のＰＡＤである。
【００４１】
図７では有効時間を越えた記録があるか？７０１にて、「どの程度有効時間を越えたか」の記録がある場合、次の動作を行う。
【００４２】
回数は有効時間補正用閾値を越えたか？７０２にて、その記録の回数が有効時間補正用閾値１０５を越えた場合は、該当のデータ検索７０３を行い、有効時間の更新７０４にて有効時間２０２に越えた分の時間を加算することで、動的に補正を行う。
【００４３】
以上によりメモリ領域を有効時間と閾値により管理することで、メモリリークとなる可能性の高いものをメモリから破棄していくことで、メモリリークを防止する。
【図面の簡単な説明】
【００４４】
【図１】実施形態の例を表すブロック図
【図２】メモリ領域テーブル構造
【図３】巡回用テーブル構造
【図４】動的メモリ確保を行うときのＰＡＤ
【図５】動的メモリ領域へのアクセス(リード／ライト)処理が発生したときのＰＡＤ
【図６】巡回テーブルを用いたメモリ領域の定期的な有効時間の確認時のＰＡＤ
【図７】記録を用いた有効時間更新時のＰＡＤ
【符号の説明】
【００４５】
１０１  巡回用テーブル配列
１０２  メモリ領域
１０３  外部記憶領域
１０４  動作記録
１０５  有効時間補正用閾値
【図１】
2010061248.tif 000003
【図２】
2010061248.tif 000004
【図３】
2010061248.tif 000005
【図４】
2010061248.tif 000006
【図５】
2010061248.tif 000007
【図６】
2010061248.tif 000008
【図７】
2010061248.tif 000009