(57)【要約】【課題】ガベージ・コレクション対応環境において、メモリ使用状況を管理すること。【解決手段】ガベージ・コレクション対応の環境おいて、メモリ不足例外を自動的に予測する方法及び装置が開示される。本発明の一実施形態によると、メモリ不足イベントを予測する方法は、複数のガベージ・コレクション・サイクルにわたり、メモリ・プールから使用することのできるメモリのサイズを監視するステップを含む。監視された、使用可能なメモリのサイズに基づき、メモリ使用状況プロファイルを生成する。その後、メモリ使用状況プロファイルを用いて、メモリ不足例外が発生するおそれがあるか否かを予測する。【選択図】図３
2007157131.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータによって実現され、ガベージ・コレクション対応のコンピューティング環境において、メモリの使用状態を管理する方法であって、
複数のガベージ・コレクション・サイクルの各サイクル中に、複数のアプリケーションがメモリ・プールから使用することのできるメモリのサイズを監視するステップであって、前記アプリケーションはそれぞれ、前記メモリ・プールからメモリを動的に確保し、前記メモリ・プールにメモリを動的に戻すこともできる、前記監視するステップと、
監視された、前記メモリ・プールから使用することのできるメモリの前記サイズに基づいて、２回以上のガベージ・コレクション・サイクルにわたる前記メモリ・プールから使用することのできる前記メモリの変化の特性を示すメモリ使用状況プロファイルを生成するステップと、
前記メモリ使用状況プロファイルに基づいて、メモリ不足例外が発生するおそれがあるか否かを予測するステップとを、
含む方法。
【請求項２】
前記メモリ・プールは、メモリ・マネージャによって確保される、請求項１に記載の方法。
【請求項３】
前記メモリ・プールから使用することのできるメモリの前記サイズが所定のサイズに達した場合、ガベージ・コレクタ・プロセスを始動し、各ガベージ・コレクション・サイクルを行わせるステップをさらに含む、請求項１に記載の方法。
【請求項４】
前記メモリ・プールはメモリ・ヒープを含む、請求項１に記載の方法。
【請求項５】
前記ガベージ・コレクション対応のコンピューティング環境は、仮想マシン環境を含む、請求項１に記載の方法。
【請求項６】
前記予測されたメモリ不足例外の発生を回避するために、対応措置を行うステップをさらに含む、請求項１に記載の方法。
【請求項７】
前記対応措置は、前記予測されたメモリ不足例外が発生するおそれのある時期の通知をシステム管理者に送信することを含む、請求項６に記載の方法。
【請求項８】
前記メモリ使用状況プロファイルを生成するステップは、前記メモリ・プールから確保されたメモリの前記サイズに基づいて、統計分析を行うことを含む、請求項１に記載の方法。
【請求項９】
前記メモリ不足例外が発生するおそれがあるか否かという前記予測に関する信頼性レベルを求めるステップをさらに含む、請求項１に記載の方法。
【請求項１０】
プログラムを有するコンピュータ読み取り可能な媒体であって、前記プログラムは、該プログラムが実行された場合、ガベージ・コレクション対応のコンピューティング環境において、メモリ使用状態を管理する動作を行い、前記動作は、
複数のガベージ・コレクション・サイクルの各サイクル中に、複数のアプリケーションがメモリ・プールから使用することのできるメモリのサイズを監視するステップであって、前記アプリケーションはそれぞれ、前記メモリ・プールからメモリを動的に確保し、前記メモリ・プールにメモリを動的に戻すこともできる、前記監視するステップと、
監視された、前記メモリ・プールから使用することのできるメモリの前記サイズに基づいて、２回以上のガベージ・コレクション・サイクルにわたる前記メモリ・プールから使用することのできる前記メモリの変化の特性を示すメモリ使用状況プロファイルを生成するステップと、
前記メモリ使用状況プロファイルに基づいて、メモリ不足例外が発生するおそれがあるか否かを予測するステップとを、
含む、コンピュータ読み取り可能な媒体。
【請求項１１】
ガベージ・コレクション対応のコンピューティング環境において、メモリ使用状態を管理するように構成されたコンピューティング・デバイスであって、
プロセッサと、
少なくとも仮想マシン・プログラムを含む、前記プロセッサと通信するメモリとを含み、前記仮想マシン・プログラムは少なくとも、
複数のアプリケーションによって使用されるメモリ・プールを確保するステップであって、前記アプリケーションはそれぞれ、前記メモリ・プールからメモリを動的に確保し、前記メモリ・プールにメモリを動的に戻すこともできる、前記確保するステップと
前記メモリ・プールにおいて使用することのできるメモリの前記サイズが、所定のサイズに達した場合、ガベージ・コレクタ・プロセスを始動し、ガベージ・コレクション・サイクルを行わせるステップと、
各ガベージ・コレクション・サイクル中に、前記メモリ・プールから使用することのできるメモリの前記サイズを監視するステップと、
監視された、前記メモリ・プールから使用することのできるメモリの前記サイズに基づいて、２回以上のガベージ・コレクション・サイクルにわたる前記メモリ・プールから使用することのできる前記メモリの変化の特性を示すメモリ使用状況プロファイルを生成するステップと、
前記メモリ使用状況プロファイルに基づいて、メモリ不足例外が発生するおそれがあるか否かを予測するステップとを、
行うことによって、将来、メモリ不足例外が発生するおそれのある時期を予測するように構成されている、コンピューティング・デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は全般に、コンピュータ・ソフトウェアの分野に関する。特に、本発明は、仮想マシンにおいて、メモリの使用状態を管理する方法及びシステムに関する。
【背景技術】
【０００２】
一般に、コンピュータ・ソフトウェア・アプリケーションは、サーバまたはクライアント・コンピュータに配置されるものである。アプリケーションには、仮想マシンが提供する環境内で実行されるものもある。仮想マシンは、様々な方法で実現され得るコンピューティング・デバイスの抽象仕様を提供するものである。仮想マシンによって、コンピュータ・プログラムまたはアプリケーションは、基盤となるハードウェアに関わらず、いかなるコンピュータ・プラットフォーム上においても稼働することができるようになる。仮想マシンのバージョンが利用可能であれば、基盤となるいかなるコンピュータ・システム上においても、仮想マシン向けにコンパイルされたアプリケーションを実行することができる。仮想マシンは通常、ハードウェアよりもむしろソフトウェアとして実現され、「実行環境」と呼ばれることが多い。また、仮想マシン向けにコンパイルされたソース・コードは通常、「バイトコード」と呼ばれる。一般的に、仮想マシンは、バイトコードから命令を生成することによって、アプリケーションを実行する。生成された命令はその後、基盤となるコンピュータ・システム上で利用可能な物理的なプロセッサによって実行してもよい。
【０００３】
周知の仮想マシンの一例としては、サン・マイクロシステムズ（Ｓｕｎ（Ｒ）Ｍｉｃｒｏｓｙｓｔｅｍｓ）から入手可能なＪａｖａ（Ｒ）仮想マシンがある。Ｊａｖａ（Ｒ）仮想マシンは、バイトコード命令セット、レジスタ群、スタック、ガベージ・コレクション対応ヒープ（すなわち、ユーザ・アプリケーション用のメモリ領域）、及びメソッドを格納するメモリ領域から成る。Ｊａｖａ（Ｒ）プログラミング言語で記述されたアプリケーションはコンパイルされ、バイトコードが生成される。バイトコードは、Ｊａｖａ（Ｒ）仮想マシンによって解釈されるプラットフォームに依存しないコードを提供する。
【０００４】
実際には、通常、システム上で稼働している仮想マシンの各インスタンス用として、メモリ・プールをコンピュータ・システムが確保している。仮想マシンがアプリケーション・プログラムを実行するのに応じて、メモリ・プールから使用することのできるメモリは時間とともに増加したり、減少したりする場合がある。これは、アプリケーション・プログラムがメモリ・プールからメモリ・オブジェクトを確保したり、また解放したりするため発生する。場合によっては、仮想マシン上で稼働しているアプリケーションは、使用可能なメモリよりも大きなメモリを確保しようとすることもある。例えば、アプリケーションが使用するメモリが、仮想マシンに対して確保されたメモリのサイズを超える場合があったり、あるいは、仮想マシンが基盤となるホスト・システムから使用可能なメモリを使い尽くしてしまう場合もある。この状況が起こった場合、「メモリ不足（ｏｕｔ  ｏｆ  ｍｅｍｏｒｙ）」例外が発生する。このようなメモリ不足例外により、アプリケーション、仮想マシン、あるいは基盤となるシステムがクラッシュしてしまうこともある。クラッシュの結果として、アプリケーションが提供するサービスが機能しなくなったり、保存されていないデータが失われたり、さらにはユーザが介入してシステムまたはアプリケーションを再起動しなければならない場合もある。
【０００５】
メモリ不足例外の発生を防止するアプローチの一つとして、ガベージ・コレクション・プロセスの使用がある。ガベージ・コレクションとは、使用されなくなったメモリを自動的に検出し、解放することを指す。例えば、Ｊａｖａ（Ｒ）仮想マシンでは、プログラマが明示的にオブジェクト及び他のデータを解放しなくてもよいように、ガベージ・コレクションが行われる。実際には、メモリ使用状況を監視し、所定の割合のメモリが使用されたときに、ガベージ・コレクタを呼び出し、任意のアプリケーションが必要としなくなったメモリを回収するように、仮想マシンを構成してもよい。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
仮想マシン上で稼働中のアプリケーションからメモリを回収するプロセスをガベージ・コレクション・サイクルという。ガベージ・コレクションの一方法としては、「トレーシング」が知られている。トレーシングでは、ガベージ・コレクタはメモリ・オブジェクトが「到達可能である」か、すなわち「ルートに関連付けられている」かを判断する。システム内の他のオブジェクトがメモリ・オブジェクトを参照している場合、該メモリ・オブジェクトは到達可能であるとみなされる。稼動中のどのプロセスもメモリ・オブジェクトを参照していない場合、該メモリ・オブジェクトは「到達不可能」であるとみなされ、ガベージ・コレクションの候補となる。ガベージ・コレクタは通常、到達不可能なメモリ・オブジェクトをヒープ（すなわち、ユーザ・アプリケーションがメモリを確保する際の、確保元となるメモリ領域）に戻し、仮想マシン上で稼働中のアプリケーション用のメモリを解放する。しかしながら、たとえガベージ・コレクタを用いたとしても、アプリケーションが仮想マシンから使用可能なメモリをすべて消費してしまう場合もあり、この結果、「メモリ不足」例外が発生することもある。
【０００７】
また、別のメモリ管理アプローチとしては、システム管理者にメモリ使用状況を監視させるものがある。現在のところ、システム管理者が、システム上で稼働している仮想マシンの各インスタンスをポーリングしてメモリ使用状況を求め、メモリ・リークが起きていそうなところをそれぞれ特定する。「メモリ・リーク」とは、時間の経過とともに未使用メモリが減少していく状況を説明するのに用いられるプログラミング用語である。通常、メモリ・リークは、プログラムがメモリを確保し、不必要となったときに確保されたメモリを戻し（あるいは、解放し）損ねている場合に、発生する。十分な時間が経過した場合、過剰なメモリ・リークによってプログラム障害が発生する場合もある。しかしながら多くの場合、メモリ・リークを検出することは難しい。特に、リークしているメモリのサイズが小さい場合、あるいは多くのアプリケーションが同時に実行されているような複雑な環境下でメモリ・リークが発生している場合、メモリ・リークを起こしている単一のアプリケーションを特定することは難しくなる。さらに、該アプローチでは、システム管理者がメモリ使用状況のステータスを監視しなければならないので、時間がかかり、かつエラーが起こりやすい。さらに、頻繁に一貫して行わない限り、システム管理者は、メモリ・リークを検出し損なう場合もある。
【０００８】
このように、当業界では、ガベージ・コレクション対応環境において、メモリ使用状況を管理する方法が必要とされている。
【課題を解決するための手段】
【０００９】
本発明は全般に、メモリ不足例外が発生するおそれのある時期を予測する方法、コンピュータ読み取り可能な媒体、及びコンピュータ・システムに関する。
【００１０】
本発明の一実施形態によると、コンピュータにより実現され、ガベージ・コレクション対応のコンピューティング環境において、メモリの使用状態を管理する方法が提供される。該方法は、通常、複数のガベージ・コレクション・サイクルの各サイクル中に、複数のアプリケーションがメモリ・プールから使用することのできるメモリのサイズを監視するステップを含み、アプリケーションはそれぞれ、メモリ・プールからメモリを動的に確保し、メモリ・プールにメモリを動的に戻すこともできる。さらに、該方法は通常、２回以上のガベージ・コレクション・サイクルにわたるメモリ・プールから使用することのできるメモリの変化の特性を示すメモリ使用状況プロファイルを生成するステップと、メモリ使用状況プロファイルに基づいて、メモリ不足例外が発生するおそれがあるか否かを予測するステップとを含む。メモリ・プールで使用することのできるメモリのサイズが、所定のサイズに達した場合、ガベージ・コレクション・サイクルが始動される。
【００１１】
本発明の別の実施形態によると、プログラムを有するコンピュータ読み取り可能な媒体が提供される。該プログラムが実行された場合、ガベージ・コレクション対応のコンピューティング環境において、メモリ使用状態を管理する動作を行う。該動作は通常、複数のガベージ・コレクション・サイクルの各サイクル中に、複数のアプリケーションがメモリ・プールから使用することのできるメモリのサイズを監視するステップを含み、アプリケーションはそれぞれ、メモリ・プールからメモリを動的に確保し、メモリ・プールにメモリを動的に戻すこともできる。さらに、該動作は通常、２回以上のガベージ・コレクション・サイクルにわたるメモリ・プールから使用することのできるメモリの変化の特性を示すメモリ使用状況プロファイルを生成するステップと、メモリ使用状況プロファイルに基づいて、メモリ不足例外が発生するおそれがあるか否かを予測するステップとを含む。
【００１２】
本発明のさらに別の実施形態によると、コンピューティング・デバイスが提供される。該コンピューティング・デバイスは通常、プロセッサと、該プロセッサと通信するメモリとを有する。該メモリは、将来メモリ不足例外が発生するおそれのある時期を予測するように構成されている仮想マシンのプログラムを少なくとも含む。該仮想マシンのプログラムは少なくとも、複数のアプリケーションによって使用されるメモリ・プールを確保するステップを行うように構成されてもよく、アプリケーションはそれぞれ、メモリ・プールからメモリを動的に確保し、メモリ・プールにメモリを動的に戻すこともできる。さらに、ステップには、メモリ・プールから使用することのできるメモリのサイズが所定のサイズに達した場合、ガベージ・コレクタ・プロセスを始動し、ガベージ・コレクション・サイクルを行うステップを含むこともできる。さらに、ステップには、複数のガベージ・コレクション・サイクルの各サイクル中に、メモリ・プールから使用することのできるメモリのサイズを監視するステップと、２回以上のガベージ・コレクション・サイクルにわたるメモリ・プールから使用することのできるメモリの変化の特性を示すメモリ使用状況プロファイルを生成するステップと、メモリ不足例外が発生するおそれがあるか否かを予測するステップとを、含むこともできる。
【発明を実施するための最良の形態】
【００１３】
先に列挙した本発明の特徴が理解できるように、添付の図面に示された例示的な実施形態を参照して、先に簡潔に要約された本発明をより具体的に説明する。しかしながら、添付の図面は、本発明の典型的な実施形態のみを示したものであり、また本発明には同様に効果的な実施形態として認められるものが他にもあるであろうから、添付の図面は本発明の範囲を限定するものとしてみなされるべきものではないという点に留意されたい。
【００１４】
本発明の実施形態は、ガベージ・コレクション対応環境における仮想マシンのメモリ使用状況によって「メモリ不足」例外が発生する時期を予測する方法、システム、及び製品を提供する。
【００１５】
以下、本発明の実施形態について説明するが、本発明は、記載されている特定の実施形態に限定されるべきではないことを理解されたい。むしろ、別の実施形態に関連するにしろ、関連しないにしろ、以下の特徴及び構成要素の組み合わせはいかなるものも、本発明を実現及び実施するように意図されたものである。さらに、本発明の種々の実施形態は、先行技術に対して多くの利点を提供する。しかしながら、本発明の実施形態は、他の考えられる解決策または先行技術、あるいはその両方に優る利点を達成することができるが、特定の利点が任意の実施形態によって達成されるか否かという点は、本発明を限定するものではない。したがって、下記の態様、特徴、実施形態、及び利点は単に例示的なものにすぎず、特許請求の範囲に明示的に列挙されない限り、添付の特許請求の範囲の構成要素または限定としてみなされるものではない。同様に、「本発明」と書いてあっても、本明細書中で開示されている任意の発明の主題を一般化したものとして解釈されるべきものではなく、また、特許請求の範囲に明示的に列挙されない限り、添付の特許請求の範囲の構成要素または限定としてみなされるものではない。
【００１６】
本発明の一実施形態は、例えば、図１に図示の、以下に記載するコンピュータ・システムなどのコンピュータ・システム用のプログラム製品として実現される。プログラム製品のプログラムは、実施形態の機能（本明細書中に記載の方法も含む）を定義するものであり、種々の信号担持媒体に含めることができる。信号担持媒体の例としては、（ｉ）書き込み不可能な記憶媒体に永久に格納された情報（例えば、ＣＤ−ＲＯＭドライブにより読み取り可能なＣＤ−ＲＯＭディスクなどのコンピュータ内の読み取り専用メモリ・デバイス）、（ｉｉ）書き込み可能な記憶媒体に格納された可変情報（例えば、ディスケット・ドライブ内のフレキシブル・ディスクまたはハードディスク・ドライブ）、（ｉｉｉ）無線通信を含むコンピュータ・ネットワークまたは電話網などの通信媒体によって、コンピュータに伝達される情報があるが、これらに限定されない。以下の実施形態では、特にインターネット及び他のネットワークからダウンロードした情報が含まれる。これらの信号担持媒体は、本発明の機能を指示するコンピュータで読み取り可能な命令を担持している場合、本発明の実施形態に相当する。
【００１７】
一般に、本発明の実施形態を実現するために実行されるルーチンは、オペレーティング・システムの一部、あるいは特定のアプリケーション、コンポーネント、プログラム、モジュール、オブジェクト、命令シーケンスであってもよい。通常、本発明のコンピュータ・プログラムは、ネイティブ・コンピュータによって機械可読フォーマットつまり実行可能命令に翻訳される多数の命令から構成される。また、プログラムは、プログラム自体にローカルに存在するか、あるいはメモリまたは記憶装置で見られる変数及びデータ構造から構成される。さらに、以下に記載の種々のプログラムは、本発明の特定の実施形態において、アプリケーション用に実装されるが、それらは該アプリケーションに基づいて識別される。しかしながら、以下の特定のプログラム名称はいかなるものも便宜上用いられているにすぎないことを認識されたい。したがって、本発明は、このような名称によって識別または示唆される任意の特定のアプリケーション内での使用のみに限定されるべきではない。
【００１８】
図１は、本発明の一実施形態にしたがって構成されたコンピュータ・システム１００を示すブロック図である。例えば、コンピュータ・システム１００は、メモリ１０５及び中央処理装置（ＣＰＵ）１１５を有する。また、コンピュータ・システム１００は通常、不揮発性記憶装置、ネットワーク・インタフェース・デバイス、ディスプレイ、入出力装置などのコンポーネントもさらに有する。一実施形態において、コンピュータ・システム１００は、デスクトップ・コンピュータ、サーバ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータなどのコンピュータ・システムを含むこともできる。しかしながら、本明細書に記載のシステム及びソフトウェア・アプリケーションは、いかなる既存のコンピューティング環境またはプログラミング言語に限定されるものではなく、新たなコンピューティング環境及びプログラミング言語が利用可能になり次第、これらに適応させ、活用することもできる。
【００１９】
一実施形態において、１つ以上の仮想マシン１１０がメモリ１０５に存在する。コンピュータ・システム１００上で稼動する仮想マシン１１０はそれぞれ、該仮想マシン１１０向けに作成されたソフトウェア・アプリケーションを実行するように構成されている。例えば、仮想マシン１１０は、米サン・マイクロシステムズ社から入手可能なＪａｖａ（Ｒ）仮想マシン及び動作環境（あるいは、Ｊａｖａ（Ｒ）仮想マシン仕様に従って作成された同等の仮想マシン）であってもよい。本明細書では、Ｊａｖａ（Ｒ）仮想マシンを例として用いて本発明の実施形態を説明するが、本発明の実施形態は、いかなるガベージ・コレクション対応のアプリケーション環境において実現してもよい。
【００２０】
図２は、本発明の一実施形態に係る、アプリケーション２１０を実行する仮想マシン２２０の動作をさらに示すブロック図である。上述のように、ソフトウェア・アプリケーションはプログラミング言語を用いて記述され、コンパイラが、特定の仮想マシン２２０向けのバイトコードを生成するように構成するとよい。その後、仮想マシン２２０は、バイトコードからネイティブ命令２３０を生成することによって、アプリケーション２１０を実行すればよい。その後、ネイティブ命令をＣＰＵ１１５によって実行すればよい。
【００２１】
図３は、仮想マシン３００の一実施形態をさらに示すブロック図である。例えば、仮想マシン３００は、ガベージ・コレクタ３１５、メモリ使用状態プロファイラ３２０、及び使用可能なメモリ・プール３２５を有する。また、仮想マシン３００が複数のアプリケーション３０５１乃至３０５３を実行している様子が示されている。アプリケーション３０５１乃至３０５３は仮想マシン３００と関連するプログラミング言語（例えば、Ｊａｖａ（Ｒ）プログラミング言語）で記述され、仮想マシン３００で実行可能なバイトコードにコンパイルされる。一実施形態において、仮想マシン３００は、複数のアプリケーション３０５１乃至３０５３を同時に実行するように構成されていてもよい。したがって、図３には仮想マシン３００上で稼動する３つのアプリケーション３０５１乃至３０５３が示されているが、任意のタイミングで任意の数のアプリケーション３０５を仮想マシン３００上で実行することもできる。
【００２２】
アプリケーション３０５は、実行中にメモリ・プール３２５（例えば、ヒープ構造）からメモリを動的に確保することもできる。例えば、Ｊａｖａ（Ｒ）プログラミング言語では、実行時にヒープからメモリを確保するために用いられる「ｎｅｗ」演算子が提供されている。他のプログラミング言語においても、同様の構成が提供されている。オブジェクトがアプリケーション３０５に参照されなくなった場合、後続の新たなオブジェクトが使用できるように、オブジェクトが占有しているヒープ空間をリサイクルすることもできる。上述のように、ガベージ・コレクションとは、アプリケーション３０５に参照されなくなったオブジェクトに対して確保されているメモリを自動的に解放するプロセスである。
【００２３】
一実施形態において、ガベージ・コレクション・プロセスまたはガベージ・コレクション・サイクルを実行するように、ガベージ・コレクタ３１５を構成することができる。ガベージ・コレクション・サイクルを実行することによって、使用されていない（しかし、確保されている）メモリをリサイクルすることができる。オブジェクトが、ガベージ・コレクタ３１５によって「収集」されると、該オブジェクトに対して確保されているメモリはいかなるものもメモリ・プール３２５に戻される。上述のように、メモリ・プール３２５はヒープ構造を有し、アプリケーションはこのヒープ構造からメモリを確保することができる。したがって、ガベージ・コレクタがオブジェクトに対して確保されているメモリを「ごみ（ガベージ）」として回収する場合、メモリはヒープに戻される。
【００２４】
一実施形態において、メモリ・プール３２５のサイズは、仮想マシン３００の任意のインスタンス用に指定される固定パラメータを用いて決定される。本明細書中で使用されているように、メモリ・プール３２５のサイズをＭｍａｘとして表す。Ｊａｖａ（Ｒ）仮想マシンでは、Ｍｍａｘはメモリ・ヒープのサイズをバイトで定義している。アプリケーション３０５によって確保されたメモリがＭｍａｘを超える場合に、メモリ不足例外が発生する。アプリケーションに必要とされなくなったメモリをリサイクルするために、仮想マシン３００は、ガベージ・コレクタ３１５を起動するように構成されている。ガベージ・コレクション・サイクルは、Ｍｍａｘの所定の割合がアプリケーション３０５１乃至３０５３によって使用された場合にいつも始動されるように構成することができる。各ガベージ・コレクション・サイクルの間、ガベージ・コレクタ３１５はアプリケーション３０５１乃至３０５３に使用されなくなったメモリを解放しようとする。
【００２５】
一実施形態において、ガベージ・コレクタ３１５は、メモリ・プール３２５（例えば、ヒープ）内のメモリ・オブジェクトが将来アクセスされなくなる時期を内部的に予測することによって、メモリを解放する。各ガベージ・コレクション・サイクルの間、アプリケーション３０５の１つによって確保された各メモリ・オブジェクトを調査するように、ガベージ・コレクタ３１５を構成してもよい。将来、メモリ・オブジェクトがアクセスされる可能性がある場合（例えば、アプリケーション３０５が、該オブジェクトを参照している場合）、ガベージ・コレクタ３１５は該オブジェクトをそのままにしておく。将来、メモリ・オブジェクトがアクセスされないような場合（例えば、どのアプリケーション３０５も該オブジェクトを参照していない場合）、ガベージ・コレクタ３１５は、該オブジェクトに対して確保されたメモリをリサイクルし、メモリ・プール３２５に戻す。しかしながら、時には、アプリケーションが不必要となったオブジェクトを参照し続ける場合もある。この場合、ガベージ・コレクタ３１５は、このメモリを解放してメモリ・プール３２５に戻すことができない。
【００２６】
例えば、アプリケーションは、「メモリ・リーク」を起こすことがある。前述のように、「メモリ・リーク」とは、時間経過とともにメモリが減少していく状態を説明するために用いられるプログラミング用語である。「メモリ・リーク」は、アプリケーションがある程度のメモリを確保して、該メモリが不必要になったときにシステムに戻し損ねると、発生する。例えば、正常に動作するアプリケーションは、確保したメモリが必要なくなると、これを解放する。しかしながら、時には、メモリが不必要になったときに、アプリケーションが確保されたメモリを解放し損なう場合もある。アプリケーションが該メモリを参照し続けていると、そのために、ガベージ・コレクタは、ガベージ・コレクション・サイクル中に該メモリを回収することができなくなる。アプリケーションがメモリ・オブジェクトを確保し続け、これを解放しない場合、このようなプログラムはそのうち、仮想マシンに対して確保されたメモリすべてを消費してしまい、その結果、「メモリ不足例外」が発生する。
【００２７】
他にも多くの状況で、メモリ・リークは引き起こされる。例えば、リンク・リストまたはハッシュ・テーブルが、参照されているが不必要なオブジェクトを含む場合もある。別のメモリ・リークが発生するありがちな方法としては、Ｊａｖａ（Ｒ）プログラミング言語によって提供されるネイティブ・メソッドの使用がある。ネイティブ・コードでは、プログラマは、明示的にオブジェクトへのグローバル参照を作成することができる。グローバル参照は、それ自身が削除されない限り、ガベージ・コレクタによってリサイクルされない。したがって、プログラマがグローバル参照の削除を怠った場合、メモリ・リークが生じる場合がある。
【００２８】
図３には、メモリ使用状態プロファイラ３２０も示されている。メモリ使用状態プロファイラ３２０は、メモリ・プールからのメモリの使用状況に関するメモリ使用状況プロファイルを生成するように構成されるとよい。一実施形態において、メモリ使用状態プロファイラ３２０は、「メモリ不足」例外が発生するおそれがあるか否かを判断するように構成される。この場合、システム管理者または別のアプリケーションに予測される「メモリ不足」例外を警告したり、あるいは別の対応措置を行うように、メモリ使用状態プロファイラ３２０をさらに構成することもできる。図４乃至７を参照して、メモリ使用状態プロファイラ３２０の動作をさらに説明する。
【００２９】
まず、図４に、メモリ・プール３２５に関するメモリ使用状態プロファイルを作るためのメモリ使用状態プロファイラ３２０の動作を示す。一実施形態において、仮想マシン３００は、ガベージ・コレクタ３１５によって行われる各ガベージ・コレクション・サイクルの一部として、メソッド４００を起動する。ステップ４２０において、メモリ使用状態プロファイラ３２０はメモリ・プロファイル・データを収集する。例えば、メモリ使用状態プロファイラ３２０は、各アプリケーション３０５がメモリ・プール３２５から確保したメモリのサイズを求めてもよい。このようにして、各ガベージ・コレクション・サイクル中、メモリ使用状態プロファイラ３２０は、メモリ使用状況のスナップショットを取得することもできる。ステップ４３０において、メモリ使用状態プロファイラ３２０は、メモリ使用状況プロファイルを作るために十分な量のデータが集まったか否かを判断する。例えば、最低限のガベージ・コレクション・サイクルの回数にわたりメモリ使用状況データを収集し、その後メモリ使用状況プロファイルを作るように、メモリ使用状態プロファイラ３２０を構成してもよい。十分な量のデータが収集されていない場合、メモリ使用状態プロファイラ３２０はステップ４２０に戻り、後続のガベージ・コレクション・サイクルの間に、さらに多くのデータが収集されるのを待つ。十分な量のデータが収集された場合、ステップ４４０において、メモリ使用状態プロファイラ３２０はメモリ使用状況プロファイルを生成する。
【００３０】
一実施形態において、メモリ・プロファイルとは、仮想マシン３００、メモリ・プール３２５、及びアプリケーション３０５のメモリ使用状況を時間経過とともに表すデータ点の集合である。メモリ使用状態プロファイラ３２０は、メモリ使用状態データを十分に収集した後で、メモリ使用状況プロファイルを作るように構成してもよい。例えば、メモリ使用状態プロファイラ３２０は、各ガベージ・コレクション・サイクル中に収集したデータ点を用いて、回帰分析を行ってもよい。利用可能なデータ点が多くなるにつれて、回帰分析の精度は高くなる。しかしながら、他の適当な統計的手法を用いて、メモリ使用状況プロファイルを生成してもよい。
【００３１】
アプリケーション３０５の実際のメモリ使用状態に応じて、作成されたメモリ使用状況プロファイルは、線形あるいは指数関数的なメモリ使用状況プロファイルを示すこともある。しかしながら、メモリ使用状態は他の予測可能なパターンに従う場合もある。例えば、メモリ使用状態は、多項関数的あるいは正弦関数的なパターンに従う場合もある。特定のメモリ使用状況プロファイルに関係なく、メモリ使用状況プロファイルを使用して、仮想マシン３００上で稼動しているアプリケーション３０５の将来のメモリ使用状況が予測される。例えば、線形回帰を用いた場合、メモリ・プロファイル・データから生成された線形方程式は、アプリケーション３０５がメモリ・プール３２５から消費したメモリのメモリ消費レートを経時的に表す。この方程式が、アプリケーション３０５の使用メモリ量が一定して増加する様子を示している場合（例えば、メモリ使用状況を表す線形方程式の傾きが正の場合）、メモリ・オブジェクトを解放するというガベージ・コレクタ３１５の動作をよそに、「メモリ不足」例外が最終的に起こる場合もある。別の実施形態において、他の手法を用いてメモリ不足例外が起こり得る時期を予測してもよい。例えば、ニューラル・ネットまたは機械学習技術などのヒューリスティクスを用いて、メモリ使用状態プロファイル・データを分析してもよい。
【００３２】
ステップ４５０において、メモリ使用状態プロファイラ３２０は、メモリ使用状況データから作られたメモリ使用状況プロファイルに基づいて、「メモリ不足」例外が発生するおそれがあるか否かを判断する。メモリ不足例外が発生するおそれがあると判断された場合は、メモリ・リークが発生しているおそれがある。メモリ使用状況プロファイル及び仮想マシンで使用可能なメモリの最大容量Ｍｍａｘを用いて、メモリ使用状態プロファイラ３２０は、「メモリ不足」例外が発生するおそれがある時期を予測することができる。メモリ不足例外が予測される場合、ステップ４６０において、システム管理者に対してメッセージを送信し、予測された「メモリ不足」例外が発生するおそれがある時期を通知するようにメモリ使用状態プロファイラ３２０を構成することができる。「メモリ不足」例外が予測されない場合は、ステップ４７０において、メソッド４００は終了する。
【００３３】
メモリ使用状況プロファイル及びメモリ使用状態プロファイラ３２０の構成に応じて、種々の対応措置を行うことができる。例えば、メモリ・リークによって線形増加パターンが示されている場合、当面は重大な問題にならない場合もある。この場合、メモリ使用状態プロファイラ３２０は、単に自動電子メール・メッセージによってシステム管理者に通知する。あるいは、メモリ・リークによって指数関数的増加パターンが示されていると、仮想マシン３００のクラッシュが差し迫っている場合がある。この場合、システム管理者に連絡するためにより積極的なステップ（例えば、インスタント・メッセージまたは携帯電話の呼び出し）を行うように、メモリ使用状態プロファイラ３２０を構成してもよい。あるいは、メモリ使用状態プロファイラ３２０に、仮想マシン３００上で稼動しているプロセスを終了する権限を与え、メモリ・リークを引き起こしているアプリケーションを犠牲にして、他のアプリケーション３０５が機能し続けることができるようにすることもできる。あるいは、仮想マシンに対して確保されるメモリのサイズの増加を要求するように構成してもよい。これにより、「メモリ不足」例外が発生するまでの時間を遅らせることができる。
【００３４】
また、「メモリ不足」イベントが発生するおそれがあるか否かという予測（あるいは、その時期）についての信頼性レベルを算出するように、メモリ使用状態プロファイラ３２０を構成してもよい。一実施形態において、収集されたメモリ・プロファイル・データの量または質を用いて信頼性レベルを求めるように、メモリ使用状態プロファイラ３２０を構成することもできる。例えば、周知の統計的手法を用いて、データ点セットと回帰分析によって生成された線形方程式との相関度合いを求めてもよい。しかしながら、いかなる適当な統計的手法をも用いることができる。予測精度が指定された閾値を超える場合にのみ、「メモリ不足」予測を送る（あるいは、別の対応措置を行う）ように、メモリ使用状態プロファイラ３２０を構成することもできる。
【００３５】
図５は、本発明の一実施形態に係る、メモリ使用状況プロファイル生成するためにメモリ使用状態プロファイラ３２０が行うメソッド５００を示す。メソッド５００は、ステップ５１０において開始し、ステップ５２０に進む。アプリケーション３０５を実行しながら、ステップ５２０において、仮想マシン３００は仮想マシン環境のメモリを監視する。例えば、メモリ・プール３２５に残っている空き領域のサイズを監視するように、仮想マシン３００を構成してもよい。ステップ５３０において、仮想メモリ３００は、メモリの使用状況を監視しながら、空きメモリがＭｍａｘの所定の割合を下回っているか否かを判断する。
【００３６】
空きメモリが所定の割合を下回っている状況が発生すると、仮想マシン３００はガベージ・コレクタ３１５によって行われるガベージ・コレクション・サイクルを始動させる。上述のように、ガベージ・コレクタ３１５は、アプリケーション３０５によって確保されたメモリ・オブジェクトを調べ、確保されているメモリの一部をリサイクル、すなわち「解放」し、メモリ・プール３２５に戻す。これにより、仮想マシン３００が「メモリ不足」例外に陥らないようにする。しかしながら、状況によって、ガベージ・コレクタ３１５が、確保されている（不要な）メモリ・オブジェクトを仮想マシンに戻すことができない場合もある。例えば、アプリケーション３０５のうちの１つが「メモリ・リーク」を起こしている場合がある。すなわち、アプリケーション３０５が、自身が必要としなくなったメモリをメモリ・プール３２５へ戻し損ねている場合である。アプリケーション３０５が確保されたメモリを参照し続けている場合、ガベージ・コレクタ３１５は該メモリをメモリ・プール３２５に戻すことができない。さらに、アプリケーション３０５がメモリ・オブジェクトを確保し続けると、やがて仮想マシンに割り当てられたメモリＭｍａｘをすべて消費する場合があり、これにより「メモリ不足」例外が発生する。
【００３７】
メモリ使用状況が、Ｍｍａｘの所定の割合を上回っていない場合、メソッド５００はステップ５２０にとどまる。メモリ使用状況がこの閾値を上回ると、ステップ５４０において、仮想マシン３００は、ガベージ・コレクタ３１５によって行われるガベージ・コレクション・サイクルを始動させる。各ガベージ・コレクション・サイクルの実行後、メモリ使用状態プロファイラ３２０は、メモリ・プール３２５からアプリケーション３０５に対して確保されたメモリのサイズを求めることができる。本明細書で用いられているように、このメモリのサイズは、変数「ｇ」によって表される。ガベージ・コレクション・サイクル完了後、メモリ使用状況プロファイルを作るために用いられるデータ点を格納しているテーブルに「ｇ」を格納してもよい。データ・テーブルの一例を図６に示す。別の実施形態において、ガベージ・コレクタ３１５によって行われる各ガベージ・コレクション・サイクルの前にメモリ使用状況プロファイル・データを収集するように、メモリ使用状態プロファイラ３２０を構成することもできる。
【００３８】
状況に応じて、ステップ５６０では、メモリ使用状態プロファイラ３２０が、メモリ・プール３２５から使用可能なメモリの総サイズ、すなわちＭｍａｘから、確保されているメモリのサイズ、すなわち、「ｇ」を引くことによって、メモリ・プール３２５の空きメモリ、すなわち未使用メモリのサイズを算出する。本明細書中では、この値は、変数「ａｍ」（「ａｖａｉｌａｂｌｅ  ｍｅｍｏｒｙ」の略）によって表される。「ａｍ」の値は、仮想マシン３００に対して確保されたメモリ・ヒープのサイズが時間とともに変化するような実施形態において有用となる場合がある。別の形態においては、ガベージ・コレクション・サイクル毎に「ａｍ」の値は算出されず、その代わり、必要に応じてＭｍａｘの値と「ｇ」の値から動的に算出するように構成してもよい。「ａｍ」の値が算出された場合、ステップ５６０において、メモリ使用状態プロファイラ３２０は「ａｍ」の値をメモリ使用状況プロファイル・テーブルに記録する。ガベージ・コレクション・サイクルが完了し、メモリ使用状況データを記録した後で、メソッド５００は、ステップ５７０において終了する。
【００３９】
図６は、メモリ・プロファイル・データ・テーブル６００の一実施形態を示す。メモリ・プロファイル・データ・テーブル６００には、収集されたメモリ・プロファイル・データの行がいくつか含まれる。各行６２０１乃至６２０Ｎは複数のデータ要素を含み、これらのデータ要素はテーブル６００の列に格納されている。各行６２０１乃至６２０Ｎは、ガベージ・コレクタ３１５によって行われるガベージ・コレクション・サイクル１サイクル中に収集されたメモリ・プロファイル・データを表す。列６０５には、仮想マシン３００がガベージ・コレクタ３１５を始動し、ガベージ・コレクション・サイクルを行わせた時間が含まれる。列６１０には、各ガベージ・コレクション・サイクル後に仮想マシンによって使用されているメモリのサイズ、すなわち「ｇ」の値が含まれる。「ａｍ」の値が算出される場合、列６１５には、メモリ・プール３２５から使用可能な空きメモリのサイズ、すなわち「ａｍ」の値が含まれる。列６１５の値は、Ｍｍａｘからｇを引いて算出される。
【００４０】
図７は、本発明の一実施形態に係る、仮想マシンにおけるメモリ使用状況プロファイルのグラフ７００を示す。グラフ７００は、図６のメモリ・プロファイル・データの値から作ってもよい。例えば、二次元のグラフ７００は、時間を表す横軸７１０と、メモリ使用状況を表す縦軸７０５とを有する。これら２つの軸の間に、仮想マシン３００の任意のインスタンスのメモリ使用状況を表す実線７５５がある。
【００４１】
仮想マシン３００のインスタンスが最初に始動され、アプリケーションの実行が開始されたときに、該アプリケーションは、メモリ・プール３２５から急速なペースでメモリを確保する場合が多い。これは、初期化期間７４５の実線７５５の傾きが急な部分によって示されている。初期化期間７４５以降、仮想マシン３００のメモリ使用は頭打ちになる。状況によっては、仮想マシン３００及びアプリケーション３０５は、メモリ・プール３２５から使用可能なメモリすべてを消費することはない場合もある。しかしながら、アプリケーション３０５がメモリ・リークを起こしている場合、グラフ７００に示されるとおり、メモリ・リーク期間７５０に漸増傾向の傾きを持つ実線７５５のように、メモリ使用状態は次第に増加する。
【００４２】
仮想マシン３００のメモリ使用状態が、Ｍｍａｘの所定の割合に達すると、ガベージ・コレクタ３１５がガベージ・コレクション・サイクルを行い、現在アプリケーション３０５に対して確保されているメモリの一部をリサイクルしようとする。例えば、ガベージ・コレクタ３１５は、時間「Ｔ１」において最初に実行される。同時に、使用メモリのサイズ「Ｇ１」７２５がテーブル６００に記録される。時間Ｔ２において、ガベージ・コレクタ３１５は第２のガベージ・コレクション・サイクルを行い、メモリ使用状態プロファイラ３２０はプロファイル・データ点「Ｇ２」を収集し、この値をテーブル６００に格納する。ガベージ・コレクション・サイクルを複数回行った後、メモリ使用状況プロファイルが現れはじめる。図示されているように、メモリ使用状況プロファイルは実線７５５によって表されている。この図中では、仮想マシン３００にメモリ・リークが起こっている。
【００４３】
メモリ使用状態プロファイラ３２０は、各ガベージ・コレクション・サイクル中に収集されたデータ点を用いて、仮想マシン３００の将来のメモリ使用状況を求める。メモリ使用状況の予測グラフは、点線７６０を用いてグラフにプロットされている。これは、予測される仮想マシン３００のメモリ使用状況を表している。仮想マシン３００が使用することのできる最大メモリサイズは既知（すなわち、Ｍｍａｘ７４０）であるため、メモリ使用状況プロファイルを用いて、仮想マシン３００で「メモリ不足」例外が起こる時期を求めることができる。すなわち、実線７５５とＭｍａｘ７４０を表す横線との交点が、仮想マシン３００で「メモリ不足」例外が起こる時点に相当する。グラフ上では、該交点の時間はＴＦＡＩＬＵＲＥ７３５として表示されている。上述のように、この「メモリ不足」例外の予測時間ＴＦＡＩＬＵＲＥ７３５をシステム管理者にメッセージの形式で送信することができる。
【００４４】
このように、本発明の実施形態は、「メモリ不足」例外が発生するおそれがある時期を予測する方法を提供する。例えば、ガベージ・コレクタが行う各ガベージ・コレクション・サイクル中に、メモリ使用状況データを収集することができる。このように収集されたデータ点セットを用いて、メモリ使用状態プロファイラは、メモリ使用状況が安定しているか、一定の速度で増加しているか、あるいは指数関数的速度で増加しているかを判断する。メモリ・リークの深刻度及び予測される増加速度に応じて、種々の対応措置をとってもよい。
【００４５】
これにより、システム管理者は必要に応じて介入し、進行中のメモリ・リークによってシステムの動作が妨げられないようにする。同時に、システム管理者は、このようなメモリ・リークを検出するために、ガベージ・コレクション対応環境におけるメモリ使用状況を定期的に監視する必要はなく、自由に別のタスクに集中できる。
【００４６】
以上、前述の内容は、本発明の実施形態を対象としたものであるが、本発明の基本的な範囲から逸脱することなく、本発明の更に別の実施形態を考え出すこともできる。また、本発明の範囲は、添付の特許請求の範囲によって画定される。
【図面の簡単な説明】
【００４７】
【図１】仮想マシンを実行させるコンピュータ・システムの一実施形態を示すブロック図である。
【図２】本発明の一実施形態に係る、アプリケーションを実行する仮想マシンを示すブロック図である。
【図３】仮想マシンの一実施形態を示すブロック図である。
【図４】本発明の一実施形態に係る、メモリ不足イベントの発生時期を予測するメソッドを示すフローチャートである。
【図５】本発明の一実施形態に係る、メモリ・プロファイルを作成するためのデータを収集するメソッドを示すフローチャートである。
【図６】メモリ・プロファイル・データ・テーブルの一実施形態を示す。
【図７】メモリ・プロファイラによって収集されるデータを表したグラフの一例である。
【符号の説明】
【００４８】
１００  コンピュータ
１０５  メモリ
１１０  仮想マシン
１１５  ＣＰＵ
２１０  アプリケーション
２２０  仮想マシン
２３０  ネイティブ命令
３００  仮想マシン
３０５１、３０５２、３０５３  アプリケーション
３１５  ガベージ・コレクタ
３２０  メモリ使用状態プロファイラ
３２５  メモリ・プール
【図１】
2007157131.tif 000003
【図２】
2007157131.tif 000004
【図３】
2007157131.tif 000005
【図４】
2007157131.tif 000006
【図５】
2007157131.tif 000007
【図６】
2007157131.tif 000008
【図７】
2007157131.tif 000009