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

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

Info

Publication number
JP2009211654A
JP2009211654A JP2008056711A JP2008056711A JP2009211654A JP 2009211654 A JP2009211654 A JP 2009211654A JP 2008056711 A JP2008056711 A JP 2008056711A JP 2008056711 A JP2008056711 A JP 2008056711A JP 2009211654 A JP2009211654 A JP 2009211654A
Authority
JP
Japan
Prior art keywords
memory
application
size
management table
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.)
Granted
Application number
JP2008056711A
Other languages
English (en)
Other versions
JP5157537B2 (ja
Inventor
Takeshi Miyano
剛 宮野
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

Landscapes

  • Debugging And Monitoring (AREA)
  • Memory System (AREA)

Abstract

【課題】一のアプリケーションにメモリリークの不具合が発生した際でも、メモリ領域を共有する他のアプリケーションに与える影響を抑制できるメモリ管理装置を提供する。
【解決手段】ヒープサイズ管理表106は、ヒープメモリ107の使用量を、オブジェクト生成元のクラスローダ101単位で管理する。ヒープサイズ記録手段105は、ヒープメモリ107におけるメモリ使用量を、クラスローダ101単位で、ヒープサイズ管理表106に記録する。ヒープサイズ監視手段104は、ヒープサイズ管理表106で、メモリ使用量が所定のしきい値を超えるクラスローダがあるとき、そのクラスローダに、メモリ使用量がしきい値を超えた旨を通知する。
【選択図】図1

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

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013175107A (ja) * 2012-02-27 2013-09-05 Nippon Telegr & Teleph Corp <Ntt> メモリ管理装置、メモリ管理方法およびメモリ管理プログラム
JP2014239302A (ja) * 2013-06-06 2014-12-18 キヤノン株式会社 画像処理装置、その制御方法、及びプログラム
CN108073441A (zh) * 2016-11-14 2018-05-25 阿里巴巴集团控股有限公司 一种虚拟机内存监管方法与设备
JP2019522836A (ja) * 2016-05-09 2019-08-15 オラクル・インターナショナル・コーポレイション ヒープをため込んでいるスタックトレースを特定するための、スレッド強度とヒープ使用量との相関

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001265650A (ja) * 2000-03-15 2001-09-28 Omron Corp メモリリソース使用状況監視装置及びメモリリソース使用状況監視方法
JP2003504754A (ja) * 1999-07-13 2003-02-04 サン・マイクロシステムズ・インコーポレイテッド 個々のクラスローダを実装するための方法および装置
JP2007157131A (ja) * 2005-11-30 2007-06-21 Internatl Business Mach Corp <Ibm> ガベージ・コレクション対応の仮想マシンにおいて、将来のメモリ不足例外を自動予測する方法、コンピュータ読み取り可能な媒体、及びコンピューティング・デバイス

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003504754A (ja) * 1999-07-13 2003-02-04 サン・マイクロシステムズ・インコーポレイテッド 個々のクラスローダを実装するための方法および装置
JP2001265650A (ja) * 2000-03-15 2001-09-28 Omron Corp メモリリソース使用状況監視装置及びメモリリソース使用状況監視方法
JP2007157131A (ja) * 2005-11-30 2007-06-21 Internatl Business Mach Corp <Ibm> ガベージ・コレクション対応の仮想マシンにおいて、将来のメモリ不足例外を自動予測する方法、コンピュータ読み取り可能な媒体、及びコンピューティング・デバイス

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSNB200200228001; 原田 洋子: サーブレット&JSPではじめる Javaサーバサイドプログラミング 第1版, 20010625, p.13〜16,355〜356, 株式会社技術評論社 *
JPN6012010708; 原田 洋子: サーブレット&JSPではじめる Javaサーバサイドプログラミング 第1版, 20010625, p.13〜16,355〜356, 株式会社技術評論社 *

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013175107A (ja) * 2012-02-27 2013-09-05 Nippon Telegr & Teleph Corp <Ntt> メモリ管理装置、メモリ管理方法およびメモリ管理プログラム
JP2014239302A (ja) * 2013-06-06 2014-12-18 キヤノン株式会社 画像処理装置、その制御方法、及びプログラム
JP2019522836A (ja) * 2016-05-09 2019-08-15 オラクル・インターナショナル・コーポレイション ヒープをため込んでいるスタックトレースを特定するための、スレッド強度とヒープ使用量との相関
US11093285B2 (en) 2016-05-09 2021-08-17 Oracle International Corporation Compression techniques for encoding stack trace information
US11144352B2 (en) 2016-05-09 2021-10-12 Oracle International Corporation Correlation of thread intensity and heap usage to identify heap-hoarding stack traces
JP2022003566A (ja) * 2016-05-09 2022-01-11 オラクル・インターナショナル・コーポレイション ヒープをため込んでいるスタックトレースを特定するための、スレッド強度とヒープ使用量との相関
US11327797B2 (en) 2016-05-09 2022-05-10 Oracle International Corporation Memory usage determination techniques
JP7202432B2 (ja) 2016-05-09 2023-01-11 オラクル・インターナショナル・コーポレイション ヒープをため込んでいるスタックトレースを特定するための、スレッド強度とヒープ使用量との相関
US11614969B2 (en) 2016-05-09 2023-03-28 Oracle International Corporation Compression techniques for encoding stack trace information
US11640320B2 (en) 2016-05-09 2023-05-02 Oracle International Corporation Correlation of thread intensity and heap usage to identify heap-hoarding stack traces
CN108073441A (zh) * 2016-11-14 2018-05-25 阿里巴巴集团控股有限公司 一种虚拟机内存监管方法与设备
CN108073441B (zh) * 2016-11-14 2022-05-10 阿里巴巴集团控股有限公司 一种虚拟机内存监管方法与设备

Also Published As

Publication number Publication date
JP5157537B2 (ja) 2013-03-06

Similar Documents

Publication Publication Date Title
KR101983413B1 (ko) 사이클 그래프에서 객체 수명을 관리하는 기법
US9495115B2 (en) Automatic analysis of issues concerning automatic memory management
TWI421681B (zh) 於計算環境中用於記憶體管理之記憶體及系統
EP3432159B1 (en) Garbage collection method and device
JP2007157131A (ja) ガベージ・コレクション対応の仮想マシンにおいて、将来のメモリ不足例外を自動予測する方法、コンピュータ読み取り可能な媒体、及びコンピューティング・デバイス
CN109656742B (zh) 一种节点异常处理方法、装置及存储介质
US7865901B2 (en) Managing memory resident objects to optimize a runtime environment
JP2007226413A (ja) メモリダンプ方法、メモリダンププログラム、及び、計算機システム
JP5157537B2 (ja) メモリ管理装置、システム、方法、及び、プログラム
US8713537B2 (en) Monitoring heap in real-time by a mobile agent to assess performance of virtual machine
CN115335806A (zh) 以模块粒度的影子堆栈违规强制
US20100094861A1 (en) System and method for application session tracking
US11861364B2 (en) Circular shadow stack in audit mode
US20110225463A1 (en) Detecting and recovering from process failures
CN104731634A (zh) 一种实时在线的分布式计算框架的实现方法
CN113342554A (zh) Io多路复用方法、介质、设备和操作系统
CN115362433A (zh) 用于动态代码的影子堆栈强制范围
CN116127494A (zh) 用户并发访问的控制方法及相关装置
JP6051733B2 (ja) 制御システム、制御方法、及び、制御プログラム
EP3070610B1 (en) Information processing device, control method thereof, and recording medium
KR100703810B1 (ko) 자바 실행 환경에서 네이티브 메모리를 관리하는 장치 및방법
CN117348951B (zh) 应用于linux内核的容器感知装置和容器感知方法
CN110764882A (zh) 分布式管理方法、分布式管理系统及装置
CN114968551B (zh) 一种进程管理的方法、装置、电子设备及存储介质
JP2005301570A (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