(57)【要約】  本発明を適用した１システムでは、メモリリークの監視対象から除外すべきプロセスを予め登録する、或いは条件を設定することにより除外し、監視対象とするプロセスは、メモリ領域を確保してから現在までの生存時間を計算し、計算した生存時間が閾値として定めた基準時間以上となっていた場合に、メモリリークが発生した可能性があると見なす。それにより、監視対象とするプロセスのプログラム変更を回避しつつ、メモリリークの検出を可能とさせる。
2010113212.tif 000002
【特許請求の範囲】
【請求項１】
実行されるプログラムがメモリ領域を開放しないことにより発生するメモリリークを監視するメモリリーク監視装置において、
前記プログラム毎に、プログラムが使用するメモリ領域を確保してから経過した時間である生存時間を取得する生存時間取得部と、
前記生存時間取得部が取得した生存時間を閾値として定められる基準時間と比較することにより、前記メモリリークが発生する可能性のあるプログラムを検出する検出部と、
を有することを特徴とするメモリリーク監視装置。
【請求項２】
前記メモリリーク監視装置はさらに、
前記メモリリークの検出対象のプログラムが確保するメモリ領域として全メモリ領域が定められている場合に、前記全メモリ領域のうち未使用分に基づいて、前記検出部が検出したプログラムが確保しているメモリ領域を強制的に開放するメモリ領域開放部と、
を有することを特徴とする請求項１記載のメモリリーク監視装置。
【請求項３】
前記メモリリーク監視装置において、
前記検出部は、前記メモリリークの検出を不要とするプログラムの識別情報が登録された除外リストに基づいて、前記識別情報に対応するプログラム以外のプログラムを対象にして、前記メモリリークを検出する、
ことを特徴とする請求項１記載のメモリリーク監視装置。
【請求項４】
前記メモリリーク監視装置において、
前記プログラムは、
前記メモリリーク監視装置上で動作するオペレーティングシステムの機能を実現させるシステムプロセスとして実行されるプログラムである、
ことを特徴とする請求項１記載のメモリリーク監視装置。
【請求項５】
前記メモリリーク監視装置において、
前記基準時間は、
前記メモリリークを検出すべきプログラムがメモリ領域を確保してから開放するまでの生存時間に基づいて設定される、
ことを特徴とする請求項１記載のメモリリーク監視装置。
【請求項６】
前記メモリリーク監視装置において、
前記除外リストにはさらに、
前記プログラム毎に、プログラムが確保可能なメモリの最大領域の数を示す最大領域数が登録され、
前記検出部は、
前記除外リストに登録されたプログラムのうち前記最大領域数を超えるメモリ領域を確保するプログラムを監視対象とする、
ことを特徴とする請求項３記載のメモリリーク監視装置。
【請求項７】
実行されるプログラムがメモリ領域を開放しないことにより発生するメモリリークを監視するメモリリーク監視装置のメモリリーク監視方法において、
前記メモリリーク監視装置が有する生存時間取得部が、前記プログラム毎に、プログラムが使用するメモリ領域を確保してから経過した時間である生存時間を取得するステップと、
前記メモリリーク監視装置が有する検出部が、前記生存時間取得部が取得した生存時間を閾値として定められる基準時間と比較することにより、前記メモリリークが発生する可能性のあるプログラムを検出するステップと、
を有することを特徴とするメモリリーク監視方法。
【請求項８】
前記メモリリーク監視方法はさらに、
前記メモリリーク監視装置が有するメモリ領域開放部が、前記メモリリークの検出対象のプログラムが確保するメモリ領域として全メモリ領域が定められている場合に、前記全メモリ領域のうち未使用分に基づいて、前記検出部が検出したプログラムが確保しているメモリ領域を強制的に開放するステップと、
を有することを特徴とする請求項７記載のメモリリーク監視方法。
【請求項９】
前記メモリリーク監視方法はさらに、
前記検出部は、前記メモリリークの検出を不要とするプログラムの識別情報が登録された除外リストに基づいて、前記識別情報に対応するプログラム以外のプログラムを対象にして、前記メモリリークを検出するステップ、
有することを特徴とする請求項７記載のメモリリーク監視方法。
【請求項１０】
前記メモリリーク監視方法において、
前記基準時間は、
前記メモリリーク監視装置が有する演算処理装置に、
前記メモリリークの検出対象とするプログラム毎に、プログラムがメモリ領域を確保してから開放するまでの生存時間を算出する算出ステップと、
前記算出ステップで算出した生存時間のなかから前記基準時間を抽出する抽出ステップと、
を実行させることにより算出されることを特徴とする請求項７記載のメモリリーク監視方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムが開放すべきメモリ領域を開放しないことによって発生するメモリリークを監視するための技術に関する。
【背景技術】
【０００２】
情報処理装置としてのコンピュータ上で実行されるプログラムには通常、使用可能なハードウェア資源としてのリソースが割り当てられる。プログラムが使用可能なメモリ領域は、そのリソースの一部として確保される。実行中のプログラムは「プロセス」とも呼ばれる。そのプロセスは、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ：オペレーティングシステム）の機能の一部を実現するシステムプロセス（以降「カーネルプロセス」）と、ユーザの指示で実行されるユーザプロセス（例えば実行されるアプリケーション・プログラム）とに大別される。【０００３】
ＯＳには、メモリ領域の管理機能が搭載される。この管理機能は、プログラム内で指定されたパラメータに応じて、メモリ領域を動的に決定する。決定されたメモリ領域は、例えばそのメモリ領域の先頭アドレスと大きさでプログラムに通知される。【０００４】
確保されたメモリ領域は、プログラムからのメモリ開放指示によって開放される。しかし、不備（バグ）などによってプログラムからメモリ開放指示が行われない場合、確保されたメモリ領域は不必要であるにもかかわらず、管理機能によって開放されない。この開放されないメモリ領域にいわゆる「メモリリーク」が発生する。【０００５】
仮想記憶方式のＯＳは仮想メモリをカーネル空間とユーザ空間に分離する。カーネル空間はカーネルやデバイスドライバ等のカーネルプロセス用に厳密に確保される、カーネルプロセスが使用可能な全メモリ領域である。ユーザ空間はユーザプロセス用に個別に確保されるメモリ領域である。【０００６】
ＯＳ上で動作しているアプリケーションは通常ユーザプロセスである。ユーザプロセスに割り当てられたメモリ領域（ユーザ空間）は、そのプログラム（例えばアプリケーション）の終了により、自動的に開放される。このため、メモリリークが発生したメモリ領域の開放はプログラムを終了させることによって行うことができる。【０００７】
一方、システムコール、カーネルのデーモン、割り込み処理などのカーネルプロセスでメモリリークが発生したメモリ領域は、ユーザプロセスのように開放できる機会がない。基本的に、ＯＳを終了させなければメモリリーク分のメモリ領域を開放することができない。このため、メモリリークしたメモリ領域はＯＳが動作している間、蓄積されていくことになる。【０００８】
カーネル空間上に発生したメモリリークは、使用可能なメモリ領域を減少させ、ＯＳの動作を阻害する。メモリリーク分のメモリ領域が大きくなると、動作を継続あせるためのメモリ領域が確保できないことにより、アプリケーションの実行を停止させる。ＯＳを実行している装置全体をダウンさせる場合がある。【０００９】
ＯＳは、組み込みシステムに組み込みＯＳ（リアルタイムＯＳ）として搭載される場合がある。その組み込みシステムは、特定の用途向けに開発されるコンピュータシステムであり、自動販売機や券売機等の長時間、連続で運用される装置に搭載されることが多い。そのような装置では、たとえ微量なメモリリークであっても、長期間、蓄積される結果、メモリ資源を圧迫しやすく、組み込みＯＳの動作を阻害する危険性が高い。【００１０】
メモリリークを根絶するためにはプログラムのデバッグ時に全てのメモリリークの発生原因を検出し修正する必要がある。しかし、デバック時に全ての運用条件を網羅して長時間の運用によるプログラムの継続動作を保障することは完全にはできないのが実情である。このようなことから、カーネル空間上に発生するメモリリークにも適切に対応できるようにすることが極めて重要である。これは、カーネル空間とは異なる固定のアドレス空間上から複数のプロセスのメモリ領域を割り当てる場合も同様である。【００１１】
メモリリーク監視装置としては、確保されたメモリ領域を開放すべきか否か管理機能が判定するために、プロセスが確保したメモリ領域の最大生存可能時間、及び警告時間を管理機能に通知する仕組み（インターフェイス）を用意することが知られている。それにより、管理機能は、メモリ領域の確保から警告時間が経過した場合に警告を行い、メモリ領域の確保から最大生存可能時間が経過した場合にそのメモリ領域を強制的に開放する。【００１２】
最大生存可能時間等を管理機能に通知するには、メモリリークの監視対象とする各プログラムの変更を行わなければならない。しかし、プログラムの変更には、大きなコストがかかる。このため、カーネル空間上に発生するメモリリークへの対応も、メモリリークの監視対象とする各プログラムの変更を回避する、つまり新たなインターフェイスを用意しないようにすることが望ましいといえる。
【特許文献１】特開２００２−１０８６９８号公報
【特許文献２】特開２００８−３９４５号公報
【発明の開示】
【００１３】
本発明は、メモリリークの監視対象とする各プログラムを変更することなく、その各プロセスが使用可能なメモリ領域が確保されるアドレス空間に発生したメモリリークに適切に対応する技術を提供することを目的とする。
【００１４】
本発明を適用したメモリリーク監視装置においては、プログラム毎に、該プログラムが使用するメモリ領域を確保してから経過した時間である生存時間を取得し、取得した生存時間を予め閾値として定めた基準時間と比較して、メモリリークが発生している可能性のあるプログラムを検出する。
【００１５】
プロセスのなかには、生存時間とメモリリークの発生に相関関係が存在する場合がある。このことから、本発明を適用した場合には、メモリリークの監視対象とする各プログラムを変更することなく、その各プロセスが使用可能なメモリ領域が確保されるアドレス空間に発生したメモリリークに適切に対応することができる。
【図面の簡単な説明】
【００１６】
【図１】本実施形態によるメモリリーク監視装置を搭載したシステム制御装置を用いて構築されたコンピュータシステムの構成を説明する図である。
【図２】本実施形態によるメモリリーク監視装置を搭載したマネジメントボード２０のソフトウェア構成を説明する図である。
【図３】メモリ領域リスト２１２のデータ構成を説明する図である。
【図４】除外リスト２２１のデータ構成を説明する図である。
【図５】（ａ）及び（ｂ）は、除外リスト２１２に登録されるカーネルプロセスを説明する図である。
【図６】生存時間によるメモリ領域数を説明するヒストグラムである。
【図７】メモリ確保処理のフローチャートである。
【図８】メモリ開放処理のフローチャートである。
【図９】メモリリーク監視処理のフローチャートである。
【図１０】装置管理アプリケーションがメモリリークに関する情報表示用に実行する処理のフローチャートである。
【図１１】各レコードに対する処理のフローチャートである。
【図１２】閾値設定処理のフローチャートである。
【図１３】除外リスト２２１のデータ構成を説明する図である（変形例）。
【図１４】各レコードに対する処理のフローチャートである（変形例）。
【発明を実施するための最良の形態】
【００１７】
以下、開示のメモリリーク監視装置、方法、及びプログラムに係る実施形態について図面を参照しながら説明する。
図１は、本実施形態によるメモリリーク監視装置を搭載したシステム制御装置とサーバ装置を用いて構築された情報処理装置としてのコンピュータシステムを説明する図である。このコンピュータシステムは、図１に示す様に、サーバ装置１０にそのサーバ装置１０の管理用のシステム制御装置（ＳＶＰ：ＳｅｒＶｉｃｅ  Ｐｒｏｃｅｓｓｏｒ）であるマネジメントボード（ＭＭＢ：ＭａｎａｇｅＭｅｎｔ  Ｂｏａｒｄ）２０を接続し、そのマネジメントボード２０に表示装置３０を接続した構成となっている。本実施形態によるメモリリーク監視装置は、マネジメントボード２０に搭載される。【００１８】
サーバ装置１０は、複数のシステムボード（ＳＢ：Ｓｙｓｔｅｍ  Ｂｏａｒｄ）である処理ユニット１１を不図示のデータ転送装置としてのクロスバで相互に接続した構成となっている。その処理ユニット１１には、例えば図１に示す様に、ＣＰＵ１２、メモリ１３、外部記憶装置１４、及びＩＯ装置１５が搭載されている。マネジメントボード２０との通信は、ＩＯ（Ｉｎｐｕｔ  Ｏｕｔｐｕｔ）装置（入出力装置）１５を介して行われる。【００１９】
マネジメントボード２０は、図２に示す様に、ＣＰＵ２１、メモリ２２、ＩＯ装置２３、及び外部記憶装置２４を備えた構成となっている。サーバ装置１０との通信は、ＩＯ装置２３を介して行われる。外部記憶装置２４には、組み込みＯＳやサーバ装置１０管理用のプログラムである装置管理アプリケーション等のプログラム群２５が格納されている。【００２０】
図２は、マネジメントボード２０のソフトウェア構成を説明する図である。図２に示す様に、プログラム群２５として、本実施形態の組み込みＯＳ２００、その組み込みＯＳ２００上で動作する装置管理アプリケーション２５０がマネジメントボード２０に搭載されている。組み込みＯＳ２００と装置管理アプリケーション２５０は、サーバ装置２０のシステム制御を行うマネジメントボード２０用の組み込みシステムを構成している。【００２１】
組み込みＯＳ２００は、メモリ領域を管理するプログラムであるメモリ領域の管理処理部２１０が搭載される組み込みＯＳが持つ機能２０１に、本実施形態によるメモリリークの監視を可能とするための付加機能２０２を追加することにより構成される。【００２２】
組み込みＯＳが持つ機能２０１を実現させるプロセスとして、図２ではシステムコール２３１、カーネルのデーモン２３２、割り込み処理２３３を示している。システムコール２３１は、組み込みＯＳが持つ機能２０１をアプリケーションが呼び出すために実行される。カーネルのデーモン２３２は、プロセス制御等のために常駐するサブプログラムである。割り込み処理は、ハードウェア割り込みを処理する実行プロセスである。これらカーネルプロセスには、メモリ領域の管理処理部２１１によって確保された固定のメモリ資源であるカーネル空間内からメモリ領域が割り当てられる。メモリリークの監視対象とするプロセスは、このような組み込みＯＳ２００上で動作する全てのカーネルプロセスである。【００２３】
付加機能２０２には、メモリリークを監視するためのプログラムであるメモリ領域監視デーモン２２０が搭載される。メモリ領域監視デーモン２２０はカーネルプロセスの１つとして動作する。
さらに、メモリ領域の管理処理部２１０には、そのサブプログラムである追加処理部２１１が搭載される。この追加処理部２１１によって、各カーネルプロセスに割り当てたメモリ領域を示すメモリ領域リスト２１２が管理される。このメモリ領域リスト２１２は、例えばメモリ２２に値が格納される配列変数である。【００２４】
図３は、メモリ領域リスト２１２のデータ構成を説明する図である。図３に示す様に、メモリ領域リスト２１２には、カーネル空間内から確保されたメモリ領域毎に、そのメモリ領域に係わるデータが格納されたレコードを備える。各レコードには、データとして、アドレス、確保したサイズ、確保時刻、プロセス名、リークフラグが格納される。アドレスは、確保されたメモリ領域の先頭アドレスである。確保したサイズは、メモリ領域のアドレス数である。確保時刻は、対応するメモリ領域をカーネルプロセスに割り当てた時刻である。この時刻は、例えばＣＰＵ２１に搭載されるハードタイマが計時する現在時刻である。プロセス名は、メモリ領域を割り当てたプロセスの識別データである。リークフラグは、メモリリークが発生した可能性を示すものである。「０」はメモリリークが発生した可能性がないことを示し、「１」はその可能性が存在することを示している。【００２５】
カーネルプロセスによるメモリ領域の確保、及び開放は、メモリ領域の管理処理部２１０への要求によって行われる。管理処理部２１０は、メモリ領域の割り当てがカーネルプロセスから要求された場合、図７に示すメモリ確保処理を実行する。【００２６】
このメモリ確保処理では、先ず、ステップＳ１でメモリ領域の確保処理を行い、その確保処理で確保したメモリ領域のアドレス（先頭アドレス）、及びサイズをカーネルプロセスに渡す。次にステップＳ２において、アドレス、サイズの他に、確保時刻、プロセス名、値が０のリークフラグをメモリ領域リスト２１２に登録する。その登録後、このメモリ確保処理を終了する。【００２７】
一方、カーネルプロセスからメモリ領域の開放が要求された場合には、メモリ領域の管理処理部２１０は図８に示すメモリ開放処理を実行する。そのメモリ開放処理では、以下の処理が実行される。【００２８】
先ず、ステップＳ１１では、カーネルプロセスから要求されたメモリ領域を開放するための処理を実行する。続くステップＳ１２では、開放するメモリ領域に対応するレコードを抽出し、削除することによりメモリ開放処理を行う。その後、このメモリ開放処理を終了する。【００２９】
追加処理部２１２は、上記ステップＳ２及びＳ１２を実行することで実現される。
メモリ領域監視デーモン２２０は、除外リスト２２１、閾値２２２、運用開始時刻変数２２３を管理する。除外リスト２２１は、カーネルプロセスのなかでメモリリークの監視対象から除外するプロセスの管理に使用される。図４に示す様に、監視対象から除外するプロセスの識別データ（ここではプロセス名）が登録されている。本実施形態では、後述するように、メモリ領域を確保してから経過した時間（生存時間）に着目してメモリリークが発生した可能性を判定する。閾値２２２は、その可能性を判定するために、生存時間と比較される基準時間である。運用開始時刻変数２２３は、組み込みＯＳ２００が起動した運用開始時刻が代入される変数である。その運用開始時刻変数２２３に実際に代入されるのは、メモリ領域監視デーモン２２０が起動した時刻である。除外リスト２２１及び閾値２２２は、管理者等により予め与えられるデータである。【００３０】
図５（ａ）及び（ｂ）は、除外リスト２１２に登録されるカーネルプロセスを説明する図である。図５（ａ）は、除外リスト２１２に登録すべきでないカーネルプロセスでのメモリ領域の確保、図５（ｂ）は、監視対象から除外するカーネルプロセスでのメモリ領域の確保の例をそれぞれ示している。図５（ａ）及び（ｂ）中、黒丸はメモリ領域を確保した時刻、黒四角はメモリ領域を開放した時刻をそれぞれ示している。それにより、黒丸と黒四角を結ぶ線はメモリ領域を確保している生存時間を示している。【００３１】
図５（ａ）に示す様に、カーネルプロセスでメモリリークが発生した場合、そのプロセスで確保されたメモリ領域は、組み込みＯＳ２００を終了するか、或いは強制的に開放しない限り、開放されない。そのようなメモリリークが発生する可能性が考えられるカーネルプロセスは、生存時間が閾値２２２を越えた時点でリークフラグの値を１にする。一方、図５（ｂ）に示す様に、生存時間が閾値２２２を越えてもメモリ領域が開放されるカーネルプロセスでは、生存時間が閾値２２２を越えることをメモリ領域の開放の条件にするのは望ましくない。なぜなら、処理を実行するために比較的に長い時間を必要としていると考えられるからである。このことから、そのようなカーネルプロセスは除外リスト２２１に登録することにより、開放すべきでないメモリ領域の開放を回避させる。【００３２】
図６は、生存時間によるメモリ領域数を説明するヒストグラムである。縦軸にメモリ領域数、横軸に生存時間（運用開始時刻、或いは確保時刻を基準とした生存時間）をそれぞれ取っている。【００３３】
カーネルプロセスには、割り込み処理２３３及びシステムコール２３１などのように、比較的に短時間に確保したメモリ領域を開放するもの、確保したメモリ領域を長時間開放しないものが存在する。前者は範囲Ａ内のものであり、後者は範囲Ｂ内と範囲Ｃ内のものである。また、範囲Ｃ内の領域については組み込みＯＳ２００の起動時、或いは起動後直ちに実行されるプロセスによって確保されるメモリ領域である。このため、そのメモリ領域についてメモリリークが発生しているというバグはデバッグ時に発見され易い。従って、本実施形態では範囲Ｃ内のメモリ領域を信頼性の高いメモリ領域として監視対象から除外し、範囲Ａと範囲Ｃの間である範囲Ｂ内の生存時間となっているメモリ領域のみを監視対象とする。範囲Ｂ内に含まれるメモリ領域はすべてメモリリークが発生している可能性があると見なすようにしているが、範囲Ｂ内のメモリ領域であっても信頼性が高いカーネルプロセスが確保したものは除外リスト２２１に格納することにより監視対象から除外する。このようなことから、閾値２２２を用いたメモリリークの監視であっても、そのメモリリークが発生したカーネルプロセスを高精度に特定することができる。【００３４】
上記閾値２２２は、例えばデバック時に、図１２に示す様な閾値設定処理を実行することにより設定することができる。この設定処理は、メモリ領域の確保により、閾値２２２として設定する選択肢となる時間を抽出するものである。図８に示すメモリ開放処理において、ステップＳ１１とＳ１２の間にステップＳ５１〜Ｓ５３の処理を実行する。ここで、その加えた処理について詳細に説明する。【００３５】
ステップＳ５１では、開放時刻を記録する。次のステップＳ５２では、開放時刻から確保時刻を減算した結果（生存時間）が、それまでの閾値より大きいか否か判定する。計算した生存時間が閾値より大きい場合、判定はＹｅｓとなり、ステップＳ５３でその生存時間を新たに閾値とした後、ステップＳ１２に移行する。生存時間が閾値以下であった場合には、判定はＮｏとなってステップＳ１２に移行する。【００３６】
この閾値設定処理は、監視対象とすべきでないプロセスを対象として、閾値を抽出することが望ましい。
メモリ領域監視デーモン２２０は、組み込みＯＳ２００の起動によって起動した後、現在時刻を例えばハードタイマから取得し、運用開始時刻変数２２３に代入する。その後は、例えば一定時間間隔、或いは予め設定されたタイミングで、図９に示すメモリリーク監視処理を実行する。ここでそのメモリリーク監視処理について詳細に説明する。【００３７】
先ず、ステップＳ２１では、メモリ領域リスト２１２を構成するレコード（メモリ領域）毎に、メモリリークが発生している可能性を判定するための各レコードに対する処理を実行する。続くステップＳ２２では、各レコードに対する処理の実行によって、メモリリークの可能性があるメモリ領域が発見されたか否か判定する。その可能性があるメモリ領域が発見された場合、判定はＹｅｓとなってステップＳ２３に移行する。その可能性があるメモリ領域が発見できなかった場合には、判定はＮｏとなり、ここでメモリリーク監視処理を終了する。【００３８】
ステップＳ２３では、装置管理アプリケーション２５０に、メモリ領域リスト２１２中のリークフラグが１のレコードを通知する。次のステップＳ２４では、プロセスごとのメモリ使用量、つまりメモリ領域のサイズを計算し、１プロセスあたりのメモリ使用量の平均値を求める。その次に移行するステップＳ２５では、予め定められた起動可能なプロセス数に、求めた平均値を乗算する。その乗算結果は以降「限界サイズ」と呼ぶ。【００３９】
ステップＳ２５に続くステップＳ２６では、限界サイズがカーネル空間に割り当てることのできるメモリ２２の空き領域サイズより大きいか否かを判定する。限界サイズが空き領域サイズより大きい場合、判定はＹｅｓとなり、ステップＳ２７でリークフラグが１のレコードで管理するメモリ領域を強制的に開放した後、このメモリリーク監視処理を終了する。限界サイズが空き領域サイズ以下であった場合、判定はＮｏとなり、ここでこのメモリ領域監視処理を終了する。【００４０】
限界サイズは、１プロセスあたりのメモリ使用量の平均値が大きいほど、大きくなる。これは、プロセスがメモリ２２のメモリ資源を大きく消費する可能性が高いことを意味する。空き領域サイズはプロセスが確保できるメモリ２２のメモリ資源の最大値である。このようなことから、ステップＳ２６は、メモリ２２のメモリ資源に比較的に余裕があるか否かを判定するための処理となっている。【００４１】
なお、余裕の判定は、上記のようなものに限定されない。例えば予め設定した割合のメモリ領域をカーネル空間から確保したか否かにより余裕を判定するようにしても良い。その場合であっても、平均値を考慮しても良い。【００４２】
装置管理アプリケーション２５０には、サブプログラムとして状態表示処理部２５１が搭載されている。この状態表示処理部２５１は、メモリ領域監視デーモン２２０から通知されたレコードを用いて、ユーザに発生した可能性のあるメモリリークについての情報を表示装置３０に表示させるためのものである。この状態表示処理部２５１は、装置管理アプリケーション２５０が図１０に示す状態表示処理を実行することで実現される。この状態表示処理では、図１０に示す様に、ステップＳ３１でメモリ領域毎にプロセス名、アドレス、及びサイズを表示する。【００４３】
図１１は、上記ステップＳ２１として実行される各レコードに対する処理のフローチャートである。次に図１１を参照して、この処理について詳細に説明する。ここでは便宜的に、図１１には１レコード分に相当する部分のみを抽出して示す。【００４４】
先ず、ステップＳ４１では、対象とするレコードのプロセス名が除外リスト２２１に登録されているか否か判定する。そのプロセス名が除外リスト２２１に登録されていた場合、判定はＹｅｓとなり、ここで１レコード分の処理を終了する。そのプロセス名が登録されていない場合には、判定はＮｏとなってステップＳ４２に移行する。【００４５】
ステップＳ４２では、確保時刻が運用開始時刻の前か否か判定する。対象とするメモリ領域がメモリ領域監視デーモン２２０の起動前に確保されていた場合、判定はＹｅｓとなり、ここでレコード分の処理を終了する。確保時刻が運用開始時刻以降であった場合には、判定はＮｏとなってステップＳ４３に移行する。【００４６】
ステップＳ４３では、確保時刻から経過した時間を生存時間として計算する。次のステップＳ４４では、生存時間が閾値２２２より短いか否か判定する。生存時間が閾値２２２より短い場合、判定はＹｅｓとなり、ここで１レコード分の処理を終了する。生存時間が閾値２２２以上であった場合には、判定はＮｏとなり、ステップＳ４５で対象とするレコードのリークフラグを１にした後、１レコード分の処理を終了する。【００４７】
なお、本実施形態では、除外リスト２２１にはプロセス名のみを登録するが、他の情報も併せて登録するようにしても良い。例えば図１３に示す様に、メモリ領域数を併せて登録するようにしても良い。これは図３に示す様に、同じプロセスが複数のメモリ領域を確保することがあるからである。このことから、メモリ領域数（プロセスで確保可能な最大メモリ領域数）も登録する場合には、メモリ領域数が異常に増えるのをより確実に回避することができる。【００４８】
このようにして、本実施形態では、メモリリークが発生する可能性のあるメモリ領域（プログラム）を検出するようにしている。それにより、監視対象とするカーネルプロセス側のプログラムを変更する必要性を回避している。このため、カーネルプロセスのプログラムを変更する場合と比較して、より低コストでメモリリークの監視を行うことができる。【００４９】
図１３に示す様な除外リスト２２１を採用する場合、図１１に示す各レコードに対する処理は、図１４に示す様に変形すれば良い。その図１４では、ステップＳ４１の判定がＹｅｓとなってステップＳ６１に移行し、プロセスに該当するレコード数、つまり対象するレコードのプロセス名を格納した全レコード数が除外リスト２２１に登録されたメモリ領域数未満か否か判定する。全レコード数がメモリ領域数未満であった場合、判定はＹｅｓとなり、ここで各レコードに対する処理を終了する。全レコード数がメモリ領域数より大きい場合には、判定はＮｏとなってステップＳ４２に移行する。
メモリ領域監視デーモンは、マネジメントボードの組み込みＯＳおよび装置管理アプリケーションが起動した後、サーバ装置の運用管理を開始する時刻（運用開始時刻と呼ぶ）を運用開始時刻変数に記録する。【００５０】
また、本実施形態では、図２中、太線で囲った部分のプログラムを追加し、その追加した部分を含む組み込みＯＳ２００及び装置管理アプリケーション２５０をマネジメントボード（コンピュータ）２０に実行させることにより、メモリリーク監視装置を実現させているが、別の方法によりメモリリーク監視装置を実現させても良い。それにより、メモリリーク監視装置を実現させるメモリリーク監視プログラムに搭載させる機能は、１つのプログラムに全てを搭載しても良く、複数のプログラムに分けて搭載しても良い。このメモリリーク監視プログラムは、コンピュータがアクセス可能な記録媒体、或いは通信ネットワークを介して配布するようにしても良い。
【図１】
2010113212.tif 000003
【図２】
2010113212.tif 000004
【図３】
2010113212.tif 000005
【図４】
2010113212.tif 000006
【図５】
2010113212.tif 000007
【図６】
2010113212.tif 000008
【図７】
2010113212.tif 000009
【図８】
2010113212.tif 000010
【図９】
2010113212.tif 000011
【図１０】
2010113212.tif 000012
【図１１】
2010113212.tif 000013
【図１２】
2010113212.tif 000014
【図１３】
2010113212.tif 000015
【図１４】
2010113212.tif 000016
【国際調査報告】
2010113212.tif 000017
2010113212.tif 000018
2010113212.tif 000019
2010113212.tif 000020