JP5157537B2 - メモリ管理装置、システム、方法、及び、プログラム - Google Patents

メモリ管理装置、システム、方法、及び、プログラム Download PDF

Info

Publication number
JP5157537B2
JP5157537B2 JP2008056711A JP2008056711A JP5157537B2 JP 5157537 B2 JP5157537 B2 JP 5157537B2 JP 2008056711 A JP2008056711 A JP 2008056711A JP 2008056711 A JP2008056711 A JP 2008056711A JP 5157537 B2 JP5157537 B2 JP 5157537B2
Authority
JP
Japan
Prior art keywords
memory
application
size
management table
memory area
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.)
Expired - Fee Related
Application number
JP2008056711A
Other languages
English (en)
Other versions
JP2009211654A (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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2008056711A priority Critical patent/JP5157537B2/ja
Publication of JP2009211654A publication Critical patent/JP2009211654A/ja
Application granted granted Critical
Publication of JP5157537B2 publication Critical patent/JP5157537B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、メモリ管理装置、システム、方法、及び、プログラムに関し、更に詳しくは、複数のアプリケーションが実行可能で、かつ、複数のアプリケーションでメモリ領域が共有されるアプリケーション実行装置におけるメモリ領域を管理するメモリ管理装置、システム、方法、及び、プログラムに関する。
Java(登録商標)仮想マシン(Java VM:Java Virtual Machine)と呼ばれるアプリケーション実行装置がある。Java VMは、オブジェクトをヒープと呼ばれるメモリ領域に格納する。Java VMは、オブジェクトを生成する際に、ヒープのメモリ領域を確保する。オブジェクトが不用になると、ガベージコレクタにより、確保していたヒープのメモリ領域を回収する。これにより、回収したメモリ領域を、別のオブジェクトにて再利用することができる。Java VM及びガベージコレクション処理は、例えば、特許文献1に記載されている。
Java Platform, Enterprise Edition(Java EE)仕様に準拠するアプリケーションサーバでは、複数のアプリケーションを、単一のJava VM上で動作させることが可能である。このため、Java EEのアプリケーションサーバでは、各アプリケーションが独立して動作するように、アプリケーションをロードするクラスローダをアプリケーションごとに分ける実装方法が一般的である。別々のクラスローダでアプリケーションをロードすることで、互いのクラスデータが干渉しないようにすることができる。
特開2002−259146号公報
ところで、Java VMにて、複数あるアプリケーションのいずれかに、メモリリークの不具合が発生すると、そのアプリケーションはヒープメモリを大量に確保することになる。Java EE仕様に準拠するアプリケーションサーバでは、ヒープメモリの領域は、Java VM内で1つしかなく、すべてのアプリケーションで同じ領域を使用している。このため、何れかのアプリケーションにメモリリークがあると、ヒープ不足により、他のアプリケーションが動作できなくなるという問題が発生する。
特許文献1は、資源提供時に、要求元アプリケーションの識別子と、提供した資源とを組にしてテーブルに保存し、アプリケーション終了時に、終了したアプリケーションの識別子に対応する資源をテーブルから特定し、特定した資源を開放するものである。特許文献1は、資源回収をカーネルによらずに実行するアプリケーション実行装置を提供することを目的としており、上記問題を解消する技術ではない。つまり、特許文献1では、クラス単位で、複数のアプリケーションが実行可能で、かつ、複数のアプリケーションでオブジェクトをロードするメモリ領域が共有されるアプリケーション実行装置にて、メモリリーク発生時に、他のアプリケーションに与える影響を抑制することはできない。
本発明は、複数のアプリケーションが実行可能で、かつ、複数のアプリケーションでオブジェクトをロードするメモリ領域が共有されるアプリケーション実行装置にて、メモリリーク発生時に、他のアプリケーションに与える影響を抑制できるメモリ管理装置、システム、方法、及び、プログラムを提供することを目的とする。
上記目的を達成するために、本発明のメモリ管理装置は、アプリケーションを生成するアプリケーション生成手段を複数備え、複数のアプリケーションが実行可能で、かつ、複数のアプリケーションでメモリ領域が共有されるアプリケーション実行装置におけるメモリ領域を管理するメモリ管理装置であって、前記アプリケーション生成手段のメモリ使用量として、該アプリケーション生成手段が生成したアプリケーションが使用中の前記メモリ領域の量を、前記複数のアプリケーション生成手段ごとにメモリ使用量を管理するメモリサイズ管理表に記録するメモリサイズ記録手段と、前記メモリサイズ管理表で、前記メモリ使用量が所定のしきい値を超える前記アプリケーション生成手段に、メモリ使用量がしきい値を超えた旨を通知するメモリ監視手段とを備え、前記アプリケーション生成手段は、前記メモリ監視手段からメモリ使用量がしきい値を超えた旨を通知されると、前記生成したアプリケーションを閉塞するか、警告を発する、ことを特徴とする。
本発明のメモリ管理システムは、アプリケーションを生成するアプリケーション生成手段を複数備え、複数のアプリケーションが実行可能で、かつ、複数のアプリケーションでメモリ領域が共有されるアプリケーション実行装置と、前記アプリケーション実行装置における前記アプリケーション生成手段のメモリ使用量としてアプリケーション生成手段が生成したアプリケーションが使用中の前記メモリ領域の量を、前記複数のアプリケーション生成手段ごとにメモリ使用量を管理するメモリサイズ管理表に記録するメモリサイズ記録手段と、前記メモリサイズ管理表で、前記メモリ使用量が所定のしきい値を超える前記アプリケーション実行装置内のアプリケーション生手段に、メモリ使用量がしきい値を超えた旨を通知するメモリ監視手段とを備え、前記アプリケーション生成手段は、前記メモリ監視手段からメモリ使用量がしきい値を超えた旨を通知されると、前記生成したアプリケーションを閉塞するか、警告を発する、ことを特徴とする。
本発明のメモリ管理方法は、アプリケーションを生成するアプリケーション生成手段を複数備え、複数のアプリケーションが実行可能で、かつ、複数のアプリケーションでメモリ領域共有する機能を持つコンピュータにおけるメモリ領域を管理する方法であって、前記コンピュータが、前記アプリケーション生成手段のメモリ使用量としてアプリケーション生成手段が生成したアプリケーションが使用中の前記メモリ領域の量を、前記複数のアプリケーション生成手段ごとにメモリ使用量を管理するメモリサイズ管理表に記録するステップと、前記コンピュータが、前記メモリサイズ管理表で、前記メモリ使用量が所定のしきい値を超える前記アプリケーション生成手段に、メモリ使用量がしきい値を超えた旨を通知するステップと、前記コンピュータが、前記アプリケーション生成手段にメモリ使用量がしきい値を超えた旨が通知されると、該アプリケーション生成手段が生成したアプリケーションを閉塞するか、警告を発するステップと、を有することを特徴とする。
本発明のプログラムは、アプリケーションを生成するアプリケーション生成手段を複数備え、複数のアプリケーションが実行可能で、かつ、複数のアプリケーションでメモリ領域共有する機能を持つコンピュータに、前記アプリケーション生成手段のメモリ使用量としてアプリケーション生成手段が生成したアプリケーションが使用中の前記メモリ領域の量を、前記複数のアプリケーション生成手段ごとにメモリ使用量を管理するメモリサイズ管理表に記録する処理と、前記メモリサイズ管理表で、前記メモリ使用量が所定のしきい値を超える前記アプリケーション生成手段に、メモリ使用量がしきい値を超えた旨を通知する処理と、前記アプリケーション生成手段にメモリ使用量がしきい値を超えた旨が通知されると、該アプリケーション生成手段が生成したアプリケーションを閉塞するか、警告を発する処理と、を実行させることを特徴とする。
本発明のメモリ管理装置、システム、方法、及び、プログラムは、複数のアプリケーションが実行可能で、かつ、複数のアプリケーションでオブジェクトをロードするメモリ領域が共有されるアプリケーション実行装置にて、メモリリーク発生時に、他のアプリケーションに与える影響を抑制できる。
以下、図面を参照し、本発明の実施の形態を詳細に説明する。図1は、本発明の一実施形態のメモリ管理システムを示している。メモリ管理システムは、アプリケーション実行装置であるJava VM100と、メモリ管理装置を構成するヒープサイズ監視手段(メモリ監視手段)104、及び、ヒープサイズ記録手段(メモリサイズ記録手段)105とを有する。Java VM100は、Javaプログラムが動作する仮想計算機であり、クラスローダ101、ヒープ割り当て手段102、ガベージコレクタ103、ヒープメモリ107を有する。Java VM100及びメモリ管理装置内の各部の機能は、コンピュータ上で所定プログラムを実行することにより実現可能である。
クラスローダ101は、図示しないオブジェクト生成部がオブジェクトを生成する際に、ユーザプログラムなどからクラスをロードする。図1では、クラスローダ101を1つだけ図示しているが、Java VMは、複数のクラスローダを有する。ヒープ割り当て手段102は、生成されたオブジェクトに対して、ヒープメモリ107の領域を割り当てる。ガベージコレクタ103は、オブジェクト破棄時に、ヒープメモリ107にてオブジェクトに割り当てられていた領域を回収する。
メモリ管理装置は、Java VM100から、ヒープメモリ107の割り当て状況を取得する。Java VM100からの情報収集には、Java Virtual Machine Tool Interface(JVMTI)を用いる。ヒープ割り当て手段102は、領域割り当て時に、クラス識別子とオブジェクトサイズ(ヒープメモリ107に確保したメモリサイズ)とを指定して、JVMTIコールバックメソッド108を呼び出す。また、ガベージコレクタ103は、オブジェクトがガベージコレクトされる際に、クラスの識別子とオブジェクトサイズとを指定してJVMTIコールバックメソッド108を呼び出す。
JVMTIコールバックメソッド108は、ヒープ割り当て手段102からの呼び出しを受けると、受け取ったクラス識別子からオブジェクトのクラスローダを特定し、クラスローダの識別子とオブジェクトサイズとをヒープサイズ記録手段105に通知して、ヒープサイズ管理表(メモリサイズ管理表)106の更新を要求する。また、JVMTIコールバックメソッド108は、ガベージコレクタ103からの呼び出しを受けると、受け取ったクラス識別子からオブジェクトのクラスローダを特定し、クラスローダの識別子とオブジェクトサイズとをヒープサイズ記録手段105に通知して、ヒープサイズ管理表106の更新を要求する。
ヒープサイズ管理表106は、クラスローダの識別子と、そのクラスローダから生成されたオブジェクトが使用中のヒープメモリ107のメモリサイズとを対応付けて記憶している。ヒープサイズ記録手段105は、ヒープメモリ107で使用中のメモリサイズを、クラスローダ単位で、ヒープサイズ管理表106に記録する。ヒープサイズ記録手段105は、オブジェクトがヒープ割り当て手段102によりヒープメモリ107に割り当てられたとき、及び、オブジェクトがヒープメモリ107から開放されガベージコレクタ103がヒープメモリ107を回収したとき、JVMTIコールバックメソッド108からクラスローダの識別子とオブジェクトサイズとを受け取り、ヒープサイズ管理表106を更新する。
ヒープサイズ記録手段105は、JVMTIコールバックメソッド108がヒープ割り当て手段102から呼び出された場合は、ヒープサイズ管理表106の対応するクラスローダのカラムの値に、通知されたオブジェクトサイズの値を加える。また、ヒープサイズ記録手段105は、JVMTIコールバックメソッド108がガベージコレクタ103から呼び出された場合は、ヒープサイズ管理表106の対応するクラスローダのカラムの値から、通知されたオブジェクトサイズの値を減算する。
ヒープサイズ記録手段105は、ヒープサイズ管理表106の更新後、メモリサイズとクラスローダの識別子とを、ヒープサイズ監視手段104に渡す。ヒープサイズ監視手段104は、メモリサイズとしきい値とを比較する。ヒープサイズ監視手段104は、ヒープサイズ管理表106にて使用中のメモリサイズがしきい値を超えるクラスローダがあるときは、クラスローダの識別子にて識別されるクラスローダに対して、メモリサイズがしきい値を超えたことを通知する。
図2に、メモリ管理装置の動作手順を示す。ヒープサイズ記録手段105は、JVMTIコールバックメソッド108からの通知を受けて動作を開始する。ヒープサイズ記録手段105は、JVMTIコールバックメソッド108から通知されたクラスローダが、ヒープサイズ管理表106にキーとして存在するか否かを判断する(ステップS1)。存在しない場合は、ヒープサイズ管理表106にクラスローダをキーとしたエントリを新たに作成し、データを0に初期化する(ステップS2)。
ヒープサイズ記録手段105は、ヒープサイズ管理表106から、クラスローダをキーとしてデータを取得する(ステップS3)。ヒープサイズ記録手段105は、オブジェクト生成か、オブジェクト破棄かを判断する(ステップS4)。ステップS4では、ヒープサイズ記録手段105は、JVMTIコールバックメソッド108がヒープ割り当て手段102から呼び出された場合は、オブジェクト生成と判断し、JVMTIコールバックメソッド108がガベージコレクタ103から呼び出されたときは、オブジェクト破棄と判断する。
ヒープサイズ記録手段105は、ステップS4でオブジェクト生成と判断すると、ステップS3で取得したデータに、JVMTIコールバックメソッド108から通知されたオブジェクトサイズを加える(ステップS5)。ヒープサイズ記録手段105は、ステップS4でオブジェクト破棄と判断したときは、ステップS3で取得したデータから、JVMTIコールバックメソッド108から通知されたオブジェクトサイズを減算する(ステップS6)。ヒープサイズ記録手段105は、ステップS5で加算したデータ、又は、ステップS6で減算したデータを、ヒープサイズ管理表106に格納し、ヒープサイズ管理表106を更新する(ステップS7)。
ヒープサイズ記録手段105は、クラスローダの識別子と、ステップS7でヒープサイズ管理表106に格納したデータとを、ヒープサイズ監視手段104に通知する。ヒープサイズ監視手段104は、格納されたデータと、所定のしきい値とを比較する(ステップS8)。ヒープサイズ監視手段104は、格納されたデータが、しきい値以下であると判断すると、処理を終了する。ヒープサイズ監視手段104は、格納されたデータが、しきい値を超えると判断すると、受け取ったクラスローダ識別子にて識別されるクラスロードに、しきい値を超えた旨を通知する(ステップS9)。通知を受けたクラスローダは、アプリケーションを閉塞させる。或いは、アプリケーションを閉塞させずに、アラームを発生してもよい。
以下、具体例を用いて説明する。図3(a)に、クラスローダ101が生成するインスタンス(オブジェクト)を示し、(b)及び(c)に、ヒープサイズ管理表106のデータ例を示す。ここでは、図3(a)に示すように、クラスローダ101(クラスローダALoader)が、クラスAのインスタンスAaとインスタンスAbとを生成する場合を考える。インスタンスAaとインスタンスAbのメモリサイズは、60バイトであるとする。ヒープサイズ監視手段104におけるしきい値は100バイトに設定されているとする。
ヒープ割り当て手段102は、インスタンスAaを生成する際に、ヒープメモリ107から60バイトの領域を確保し、クラスAのクラス識別子とオブジェクトのメモリサイズ「60」とを指定して、JVMTIコールバックメソッド108を呼び出す。JVMTIコールバックメソッド108は、クラスAのクラス識別子からALoaderを得て、ALoaderとメモリサイズ60とを指定してヒープサイズ記録手段105に対してヒープサイズ管理表106の更新を要求する。
ヒープサイズ記録手段105は、図2のステップS1でクラスローダALoaderをキーとしてヒープサイズ管理表106を検索する。エントリが存在しない場合は、ステップS2に移行し、ヒープサイズ管理表106に、ALoaderをキーとしたエントリを新たに作成し、データを0に初期化する(図3(b)の初期化状態)。ヒープサイズ記録手段105は、ステップS3でデータ「0」を取得する。
ヒープサイズ記録手段105は、ステップS4で、JVMTIコールバックメソッド108からの通知がオブジェクト生成であるか否かを判断する。ヒープサイズ記録手段105は、通知がオブジェクト生成であるので、ステップS4からステップS5に移行し、ステップS3で取得した、ヒープサイズ管理表106のALoaderをキーとしたエントリのデータ「0」に、メモリサイズ「60」を加算し、ステップS7で、ヒープサイズ管理表106に格納する(図3(b)のインスタンスAa生成後)。
ヒープサイズ記録手段105は、ステップS7でヒープサイズ管理表106に格納したデータ「60」をヒープサイズ監視手段104に渡す。ヒープサイズ監視手段104は、ステップS8で、格納されたデータ「60」としきい値「100」とを比較する。この値は、しきい値を超えていないので、図2の処理を終了する。
続いて、ヒープ割り当て手段102は、インスタンスAbを生成する際に、ヒープメモリ107から60バイトの領域を確保し、クラスAのクラス識別子とオブジェクトのメモリサイズ「60」とを指定して、JVMTIコールバックメソッド108を呼び出す。JVMTIコールバックメソッド108は、クラスAのクラス識別子からALoaderを得て、ALoaderとメモリサイズ60とを指定してヒープサイズ記録手段105に対してヒープサイズ管理表106の更新を要求する。
ヒープサイズ記録手段105は、ステップS1でクラスローダALoaderをキーとしてヒープサイズ管理表106を検索する。クラスローダALoaderをキーとするエントリは存在するので、ヒープサイズ記録手段105は、ステップS3で、ヒープサイズ管理表106のALoaderをキーとしたエントリのデータ「60」を取得する。
ヒープサイズ記録手段105は、ステップS4で、JVMTIコールバックメソッド108からの通知がオブジェクト生成であるか否かを判断する。ヒープサイズ記録手段105は、通知がオブジェクト生成であるので、ステップS4からステップS5に移行し、ステップS3で取得した、ヒープサイズ管理表106のALoaderをキーとしたエントリのデータ「60」に、メモリサイズ「60」を加算し、ステップS7で、ヒープサイズ管理表106に格納する(図3(b)のインスタンスAb生成後)。
ヒープサイズ記録手段105は、ステップS7でヒープサイズ管理表106に格納したデータ「120」をヒープサイズ監視手段104に渡す。ヒープサイズ監視手段104は、ステップS8で、格納されたデータ「120」としきい値「100」とを比較する。この値は、しきい値を超えているので、ヒープサイズ監視手段104は、ステップS9で、クラスローダ101に、しきい値を超えた旨を通知する。クラスローダ101には、あらかじめ通知を受けた際にすべき動作が設定されている。クラスローダ101は、ヒープメモリ107におけるメモリサイズがしきい値を超えた旨の通知を受けると、設定にしたがって、例えば、アプリケーションを閉塞させる。
引き続き、Java VM100が、クラスローダ101によってロードされるクラスAのインスタンスAaを生成した後に、そのインスタンスが破棄され、ガベージコレクタ103によってヒープメモリ107の領域が回収された後に、インスタンスAbを生成する場合を説明する。
ヒープ割り当て手段102は、インスタンスAaを生成する際に、ヒープメモリ107から60バイトの領域を確保し、クラスAのクラス識別子とオブジェクトのメモリサイズ「60」とを指定して、JVMTIコールバックメソッド108を呼び出す。JVMTIコールバックメソッド108は、クラスAのクラス識別子からALoaderを得て、ALoaderとメモリサイズ60とを指定してヒープサイズ記録手段105に対してヒープサイズ管理表106の更新を要求する。
ヒープサイズ記録手段105は、ステップS1でクラスローダALoaderをキーとしてヒープサイズ管理表106を検索する。エントリが存在しない場合は、ステップS2に移行し、ヒープサイズ管理表106に、ALoaderをキーとしたエントリを新たに作成し、データを0に初期化する(図3(c)の初期状態)。ヒープサイズ記録手段105は、ステップS3でデータ「0」を取得する。
ヒープサイズ記録手段105は、ステップS4で、JVMTIコールバックメソッド108からの通知がオブジェクト生成であるか否かを判断する。ヒープサイズ記録手段105は、通知がオブジェクト生成であるので、ステップS4からステップS5に移行し、ステップS3で取得した、ヒープサイズ管理表106のALoaderをキーとしたエントリのデータ「0」に、メモリサイズ「60」を加算し、ステップS7で、ヒープサイズ管理表106に格納する(図3(c)のインスタンスAa生成後)。
ヒープサイズ記録手段105は、ステップS7でヒープサイズ管理表106に格納したデータ「60」をヒープサイズ監視手段104に渡す。ヒープサイズ監視手段104は、ステップS8で、格納されたデータ「60」としきい値「100」とを比較する。この値は、しきい値を超えていないので、図2の処理を終了する。
次に、インスタンスAaが破棄されると、ガベージコレクタ103は、インスタンスAaに割り当てられていたヒープメモリ107の60バイトの領域を回収する。ガベージコレクタ103は、クラスAのクラス識別子とオブジェクトのメモリサイズ60とを指定して、JVMTIコールバックメソッド108を呼び出す。JVMTIコールバックメソッド108は、クラスAのクラス識別子からALoaderを得て、ALoaderと60とを指定して、ヒープサイズ記録手段105に対してヒープサイズ管理表106の更新を要求する。
ヒープサイズ記録手段105は、ステップS1でクラスローダALoaderをキーとしてヒープサイズ管理表106を検索する。クラスローダALoaderをキーとするエントリは存在するので、ヒープサイズ記録手段105は、ステップS3で、ヒープサイズ管理表106のALoaderをキーとしたエントリのデータ「60」を取得する。
ヒープサイズ記録手段105は、ステップS4で、JVMTIコールバックメソッド108からの通知がオブジェクト生成であるか否かを判断する。ヒープサイズ記録手段105は、通知がオブジェクト破棄であるので、ステップS4からステップS6に移行し、ステップS3で取得した、ヒープサイズ管理表106のALoaderをキーとしたエントリのデータ「60」から、メモリサイズ「60」を減算し、ステップS7で、ヒープサイズ管理表106に格納する(図3(c)のインスタンスAa破棄後)。
ヒープサイズ記録手段105は、ステップS7でヒープサイズ管理表106に格納したデータ「0」をヒープサイズ監視手段104に渡す。ヒープサイズ監視手段104は、ステップS8で、格納されたデータ「0」としきい値「100」とを比較する。この値は、しきい値を超えていないので、図2の処理を終了する。
続いて、ヒープ割り当て手段102は、インスタンスAbを生成する際に、ヒープメモリ107から60バイトの領域を確保し、クラスAのクラス識別子とオブジェクトのメモリサイズ「60」とを指定して、JVMTIコールバックメソッド108を呼び出す。JVMTIコールバックメソッド108は、クラスAのクラス識別子からALoaderを得て、ALoaderとメモリサイズ60とを指定してヒープサイズ記録手段105に対してヒープサイズ管理表106の更新を要求する。
ヒープサイズ記録手段105は、ステップS1でクラスローダALoaderをキーとしてヒープサイズ管理表106を検索する。クラスローダALoaderをキーとするエントリは存在するので、ヒープサイズ記録手段105は、ステップS3で、ヒープサイズ管理表106のALoaderをキーとしたエントリのデータ「0」を取得する。
ヒープサイズ記録手段105は、ステップS4で、JVMTIコールバックメソッド108からの通知がオブジェクト生成であるか否かを判断する。ヒープサイズ記録手段105は、通知がオブジェクト生成であるので、ステップS4からステップS5に移行し、ステップS3で取得した、ヒープサイズ管理表106のALoaderをキーとしたエントリのデータ「0」に、メモリサイズ「60」を加算し、ステップS7で、ヒープサイズ管理表106に格納する(図3(c)のインスタンスAb生成後)。
ヒープサイズ記録手段105は、ステップS7でヒープサイズ管理表106に格納したデータ「60」をヒープサイズ監視手段104に渡す。ヒープサイズ監視手段104は、ステップS8で、格納されたデータ「60」としきい値「100」とを比較する。この値は、しきい値を超えていないので、図2の処理を終了する。
本実施形態では、ヒープサイズ記録手段105を用いて、クラスローダごとに、インスタンス生成時にヒープメモリ107に割り当てられたヒープサイズをヒープサイズ管理表106に記録する。ヒープサイズ監視手段104は、ヒープサイズ管理表106にて、ヒープサイズがしきい値を超えたとき、ヒープサイズがしきい値を超えたクラスローダに対して、しきい値を超えた旨を通知する。
本実施形態では、ヒープサイズ管理表にて、アプリケーションのクラスローダ単位に、使用メモリサイズを管理している。このようにすることで、複数のWebアプリケーションのうちの1つにメモリリークの不具合があったときに、そのアプリケーションをロードするクラスローダに対して、ヒープメモリ107の使用量がしきい値を超えた旨を通知することができる。この通知を受けたクラスローダが、アプリケーションを停止することで、他のアプリケーションの動作に影響を与えずに、しきい値を超えてヒープメモリ107を使用しているアプリケーションを停止することができる。これにより、アプリケーションをJava VM100上で動作させるアプリケーションサーバにて、一のアプリケーションのメモリリークが他のアプリケーションに与える影響を抑制することができる。
また、本実施形態では、ヒープサイズ記録手段105は、ガベージコレクタ103により、ヒープメモリ107の領域が回収されたときは、ヒープサイズ管理表106から、回収されたオブジェクトのサイズを減算する。このようにすることで、ガベージコレクションによってヒープが回収された場合でも、クラスローダ単位で、ヒープメモリ107の使用量を正確に把握できる。従って、オブジェクトを生成し、その後、ガベージコレクションによってヒープが回収され、その更に後のオブジェクトが生成されたケース(図3(c)では、アプリケーションの正常な運用が可能ある。
なお、上記実施形態では、アプリケーション実行装置が、Java VMである例を説明した。アプリケーション実行装置は、これに限定されるものではなく、複数のアプリケーションが実行可能で、かつ、複数のアプリケーションでオブジェクトをロードするメモリ領域が共有される他のアプリケーション実行装置にも適用可能である。
以上、本発明をその好適な実施形態に基づいて説明したが、本発明のメモリ管理装置、システム、方法、及び、プログラムは、上記実施形態にのみ限定されるものではなく、上記実施形態の構成から種々の修正及び変更を施したものも、本発明の範囲に含まれる。
本発明は、Javaで動作するアプリケーションサーバプログラムの用途に適用することができる。
本発明の一実施形態のメモリ管理システムを示すブロック図。 メモリ管理装置の動作手順を示すブロック図。 (a)は、クラスローダが生成するインスタンスを示す図、(b)及び(c)に、ヒープサイズ管理表のデータ例を示す図。
符号の説明
100:Java VM
101:クラスローダ
102:ヒープ割り当て手段
103:ガベージコレクタ
104:ヒープサイズ監視手段
105:ヒープサイズ記録手段
106:ヒープサイズ管理表
107:ヒープメモリ
108:JVMTIコールバックメソッド

Claims (19)

  1. アプリケーションを生成するアプリケーション生成手段を複数備え、複数のアプリケーションが実行可能で、かつ、複数のアプリケーションでメモリ領域が共有されるアプリケーション実行装置におけるメモリ領域を管理するメモリ管理装置であって、
    前記アプリケーション生成手段のメモリ使用量としてアプリケーション生成手段が生成したアプリケーションが使用中の前記メモリ領域の量を、前記複数のアプリケーション生成手段ごとにメモリ使用量を管理するメモリサイズ管理表に記録するメモリサイズ記録手段と、
    前記メモリサイズ管理表で、前記メモリ使用量が所定のしきい値を超える前記アプリケーション生成手段に、メモリ使用量がしきい値を超えた旨を通知するメモリ監視手段と
    を備え
    前記アプリケーション生成手段は、前記メモリ監視手段からメモリ使用量がしきい値を超えた旨を通知されると、前記生成したアプリケーションを閉塞するか、警告を発する、
    メモリ管理装置。
  2. 前記メモリサイズ記録手段は、前記アプリケーションがメモリ領域に割り当てられたとき、及び、前記アプリケーションがメモリ領域から開放されたとき、前記メモリサイズ管理表の該アプリケーションを生成したアプリケーション生成手段のメモリ使用量を更新する、
    請求項1に記載のメモリ管理装置。
  3. 前記メモリサイズ記録手段は、前記アプリケーション実行装置にて前記アプリケーションが前記メモリ領域に割り当てられると、前記メモリサイズ管理表における割り当てられたアプリケーションを生成した前記アプリケーション生成手段のメモリ使用量を、前記メモリ領域に割り当てられたメモリサイズ分だけ加算する、
    請求項に記載のメモリ管理装置。
  4. 前記メモリサイズ記録手段は、前記アプリケーション実行装置にて前記アプリケーションに割り当てられていたメモリ領域が回収されると、前記メモリサイズ管理表における該メモリ領域が回収されたアプリケーションを生成した前記アプリケーション生成手段のメモリ使用量から、前記メモリ領域から回収されたメモリサイズ分だけ減算する、
    請求項2又は記載のメモリ管理装置。
  5. 前記アプリケーション実行装置がJava仮想マシンであり、前記アプリケーション生成手段が、オブジェクト生成元のクラスをロードする該Java仮想マシンのクラスローダである、
    請求項乃至4の何れか一に記載のメモリ管理装置。
  6. 前記メモリサイズ記録手段は、Java Virtual Machine Tool Interfaceを用いて、前記Java仮想マシンから、該Java仮想マシンにて前記オブジェクトに割り当てられたメモリ領域のサイズ、及び、前記オブジェクト破棄時に前記メモリ領域からガベージコレクション処理により回収されたメモリ領域のサイズと、前記オブジェクトの生成元のクラスを識別する情報とを取得し、該取得した情報に基づいて前記メモリサイズ管理表を更新する、
    請求項5に記載のメモリ管理装置。
  7. アプリケーションを生成するアプリケーション生成手段を複数備え、複数のアプリケーションが実行可能で、かつ、複数のアプリケーションでメモリ領域が共有されるアプリケーション実行装置と、
    前記アプリケーション実行装置における前記アプリケーション生成手段のメモリ使用量としてアプリケーション生成手段が生成したアプリケーションが使用中の前記メモリ領域の量を、前記複数のアプリケーション生成手段ごとにメモリ使用量を管理するメモリサイズ管理表に記録するメモリサイズ記録手段と、
    前記メモリサイズ管理表で、前記メモリ使用量が所定のしきい値を超える前記アプリケーション実行装置内のアプリケーション生手段に、メモリ使用量がしきい値を超えた旨を通知するメモリ監視手段と
    を備え
    前記アプリケーション生成手段は、前記メモリ監視手段からメモリ使用量がしきい値を超えた旨を通知されると、前記生成したアプリケーションを閉塞するか、警告を発する、
    メモリ管理システム。
  8. アプリケーションを生成するアプリケーション生成手段を複数備え、複数のアプリケーションが実行可能で、かつ、複数のアプリケーションでメモリ領域共有する機能を持つコンピュータにおけるメモリ領域を管理する方法であって、
    前記コンピュータが、前記アプリケーション生成手段のメモリ使用量としてアプリケーション生成手段が生成したアプリケーションが使用中の前記メモリ領域の量を、前記複数のアプリケーション生成手段ごとにメモリ使用量を管理するメモリサイズ管理表に記録するステップと、
    前記コンピュータが、前記メモリサイズ管理表で、前記メモリ使用量が所定のしきい値を超える前記アプリケーション生成手段に、メモリ使用量がしきい値を超えた旨を通知するステップと
    前記コンピュータが、前記アプリケーション生成手段にメモリ使用量がしきい値を超えた旨が通知されると、該アプリケーション生成手段が生成したアプリケーションを閉塞するか、警告を発するステップと、
    を有するメモリ管理方法。
  9. 前記コンピュータ、前記アプリケーションがメモリ領域に割り当てられたとき、及び、前記アプリケーションがメモリ領域から開放されたとき、前記メモリサイズ管理表の該アプリケーションを生成したアプリケーション生成手段のメモリ使用量を更新するステップをさらに有する、
    請求項8に記載のメモリ管理方法。
  10. 前記更新するステップでは、前記コンピュータが、前記アプリケーションが前記メモリ領域に割り当てられると、前記メモリサイズ管理表における割り当てられたアプリケーションを生成した前記アプリケーション生成手段のメモリ使用量を、前記メモリ領域に割り当てられたメモリサイズ分だけ加算する、
    請求項に記載のメモリ管理方法。
  11. 前記更新するステップでは、前記コンピュータが、前記アプリケーションに割り当てられていたメモリ領域が回収されると、前記メモリサイズ管理表における該メモリ領域が回収されたアプリケーションを生成した前記アプリケーション生成手段のメモリ使用量から、前記メモリ領域から回収されたメモリサイズ分だけ減算する、
    請求項9又は10に記載のメモリ管理方法。
  12. 前記コンピュータは、Java仮想マシン上で前記アプリケーションを実行し、前記アプリケーション生成手段は、オブジェクト生成元のクラスをロードする該Java仮想マシンのクラスローダである、
    請求項乃至11の何れか一に記載のメモリ管理方法。
  13. 前記更新するステップでは、前記コンピュータが、Java Virtual Machine Tool Interfaceを用いて、前記Java仮想マシンから、該Java仮想マシンにて前記オブジェクトに割り当てられたメモリ領域のサイズ、及び、前記オブジェクト破棄時に前記メモリ領域からガベージコレクション処理により回収されたメモリ領域のサイズと、前記オブジェクトの生成元のクラスを識別する情報とを取得し、該取得した情報に基づいて前記メモリサイズ管理表を更新する、
    請求項12に記載のメモリ管理方法。
  14. アプリケーションを生成するアプリケーション生成手段を複数備え、複数のアプリケーションが実行可能で、かつ、複数のアプリケーションでメモリ領域共有する機能を持つコンピュータに、
    前記アプリケーション生成手段のメモリ使用量としてアプリケーション生成手段が生成したアプリケーションが使用中の前記メモリ領域の量を、前記複数のアプリケーション生成手段ごとにメモリ使用量を管理するメモリサイズ管理表に記録する処理と、
    前記メモリサイズ管理表で、前記メモリ使用量が所定のしきい値を超える前記アプリケーション生成手段に、メモリ使用量がしきい値を超えた旨を通知する処理と
    前記アプリケーション生成手段にメモリ使用量がしきい値を超えた旨が通知されると、該アプリケーション生成手段が生成したアプリケーションを閉塞するか、警告を発する処理と、
    を実行させるプログラム。
  15. 前記コンピュータに、前記アプリケーションがメモリ領域に割り当てられたとき、及び、前記アプリケーションがメモリ領域から開放されたとき、前記メモリサイズ管理表の該アプリケーションを生成したアプリケーション生成手段のメモリ使用量を更新する処理をさらに実行させる、
    請求項14に記載のプログラム。
  16. 記更新する処理では、前記アプリケーションが前記メモリ領域に割り当てられると、前記メモリサイズ管理表における割り当てられたアプリケーションを生成した前記アプリケーション生成手段のメモリ使用量を、前記メモリ領域に割り当てられたメモリサイズ分だけ加算する、
    請求項15に記載のプログラム。
  17. 記更新する処理では、前記アプリケーションに割り当てられていたメモリ領域が回収されると、前記メモリサイズ管理表における該メモリ領域が回収されたアプリケーションを生成した前記アプリケーション生成手段のメモリ使用量から、前記メモリ領域から回収されたメモリサイズ分だけ減算する、
    請求項15又は16に記載のプログラム。
  18. 前記コンピュータは、Java仮想マシン上で前記アプリケーションを実行し、前記アプリケーション生成手段は、オブジェクト生成元のクラスをロードする該Java仮想マシンのクラスローダである、
    請求項15乃至17の何れか一に記載のプログラム。
  19. 記更新する処理では、Java Virtual Machine Tool Interfaceを用いて、前記Java仮想マシンから、該Java仮想マシンにて前記オブジェクトに割り当てられたメモリ領域のサイズ、及び、前記オブジェクト破棄時に前記メモリ領域からガベージコレクション処理により回収されたメモリ領域のサイズと、前記オブジェクトの生成元のクラスを識別する情報とを取得し、該取得した情報に基づいて前記メモリサイズ管理表を更新する、
    請求項18に記載のプログラム。
JP2008056711A 2008-03-06 2008-03-06 メモリ管理装置、システム、方法、及び、プログラム Expired - Fee Related JP5157537B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008056711A JP5157537B2 (ja) 2008-03-06 2008-03-06 メモリ管理装置、システム、方法、及び、プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008056711A JP5157537B2 (ja) 2008-03-06 2008-03-06 メモリ管理装置、システム、方法、及び、プログラム

Publications (2)

Publication Number Publication Date
JP2009211654A JP2009211654A (ja) 2009-09-17
JP5157537B2 true JP5157537B2 (ja) 2013-03-06

Family

ID=41184700

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008056711A Expired - Fee Related JP5157537B2 (ja) 2008-03-06 2008-03-06 メモリ管理装置、システム、方法、及び、プログラム

Country Status (1)

Country Link
JP (1) JP5157537B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5357989B2 (ja) * 2012-02-27 2013-12-04 日本電信電話株式会社 メモリ管理装置、メモリ管理方法およびメモリ管理プログラム
JP6223001B2 (ja) * 2013-06-06 2017-11-01 キヤノン株式会社 画像処理装置、その制御方法、及びプログラム
US10534643B2 (en) * 2016-05-09 2020-01-14 Oracle International Corporation Correlation of thread intensity and heap usage to identify heap-hoarding stack traces
CN108073441B (zh) * 2016-11-14 2022-05-10 阿里巴巴集团控股有限公司 一种虚拟机内存监管方法与设备

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6701334B1 (en) * 1999-07-13 2004-03-02 Sun Microsystems, Inc. Methods and apparatus for implementing individual class loaders
JP2001265650A (ja) * 2000-03-15 2001-09-28 Omron Corp メモリリソース使用状況監視装置及びメモリリソース使用状況監視方法
US20070136402A1 (en) * 2005-11-30 2007-06-14 International Business Machines Corporation Automatic prediction of future out of memory exceptions in a garbage collected virtual machine

Also Published As

Publication number Publication date
JP2009211654A (ja) 2009-09-17

Similar Documents

Publication Publication Date Title
JP6087928B2 (ja) 循環グラフにおけるオブジェクト寿命の管理
KR101683321B1 (ko) 분산 애플리케이션들을 모니터링 하는 방법
JP4701321B2 (ja) メモリ管理
US20070136402A1 (en) Automatic prediction of future out of memory exceptions in a garbage collected virtual machine
US20100058351A1 (en) Information processing apparatus and information processing method
JP2007226413A (ja) メモリダンプ方法、メモリダンププログラム、及び、計算機システム
JP2001134452A (ja) リソースの使用を管理するための装置および方法
CN103309796B (zh) 一种组件对象模型对象的监控方法和装置
US20080295113A1 (en) Managing memory resident objects to optimize a runtime environment
JP5157537B2 (ja) メモリ管理装置、システム、方法、及び、プログラム
JP2018028907A (ja) 要求オリジネータを識別するためのリモートプロシージャリンケージにわたるシステム動作のトレーシング
US8713538B2 (en) Monitoring heap in real-time by a mobile agent to assess performance of virtual machine
US10740166B2 (en) Thread based dynamic data collection
CN113342554B (zh) Io多路复用方法、介质、设备和操作系统
US11861364B2 (en) Circular shadow stack in audit mode
JP6428005B2 (ja) 情報処理装置,情報処理方法及び情報処理プログラム
JP2012216008A (ja) 仮想計算機装置及び仮想計算機装置の制御方法
JP2011243012A (ja) 仮想計算機システムのメモリダンプ取得方法
JP6051733B2 (ja) 制御システム、制御方法、及び、制御プログラム
EP3070610B1 (en) Information processing device, control method thereof, and recording medium
US10606748B2 (en) Apparatus and method for garbage collection on socket objects
CN117348951B (zh) 应用于linux内核的容器感知装置和容器感知方法
JP2013105349A (ja) 動的リンクライブラリの更新、実行方法
JP5357989B2 (ja) メモリ管理装置、メモリ管理方法およびメモリ管理プログラム
JP2017142670A (ja) メモリ管理装置およびメモリ管理方法

Legal Events

Date Code Title Description
RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20100224

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120223

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120313

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120514

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: 20121113

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121126

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151221

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees