(57)【要約】【課題】仮想マシン（「ＶＭ」）の内部動作を監視するシステムおよび方法を提供すること。【解決手段】ＶＭは、プログラムを解釈し実行する働きをする。ＶＭの動作中、ＶＭの内部動作に関するステータス情報が、内部メモリのバッファに格納される。このステータス情報はその後、ＶＭの動作中に、ＶＭの内部動作をＶＭの外部の視点から監視するために、内部メモリのバッファから取り出される。【選択図】図２
2006202279.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシンを、プログラムを解釈して実行するように動作させるステップと、
前記仮想マシンの動作中に、前記仮想マシンの内部動作に関するステータス情報を、前記仮想マシンの内部メモリのバッファに格納するステップと、
前記仮想マシンの動作中に、前記仮想マシンの外部から前記仮想マシンの内部動作を監視するために、前記内部メモリのバッファから前記ステータス情報を取り出すステップと
を備えたことを特徴とする方法。
【請求項２】
前記仮想マシンはＪａｖａ（登録商標）仮想マシンを含み、前記プログラムはＪａｖａ（登録商標）バイトコードを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記ステータス情報を前記内部メモリのバッファに格納するステップは、Ｊａｖａ（登録商標）アプリケーションプログラミングインターフェイス（「ＡＰＩ」）を介して、前記内部メモリのバッファにアクセスするステップを含むことを特徴とする請求項２に記載の方法。
【請求項４】
前記Ｊａｖａ（登録商標）仮想マシンはアプリケーションサーバインスタンス内に含まれ、前記プログラムはクライアント要求を処理するための企業向けアプリケーションを含むことを特徴とする請求項２に記載の方法。
【請求項５】
前記プログラムの実行中に作成されたオブジェクトをヒープに格納するステップと、
自動ガベージコレクタを用いて、前記プログラムによって参照されなくなった前記オブジェクトをガベージ収集するステップと
をさらに備え、前記仮想マシンの前記ステータス情報を前記内部メモリのバッファに格納するステップは、ガベージ収集アクティビティの情報を前記内部メモリのバッファに格納するステップを含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記ガベージ収集アクティビティの情報は、前記ガベージ収集の実行時間、ガベージ収集イベントの数のカウント、前記ヒープから収集された前記オブジェクトの数、および前記ヒープ内の利用可能なメモリの量のうちの少なくとも１つを含むことを特徴とする請求項５に記載の方法。
【請求項７】
前記仮想マシンの前記内部メモリのバッファから前記ステータス情報を取り出すステップは、
前記ステータス情報を取り出すために、前記仮想マシンの外部の仮想マシンモニタを実行するステップと、
ネイティブアプリケーションプログラミングインターフェイス（「ＡＰＩ」）を介して、前記仮想マシンにアクセスするステップと、
前記ネイティブＡＰＩを介して、前記仮想マシンモニタに前記ステータス情報を取り出して渡すステップと
を含むことを特徴とする請求項１に記載の方法。
【請求項８】
前記ステータス情報を取り出すために、前記仮想マシンに解釈されないネイティブのマシンコードを有する前記仮想マシンモニタを呼び出すステップと、
前記ステータス情報を、監視コンソール上で表示するために前記監視コンソールに通信するステップと
をさらに備えたことを特徴とする請求項７に記載の方法。
【請求項９】
前記仮想マシンの障害が発生した後に、前記障害を調査するために、前記内部メモリのバッファにアクセスするステップをさらに備えたことを特徴とする請求項７に記載の方法。
【請求項１０】
前記仮想マシンのコンポーネントから前記ステータス情報の少なくとも一部分を専用に収集する仮想マシン監視プログラムを、前記仮想マシン上で解釈し実行するステップと、前記一部分を前記内部メモリのバッファに格納するステップとをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項１１】
マシンによって実行されると、前記マシンに、
プログラムを仮想マシン上で解釈するステップと、
前記仮想マシン内からの前記仮想マシンのステータス情報を生成するステップと、
前記プログラムの解釈中に、前記仮想マシンのステータス情報を、前記仮想マシンの内部メモリのバッファに格納するステップと、
前記仮想マシンの外部から前記仮想マシンの内部動作を監視するために、前記内部メモリのバッファ内に格納された前記ステータス情報にアクセスするステップと
を備えた動作を実行させる命令を提供することを特徴とするマシンアクセス可能媒体（ｍａｃｈｉｎｅ−ａｃｃｅｓｓｉｂｌｅ  ｍｅｄｉｕｍ）。
【請求項１２】
前記仮想マシンは、Ｊａｖａ（登録商標）仮想マシンを含み、前記プログラムは、Ｊａｖａ（登録商標）バイトコードを含むことを特徴とする請求項１１に記載のマシンアクセス可能媒体。
【請求項１３】
前記ステータス情報を前記内部メモリのバッファに格納するステップは、Ｊａｖａ（登録商標）アプリケーションプログラミングインターフェイス（「ＡＰＩ」）を介して、前記内部メモリのバッファにアクセスするステップを含むことを特徴とする請求項１２に記載のマシンアクセス可能媒体。
【請求項１４】
前記Ｊａｖａ（登録商標）ＡＰＩは、前記仮想マシンに障害が発生した場合、前記内部メモリのバッファを破損から隔離することを特徴とする請求項１３に記載のマシンアクセス可能媒体。
【請求項１５】
前記仮想マシンの前記ステータス情報を生成するステップは、前記ステータス情報を取得するために前記仮想マシンのサブエンティティ内に埋め込まれた監視コードを実行するステップを含み、前記ステータス情報を前記内部メモリのバッファに格納するステップは、前記ステータス情報を前記内部メモリのバッファに格納するために前記監視コードを実行するステップを含むことを特徴とする請求項１１に記載のマシンアクセス可能媒体。
【請求項１６】
前記マシンによって実行されると、前記マシンに、
前記監視コードの実行を、ヒープマネジャおよび入出力システムのうちの１つを含む前記サブエンティティのプログラムコードの実行と交互に配置するステップをさらに備えた動作を実行させる命令を提供することを特徴とする請求項１５に記載のマシンアクセス可能媒体。
【請求項１７】
前記マシンによって実行されると、前記マシンに、
前記プログラムによって作成されたオブジェクトをヒープに格納するステップと、
自動ガベージコレクタを用いて、前記プログラムによって参照されなくなった前記オブジェクトをガベージ収集するステップとをさらに備えた動作を実行させる命令を提供するマシンアクセス可能媒体であって、
前記仮想マシンの前記ステータス情報を前記内部メモリのバッファに格納するステップは、ガベージ収集アクティビティの情報を前記内部メモリのバッファに格納するステップを含むことを特徴とする請求項１１に記載のマシンアクセス可能媒体。
【請求項１８】
前記ガベージ収集アクティビティの情報は、前記ガベージ収集の実行時間、ガベージ収集イベントの数のカウント、前記ヒープから収集された前記オブジェクトの数、および前記ヒープ内の利用可能なメモリの量のうちの少なくとも１つを含むことを特徴とする請求項１７に記載のマシンアクセス可能媒体。
【請求項１９】
前記仮想マシンの外部から前記ステータス情報にアクセスするステップは、
前記仮想マシンの外部にある仮想マシンモニタを実行するステップと、
ネイティブアプリケーションプログラミングインターフェイスへの関数呼出しを介して、前記内部メモリのバッファから前記ステータス情報を取り出すステップと
を含むことを特徴とする請求項１１に記載のマシンアクセス可能媒体。
【請求項２０】
アプリケーションサーバ（「ＡＳ」）インスタンスを実行するサーバノードであって、前記ＡＳインスタンスは、
仮想マシン上でプログラムを解釈し、
前記仮想マシン内からの前記仮想マシンのステータス情報を生成し、
前記プログラムの解釈中に、前記仮想マシンの前記ステータス情報を前記仮想マシンの内部メモリのバッファに格納し、および
前記仮想マシンの外部から前記仮想マシンの内部動作を監視するために前記内部メモリのバッファ内に格納された前記ステータス情報にアクセスするための、プロセッサによって実行可能なロジックを含むサーバノードを
備えたことを特徴とするシステム。
【請求項２１】
前記仮想マシンは、Ｊａｖａ（登録商標）２  Ｅｎｔｅｒｐｒｉｓｅ  Ｅｄｉｔｉｏｎ仕様に準拠したＪａｖａ（登録商標）仮想マシンを含み、前記プログラムは、Ｊａｖａ（登録商標）プログラムを含むことを特徴とする請求項２０に記載のシステム。
【請求項２２】
前記仮想マシンの前記ステータス情報を生成するための、前記プロセッサによって実行可能なロジックは、前記Ｊａｖａ（登録商標）プログラムによって参照されなくなったオブジェクトによって消費されたヒープのメモリを再要求するために実行される自動ガベージコレクタ内に埋め込まれた、監視コードを含むことを特徴とする請求項２１に記載のシステム。
【請求項２３】
監視コンソールを実行するクライアントノードであって、前記監視コンソールは、
ステータスクエリを前記サーバノードに送り、
前記ステータスクエリに応答して、前記ステータス情報を前記サーバノードから受け取り、および
前記ステータス情報を表示するための、プロセッサによって実行可能なロジックを含むクライアントノードを
さらに備えたことを特徴とする請求項２１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示の技術は、一般に仮想マシンに関し、それだけには限らないが詳細には、仮想マシンの内部動作の監視に関する。
【背景技術】
【０００２】
企業向けソフトウェアにより、大企業、中小企業を問わず、様々な企業の日々の取引を行い管理する方法が変化してきている。企業は、企業向けソフトウェア（たとえば、ウェブベースのアプリケーションサーバなど）を使用して、生産計画、仕入れおよび物流、倉庫および在庫管理、生産、ベンダ管理、顧客サービス、財務、人材管理、およびその他の基本的な企業活動を管理している。企業向けソフトウェア産業が成熟し続けるに従って、様々なアプリケーションおよびハードウェア資源が、そうした１組の様々な仕事を円滑に進めるために投入され、堅牢で高度に統合化されたソリューション（たとえば、ＳＡＰ  ＮｅｔＷｅａｖｅｒ、ＳＡＰ  ｘＡＰＰｓ、ｍｙＳＡＰ  Ｂｕｓｉｎｅｓｓ  Ｓｕｉｔｅなど）に融合されてきている。
【０００３】
企業向けソフトウェアの開発者は、様々なハードウェアおよびソフトウェア資源を統合するため、プラットフォームの依存性を最小限に抑え、さらにはエンタープライズソリューションから切り離すこともできるクロスプラットフォーム型エンジンを利用している。Ｊａｖａ（登録商標）２  Ｐｌａｔｆｏｒｍ，Ｅｎｔｅｒｐｒｉｓｅ  Ｅｄｉｔｉｏｎ（商標）（「Ｊ２ＥＥ」）（たとえば、Ｊ２ＥＥ仕様バージョン１．４）は、Ｊａｖａ（登録商標）仮想マシン（ＪＶＭ）エンジンによってサポートされる、Ｊａｖａ（登録商標）ベースのソリューションである。Ｊ２ＥＥは、アプリケーション開発を簡略にし、標準化された再利用可能なモジュールコンポーネントを作成することによって、プログラミングおよびプログラマで必要な訓練を少なくすることができる。情報技術（ＩＴ）の世界ではＪａｖａ（登録商標）言語が中心的なものなっていることから、Ｊａｖａ（登録商標）ベースのソリューションの需要も、明らかに高くなっている。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
企業向けソフトウェアは、近代ビジネスの骨組みに組み入れられているので、エンタープライズソリューションが失敗すると、もはや単にそれだけでは済まされず、ビジネスが破滅的な混乱を被る可能性がある。したがって、堅牢で信頼性のあるソフトウェアが常に、極めて重要である。企業向けソフトウェア産業は、人間の介入なしに持続可能な途切れない動作が可能な、自己回復型の（ｓｅｌｆ−ｈｅａｌｉｎｇ）ソフトウェアという最終目標に向かって進んでいる。この目標を追求するなかで、ＩＴ技術者は、自身の企業向けソフトウェアの動作状態を監視できる便利なツールの恩恵を受けることができる。もしも適切な監視ツールがあれば、ＩＴ技術者は、適時に、自身のソフトウェアの動作状態を健全に保ち、あるいは働きの悪いアプリケーションを突き止め、常習的な攻撃者を回避するための適切な措置をとることもできる。しかし、現在ＪＶＭは、それ自体の内部動作を実時間ベースで監視する適切な機構を提供していない。
【課題を解決するための手段】
【０００５】
仮想マシン（「ＶＭ」）の内部動作を監視するシステムおよび方法が開示される。ＶＭは、プログラムを解釈し実行する働きをする。ＶＭの動作中、ＶＭの内部動作に関するステータス情報が、内部メモリのバッファに記憶される。このステータス情報はその後、ＶＭの動作中に、ＶＭの内部動作をＶＭの外部の視点（ｖａｎｔａｇｅ  ｐｏｉｎｔ）から監視するために、内部メモリのバッファから取り出される。一態様では、ＶＭは、Ｊａｖａ（登録商標）ＶＭである。
【０００６】
一態様では、ステータス情報は、プログラム内に埋め込まれた監視コードを実行することにより蓄積される。監視コードの実行を、そのプログラムのプログラムコードの実行と交互に配置することもできる。
【０００７】
プログラムの実行中は、オブジェクトが作成され、ヒープに格納される。オブジェクトがプログラムによって参照されなくなったときは、自動ガベージコレクタが、その参照されなくなったオブジェクトを消去する。一実施形態では、ステータス情報は、ガベージ収集アクティビティの情報を含む。
【０００８】
一態様では、ステータス情報を内部メモリのバッファ内から取り出すために、ネイティブＶＭモニタが呼び出される。次いで、その取り出したステータス情報を、監視コンソール上で表示するために、監視コンソールに通信することができる。
【０００９】
一態様では、ＶＭ監視プログラムが、ＶＭ上で解釈され、実行される。このＶＭ監視プログラムは、ＶＭのコンポーネントからステータス情報の少なくとも一部分を収集すること専用であり、ステータス情報のその部分を内部メモリのバッファに格納する。
【００１０】
一態様では、内部メモリのバッファは、ＶＭの障害から隔離されている。ＶＭに障害が発生した場合は、その障害後に内部メモリのバッファにアクセスして、なぜＶＭが障害が発生したかに関する事後分析調査（ｐｏｓｔｍｏｒｔｅｍ  ｉｎｖｅｓｔｉｇａｔｉｏｎ）を行うことができる。
【００１１】
本発明の態様は、上述の特徴の全部または一部を含むことができる。上記の特徴は、コンピュータプログラム、方法、システム、または装置、あるいはコンピュータプログラム、方法、またはシステムの任意の組合せを使用して実装することができる。本発明の１つまたは複数の態様に関するこれらおよびその他の詳細は、添付の図面および以下の記載で詳しく述べる。
【発明を実施するための最良の形態】
【００１２】
本発明の非限定的かつ非網羅的な実施形態を、添付の図面を参照して説明する。添付の図面では、同じ参照番号は、別段の指定がない限り、様々な図の全体を通して同じ部分を指している。
【００１３】
本明細書では、仮想マシン（「ＶＭ」）の内部動作を監視するシステムおよび方法に関する実施形態を説明する。図１は、本発明の一実施形態による仮想マシン（「ＶＭ」）１０５の内部動作を監視するシステム１００のブロック図である。システム１００の図示した実施形態は、ＶＭ１０５と、プログラム１１０と、監視コンソール１１５とを備える。これら３つのプログラム１１０をＶＭ１０５上で動作するプログラムとして示すが、より多くのまたはより少ないプログラム１１０を、時間多重化方式で同時に動作させることもできる。
【００１４】
ＶＭ１０５は、１つまたは複数のプログラム１１０を解釈し実行して、出力結果１２０を生成する。ＶＭ１０５は、プログラム１１０を、解釈対象の中間言語（ｉｎｔｅｒｍｅｄｉａｔｅ  ｉｎｔｅｒｐｒｅｔｅｄ  ｌａｎｇｕａｇｅ）（たとえば、バイトコード）からネイティブの機械語に変換することによって解釈してプログラム１１０を実行する。一実施形態では、ＶＭ１０５は、Ｊａｖａ（登録商標）ＶＭ（「ＪＶＭ」）であり、プログラム１１０は、Ｊａｖａ（登録商標）のバイトコードにコンパイルされたＪａｖａ（登録商標）プログラムである。本発明の実施形態は、オブジェクト指向のＪａｖａ（登録商標）プログラミング言語に関連して説明しているが、本明細書に記載の技術は、他の解釈されるタイプの言語、およびそれらの言語を解釈し実行するのに使用されるＶＭにも等しく適用可能である。
【００１５】
ＶＭ１０５の動作中、ＶＭ１０５は、実時間のステータス情報１２５を、監視コンソール１１５上で表示するため、監視コンソール１１５に供給することができる。ステータス情報１２５は、プログラム１１０を解釈し実行している間の、ＶＭ１０５の内部動作に関する詳細な動作情報を提供することができる。情報技術（「ＩＴ」）分野の技術者は、単に監視コンソール１１５上に表示されたステータス情報１２５に目を通して、ＶＭ１０５が健全な状態で動作しているか、障害が発生しそうか、あるいはそうでないのかを判定することができる。さらに、ＶＭ１０５が障害／クラッシュした後、ステータス情報１２５にアクセスして、障害原因に関する事後分析調査を行うことができる。
【００１６】
ステータス情報１２５を、監視コンソール１１５によって発行されるステータスクエリ１３０に応答して、監視コンソール１１５に「プル（ｐｕｌｌ）」することができ、あるいは監視コンソール１１５に「プッシュ（ｐｕｓｈ）」することもできる。ステータス情報１２５の監視コンソール１１５へのプッシュにより、イベントによってトリガする（ｅｖｅｎｔ  ｔｒｉｇｇｅｒｅｄ）か、または周期的にトリガする（ｐｅｒｉｏｄｉｃａｌｌｙ  ｔｒｉｇｇｅｒｅｄ）ことができる。監視コンソール１１５は、ＶＭ１０５を実行する同じハードウェアマシンにローカルで配置することができ、あるいは通信可能に結合されたリモートマシン上で実行することもできる点で有利である。ステータス情報１２５としては、それだけに限らないが、ガベージ収集アクティビティ、ヒープステータス、実行アクティビティ、スレッドアクティビティ、プログラムアクティビティなどを含め様々なデータを挙げることができる。
【００１７】
図２は、本発明の一実施形態による、ステータス情報１２５をＶＭ１０５の内部動作を監視する外部エンティティに供給することができるＶＭ１０５を含むソフトウェアシステム２００を示すブロック図である。ソフトウェアシステム２００の図示した実施形態は、オペレーティングシステム２０５（たとえば、Ｗｉｎｄｏｗｓ（登録商標）、Ｌｉｎｕｘ、Ｕｎｉｘ（登録商標）、ＭＳ−ＤＯＳ、ＯＳ／４００、ＯＳ／３９０など）と、ネイティブラッパ２１０と、ＶＭ１０５と、ネイティブＶＭモニタ２１５とを備える。
【００１８】
ネイティブラッパ２１０は、ＶＭ１０５の実行時環境を提供する。実施形態において、ＶＭ１０５は、Ｊａｖａ（登録商標）２  Ｐｌａｔｆｏｒｍ，  Ｅｎｔｅｒｐｒｉｓｅ  Ｅｄｉｔｉｏｎ（商標）（「Ｊ２ＥＥ」）（たとえば、Ｊ２ＥＥ仕様バージョン１．４）に準拠したＪＶＭであり、ネイティブラッパ２１０は、しばしば「ＪＬａｕｎｃｈ」と呼ばれる。ネイティブラッパ２１０は、ＯＳ２０５によって実行され管理されるネイティブのマシンコード（たとえば、コンパイルされたＣ＋＋）である。ネイティブラッパ２１０は、起動されると、それ自体の内部にＶＭ１０５を確立する。
【００１９】
動作中、図示した実施形態のＶＭ１０５は、内部メモリのバッファ２２０と、内部アプリケーションプログラミングインターフェイス（「ＡＰＩ」）２２５と、ネイティブＡＰＩ２３０と、ヒープ２３５と、ヒープマネジャ２３７と、ガベージコレクタ２４０と、入出力（Ｉ／Ｏ）システム２４３と、ＶＭ１０５によって現在実行されている様々なタスク（たとえば、プログラム１１０、ガベージコレクタ２４０など）に関する情報を維持する複数のスレッド２４５とを備える。図２では、図２が込み合わないように、また本発明が不明瞭にならないように、すべての実行可能なエンティティのスレッド２４５を図示してはいない。内部メモリのバッファ２２０は、ＶＭ１０５が、動作中にＶＭ１０５の様々な内部コンポーネントから収集したステータス情報１２５を格納するのに使用する。内部ＡＰＩ２２５は、ＶＭ１０５の様々な内部コンポーネントが内部メモリのバッファ２２０にアクセスできるようにする。ＶＭ１０５がＪＶＭであるような実施形態において、内部ＡＰＩ２２５は、「Ｊａｖａ（登録商標）ＡＰＩ」と呼ばれる。ネイティブＡＰＩ２３０は、ＶＭ１０５の外部のエンティティが、外部の視点からＶＭ１０５の内部動作を監視するために、内部メモリのバッファ２２０に、したがってステータス情報１２５にアクセスできるようにする。ネイティブＡＰＩ２３０によって、ネイティブＶＭモニタ２１５などネイティブのマシンコードエンティティが、ＶＭ１０５自体で解釈および実行されることなく、内部メモリのバッファ２２０にアクセスすることが可能になる。図２には、ネイティブＶＭモニタ２１５を、ネイティブラッパ２１０の内部にあるものとして示してあるが、いくつかの実施形態においては、ネイティブＶＭモニタ２１５がネイティブラッパ２１０の外部にあってもよい。
【００２０】
ヒープ２３５は、ＶＭ１０５によって、後にプログラム１１０およびＶＭ監視プログラム２５０（以下で詳述する）がロードされるときにそれらによって使用される、予め確保されたメモリプールとして確立される。ヒープ２３５は、プログラム１１０の要求通りにメモリの割付け／割付け解除を行い、プログラム１１０（またはＶＭ監視プログラム２５０）によって作成されたオブジェクト２５５を格納するため、ＶＭ１０５のヒープマネジャ２３７によって管理される。
【００２１】
プログラム１１０をオブジェクト指向プログラム（たとえば、Ｊａｖａ（登録商標）プログラム）とする実施形態において、プログラム１１０は一般に、オブジェクトおよびクラスを含む。ＶＭ１０５によってプログラム１１０がロードされ実行されると、オブジェクト２５５が、作成され、その後ヒープ２３５に格納される。クラスは、タスクを実行し、それらのタスクを完了したときに情報を返すメソッドを含む。オブジェクトは、ソフトウェアプログラムの部分を属性および振舞いに関してモデル化し、実質的に再利用可能なソフトウェアコンポーネントである。クラスは、それらの属性および振舞いを用いてオブジェクトをインスタンス化するのに使用される。言い換えれば、各オブジェクト２５５は、個々のオブジェクト２５５をインスタンス化する（たとえば、作成する）のに使用されるクラスから、各々の属性および振舞いを継承する。
【００２２】
プログラム１１０が、ヒープ２３５をオブジェクト２５５で一杯にすることにより消費するに従って、新しいオブジェクトを受け入れるために利用可能なヒープ２３５内のメモリが、不足してくることもある。したがって、ガベージコレクタ２４０は、消費されたメモリをヒープ２３５に返却するための精巧な手続き（ｄｉｓｃｉｐｌｉｎｅｄ  ｐｒｏｃｅｄｕｒｅ）を実装する。一実施形態では、ガベージコレクタ２４０は、プログラム１１０のプログラマによる明示的な命令なしに動的に割り付けられたメモリを再要求するため、ＶＭ１０５によって自動的に実行される。ヒープ２３５内のオブジェクト２５５の１つが参照されなくなったときは、その特定のオブジェクト２５５が、ガベージコレクションの対象としてマークされる。次いで、そのマークされたオブジェクト２５５によって消費されたメモリが、ガベージコレクタ２４０を実行するときに再要求される。ヒープ２３５内の利用可能なメモリが不足してきたときに定期的なガベージコレクションを行うことは、リソース漏出を防止するのに役立つ。
【００２３】
しかし、ヒープ２３５内の利用可能なメモリが不足してきたときは、ＶＭ１０５のパフォーマンスが、ガベージ収集アクティビティの故に悪化する。たとえば、ヒープ２３５が８０％の容量を超えると、ガベージコレクタ２４０のガベージ収集アクティビティによって、ＶＭ１０５の生産的なコンピューティング出力（たとえば、図１の出力結果１２０、）が、停止寸前の状態になることもある。ガベージコレクタ２４０は、消費されたメモリを再要求するために参照されなくなったオブジェクト２５５を削除することは比較的うまく行うが、様々な理由のために、使用されていないオブジェクト２５５がすべて回収されるわけではない。したがって、ＶＭ１０５は、古くなればなるほど、慢性的にガベージ収集アクティビティに悩まされる可能性が高くなる。
【００２４】
一実施形態では、ＶＭ１０５の様々なエンティティに、ステータス情報１２５の少なくとも一部分を蓄積／生成し、ステータス情報１２５のその部分を内部メモリのバッファ２２０にコピーする監視コードが「計装（ｉｎｓｔｒｕｍｅｎｔｅｄ）」される。監視コードの実行は、そのエンティティの通常のプログラムコードの実行と交互に配置する（ｉｎｔｅｒｌｅａｖｅ）こともできる。ステータス情報１２５のうちの監視コードによって蓄積／生成される部分としては、各エンティティの処理の開始および終了時間、エンティティを実行する各スレッド２４５の処理の実行時間、特定のエンティティによって作成されるオブジェクト２５５の数、エンティティによって消費されるメモリ量などを挙げることができる。各エンティティを、個々のエンティティの動作および実行に関する様々なステータス情報１２５を蓄積し、かつ／または生成するように計装することができる。それらのエンティティとしては、ガベージコレクタ２４０、ヒープマネジャ２３７、入出力システム２４３などを挙げることができる。それらの各エンティティに計装される監視コードは、ＶＭ１０５内で利用可能な膨大な量のステータス情報の少なくとも一部分を収集し、それを内部メモリのバッファ２２０に記録する（ｒｅｐｏｒｔ）目的がある。
【００２５】
一実施形態では、ガベージコレクタ２４０に、ステータス情報１２５の少なくとも一部分を蓄積／生成し、ステータス情報１２５のその部分を内部メモリのバッファ２２０にコピーする監視コード２６５が計装される。監視コード２６５の実行を、ガベージコレクタ２４０の定期的なガベージ収集アクティビティの実行と交互に配置することもできる。一実施形態では、監視コード２６５は、ガベージ収集イベントに応答して実行される。ステータス情報１２５のうちの監視コード２６５によって蓄積／生成される部分は、様々なガベージ収集に関する情報を含んでいる。このガベージ収集に関する情報としては、たとえば、ガベージコレクタ２４０によって実行されるガベージ収集イベントのタイムスタンプおよび実行時間、ガベージ収集イベントのカウント、各ガベージ収集イベント中にヒープ２３５から収集されるオブジェクト２５５の数のカウント、各ガベージ収集イベント中に再要求されるヒープ２３５内のメモリの量、ヒープ２３５内の利用可能なメモリの量、要求元（たとえば、プログラム１１０）によるヒープ２３５内でのオブジェクト２５５のヒット率、ヒープ２３５の利用率（ｕｔｉｌｉｚａｔｉｏｎ）などを挙げることができる。さらに、監視コード２６５は、内部メモリのバッファ２２０内での最近のガベージ収集イベントの履歴を維持し、上記のガベージ収集に関する情報の一部または全部に、各ガベージ収集イベントのインデックスを付けるができる。
【００２６】
一実施形態では、ＶＭ監視プログラム２５０を、ステータス情報１２５を収集し、ステータス情報１２５を内部メモリのバッファ２２０にコピーすることを主目的として、ＶＭ１０５上で解釈し、実行することができる。ＶＭ監視プログラム２５０を、監視処理を行うためだけに設けることができる。ＶＭ監視プログラム２５０は、先に述べた上記のステータス情報１２５のいずれかまたは全部、ならびに他の監視情報を収集／生成することができる。タスクの監視専用の独立したプログラムを作成することにより、プログラム１１０およびガベージコレクタ２４０が設計されてから時間が経っても、プログラム１１０およびガベージコレクタ２４０を更新する必要なく、監視プログラムを作成することが可能となる。ＶＭ監視プログラム２５０により、開発者が、専用の監視プログラムを生成して、ＶＭ１０５および／またはプログラム１１０が作成され公にリリースされるまで明らかとならないＶＭ１０５、またはプログラム１１０内の問題または「バグ」を調査することが可能になる。実際、多くのソフトウェア問題は、ソフトウェアの構築が大口ユーザベースにリリースされるまで明らかにならない。したがって、ＶＭ監視プログラム２５０を、プログラム１１０および／またはＶＭ１０５のαテストを支援するように設計することができ、あるいはプログラム１１０および／またはＶＭ１０５のβリリースに含めることさえできる。ＶＭ監視プログラム２５０は、ＶＭ１０５上で実行される監視コードを実装するための効果的な機構を提供するが、この監視コードは後に開発される。
【００２７】
監視コード２６５およびＶＭ監視プログラム２５０を含め、この監視コードは、内部メモリのバッファ２２０にアクセスして、内部ＡＰＩ２２５を介してそこにステータス情報１２５をコピーする。一実施形態では、内部ＡＰＩ２２５は、関数呼出しの使用によって、内部メモリのバッファ２２０へのアクセスを抽象化する。ステータス情報１２５を内部メモリのバッファ２２０にコピーしようとするＶＭ１０５の各コンポーネントは、内部ＡＰＩ２２５によりＶＭ１０５の内部で公開されている１つまたは複数の関数の「呼出し（ｃａｌｌ）」を行い、蓄積／生成されたステータス情報１２５を、その呼び出された関数に渡す。呼び出された関数は次に、ステータス情報１２５を内部メモリのバッファ２２０内の適当なスロットまたは位置にコピーする。
【００２８】
ネイティブＶＭモニタ２１５は、ＶＭ１０５の内部動作を監視するために内部メモリのバッファ２２０にアクセスすることを要求する、様々な外部エンティティ（たとえば、監視コンソール１１５）用のプロキシとして働く。一実施形態では、ネイティブＶＭモニタ２１５は、ステータス要求１３０を受け取り、それに応答してステータス情報１２５またはその一部分を供給する（ｓｅｒｖｅ  ｕｐ）ことができる。その代わりにあるいはそれに加えて、ネイティブＶＭモニタ２１５は、監視コンソール１１５とレポーティングコントラクト（ｒｅｐｏｒｔｉｎｇ  ｃｏｎｔｒａｃｔ）を調整して（ｎｅｇｏｔｉａｔｅ）、ステータス要求１３０を必要とすることなく、定期的または周期的にステータス情報１２５を供給することができる。したがって、ネイティブＶＭモニタ２１５が、ステータス情報１２５を監視コンソール１１５にプッシュすることも、監視コンソール１１５が、ステータス情報１２５をネイティブＶＭモニタ２１５からプルすることもできる。
【００２９】
内部メモリのバッファ２２０へのアクセスを、内部ＡＰＩ２２５を用いて抽象化することにより、内部メモリのバッファ２２０の内容が、残りのＶＭ１０５から隔離され、保護される。ＶＭ１０５がクラッシュし、無限ループに入り、あるいは障害が発生した場合でも、ステータス情報２２０を依然として破損から保護し、維持することができる。ネイティブＡＰＩ２３０は、ネイティブコードを使用して実行されるので、ＶＭ１０５によって解釈されず、実行されない。したがって、ＶＭ１０５に障害が発生した場合でも、ネイティブＶＭモニタ２１５は依然として、ＶＭ１０５に障害が発生する直前に更新された最新のステータス情報１２５を取得するため、内部メモリのバッファ２２０にアクセスすることができる。したがって、内部メモリのバッファ２２０の内容を、事後分析調査を行うために取り出して、ＶＭ１０５の障害原因を判定することができる。
【００３０】
図３は、本発明の一実施形態による、ＶＭ１０５の内部動作を監視するプロセス３００を示すフローチャートである。プロセスブロック３０５で、プログラム１１０が、ＶＭ１０５上で解釈され、実行される。Ｊａｖａ（登録商標）の実施形態において、プログラム１１０は、リアルタイムに解釈され、ネイティブのマシンコードに変換されるＪａｖａ（登録商標）バイトコードである。次いでその変換されたマシンコードが実行される。
【００３１】
プログラム１１０の実行中、監視コードは、特定のプログラム１１０の動作、その特定のプログラム１１０によるリソースの消費、およびＶＭ１０５の他の内部動作に関するステータス情報１２５を用いて、内部メモリのバッファ２２０を更新する（プロセスブロック３１０）。上述したように、監視コードを、ＶＭ１０５内の様々なサブエンティティのプログラムコードと交互に配置した形で実行してもよい。一実施形態では、監視コードは、内部ＡＰＩ２２５への関数呼出しを介して内部メモリのバッファ２２０にアクセスし、収集／生成されたステータス情報１２５をその呼び出された関数に渡す。
【００３２】
プログラム１１０が実行されるとき、オブジェクト２５５が、作成され、ヒープ２３５に格納される（プロセスブロック３１５）。ヒープ２３５が新しいオブジェクト２５５を格納するのに利用可能なメモリを有する限り、プログラム１１０は、必要に応じて新しいオブジェクト２５５を実行し、作成し続ける。ただし、ヒープ２３５が容量に近づき、新しいオブジェクト２５５を受け入れるために利用可能なヒープ２３５内のメモリが不足してきた場合（判断ブロック３２０）には、プロセスブロック３２５に進む。
【００３３】
プロセスブロック３２５で、ガベージコレクタ２４０は、自動ガベージコレクションを実行して、参照されなくなったオブジェクト２５５を削除し、ヒープ２３５内の消費されたメモリを再要求する。上述したように、監視コード２６５は、ガベージ収集イベントに応答して、ガベージ収集情報を含むステータス情報１２５を用いて内部メモリのバッファ２２０を更新する（プロセスブロック３３０）。一実施形態では、監視コード２６５は、内部ＡＰＩ２２５への関数呼出しを介して内部メモリのバッファ２２０にアクセスする。
【００３４】
プロセスブロック３３５で、ネイティブＶＭモニタ２１５は、ネイティブＡＰＩ２３０を介して、内部メモリのバッファ２２０からステータス情報１２５の一部または全部を取り出す。一実施形態では、ネイティブＶＭモニタ２１５は、ネイティブＡＰＩ２３０への関数呼出しを介して内部メモリのバッファ２２０にアクセスする。プロセスブロック３４０で、取り出されたステータス情報１２５が、監視コンソール１１５に送出される。上述したように、ステータス情報１２５を、監視コンソール１１５にプッシュすることができ、あるいはステータス要求１３０を送ることによりネイティブＶＭモニタ２１５からプルすることもできる。監視コンソール１１５を、ＶＭ１１５を実行している同じハードウェア上で実行することができ、あるいはネットワークまたは他の通信媒体を介してネイティブＶＭモニタ２１５と通信可能に結合されたリモートハードウェア上で実行することもできる。
【００３５】
図４は、本発明の実施形態を実装するための例示的な企業環境４００を示すブロック図である。図示した実施形態の企業環境４００は、クライアントノード４１０からのサービス要求と結合されたクラスタ４０５を備える。クラスタ４０５は、各々１つまたは複数のアプリケーションサーバ（「ＡＳ」）インスタンス４１７と、メッセージサーバ４２２に対応したメッセージサーバノード４２０と、データベース４２７に対応したデータベースノード４２５と、ウェブディスパッチャ４３０に対応した１つまたは複数のサーバノード４１５を備えることができる。
【００３６】
ＡＳインスタンス４１７を、たとえばＳＡＰ社のＷｅｂ  ＡＳや、マイクロソフト社の．ＮＥＴなどのウェブアプリケーションサーバとしてもよい。各ＡＳインスタンス４１７は、プログラム１１０を実行するための１つまたは複数のＶＭ１０５を含むことができる。ＡＳインスタンス４１７内のＶＭ１０５によって実行されるプログラム１１０は、ＡＳインスタンス４１７の様々な副層（たとえば、ビジネス層、インテグレーション層、プレゼンテーション層など）を実装するロジックを一括して提供することができる。分かりやすいように、また本発明が不明瞭にならないように、ＡＳインスタンス４１７の様々なコンポーネントが図４から除外されていることを理解されたい。一実施形態では、ＶＭ１０５は、Ｊａｖａ（登録商標）プログラムが実行できるように、Ｊ２ＥＥ仕様に準拠したＪＶＭとしてもよい。一実施形態では、ＶＭ１０５は、．ＮＥＴプログラムが実行できるように、マイクロソフト社の．ＮＥＴ  ｆｒａｍｅｗｏｒｋに準拠したものでもよい。ＡＳインスタンス４１７は、さらにはＪ２ＥＥ仕様と．ＮＥＴ  ｆｒａｍｅｗｏｒｋの両方に準拠するＶＭ１０５を含むこともできる。
【００３７】
ウェブディスパッチャ４３０は、クライアントノード４１０からのサービス要求をクラスタ４０５内のサーバノード４１５の間で分散させる、ロードバランシング機構を実装する。たとえば、ウェブディスパッチャ４３０は、ラウンドロビン式のロードバランシング機構などを実装することができる。ウェブディスパッチャ４３０を、クラスタ４０５のサーバノード４１５の間でサービス要求をディスパッチするタスクを有するサーバノード４１５のうちの１つ、あるいはスタンドアロン型のハードウェアノードとしてもよい。サービス要求は、サーバノード４１５によって処理され、その後データベースノード４２５に供給される。データベースノード４２５が、要求されたデータをサーバノード４１５に提供し、次にサーバノード４１５が、その結果をクライアントノード４１０上で表示するために処理してフォーマット化する。各ＡＳインスタンス４１７は、それに割り当てられたサービス要求をその個々のＶＭ１０５の間で分散させる固有のディスパッチャ機構をさらに備えることができる。
【００３８】
ＶＭ１０５がＪＶＭである実施形態では、プログラム１１０は、クライアントノード４１０上でのグラフィカルユーザインターフェイス（「ＧＵＩ」）を生成するためのサーバ側ロジックを提供するサーブレットとしてもよく、またＧＵＩ内で動的なコンテンツを提供するためのＪａｖａ（登録商標）Ｓｅｒｖｅｒ  Ｐａｇｅ（「ＪＳＰ」）の拡張版をさらに備えていてもよい。プログラム１１０はさらに、Ｅｎｔｅｒｐｒｉｓｅ  Ｊａｖａ（登録商標）Ｂｅａｎ（「ＥＪＢ」）のビジネスロジックを提供するビジネスアプリケーション、およびクライアント側ロジックを提供するアプレットなどを備えていてもよい。
【００３９】
クライアントノード４１０の１つは、ＡＳインスタンス４１７の遠隔監視、特に各ＶＭ１０５の遠隔監視を行うために、監視コンソール１１５を実行することができる。ＩＴ技術者は、ＶＭ１０５の１つのヒープ利用率が低いこと、過剰にガベージ収集アクティビティが生じていることなどに気付いた場合は、問題のあるＶＭ１０５をリセットすることを含め適切な措置をとることができる。
【００４０】
図５は、ＶＭ１０５、ソフトウェア環境２００、プロセス３００のいずれかを実行するための、あるいはクライアントノード４１０、サーバノード４１５、メッセージサーバノード４２０、またはデータベースノード４２５のいずれかを実装するための例示的な処理システム５００を示すブロック図である。処理システム５００の図示した実施形態は、１つまたは複数のプロセッサ（または中央処理装置）５０５と、システムメモリ５１０と、不揮発性（「ＮＶ」）メモリ５１５と、ＤＳＵ５２０と、通信リンク５２５と、チップセット５３０とを備える。図示の処理システム５００は、デスクトップコンピュータ、ノート型コンピュータ、ワークステーション、ハンドヘルドコンピュータ、サーバ、ブレードサーバなどを含む、任意のコンピューティングシステムとすることができる。
【００４１】
処理システム５００の各要素は、以下のように相互接続される。プロセッサ５０５は、チップセット５３０を介して命令あるいはデータをそこに／そこから送り、あるいは受け取るため、システムメモリ５１０、ＮＶメモリ５１５、ＤＳＵ５２０、および通信リンク５２５と結合して通信可能となる。一実施形態では、ＮＶメモリ５１５は、フラッシュメモリ装置である。他の実施形態では、ＮＶメモリ５１５は、読取り専用メモリ（「ＲＯＭ」）、プログラム可能なＲＯＭ、消去およびプログラム可能なＲＯＭ（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、電気的消去およびプログラム可能なＲＯＭ（ｅｌｅｃｔｒｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）などのうちのいずれか１つを含む。一実施形態では、システムメモリ７１０としては、ランダムアクセスメモリ（「ＲＡＭ」）、たとえばダイナミックＲＡＭ（「ＤＲＡＭ」）、シンクロナスＤＲＡＭ（「ＳＤＲＡＭ」）、ダブルデータレート方式ＳＤＲＡＭ（ｄｏｕｂｌｅ  ｄａｔａ  ｒａｔｅ  ＳＤＲＡＭ：「ＤＤＲ  ＳＤＲＡＭ」）、スタティックＲＡＭ（「ＳＲＡＭ」）などが挙げられる。ＤＳＵ５２０は、ソフトウェアデータ、アプリケーション、および／またはオペレーティングシステム用の任意の記憶装置を表すが、最も典型的には、不揮発性記憶装置である。ＤＳＵ５２０は、任意選択で、「ＩＤＥ」（ｉｎｔｅｇｒａｔｅｄ  ｄｒｉｖｅ  ｅｌｅｃｔｒｏｎｉｃ：統合デバイスエレクトロニクス）ハードディスク、「ＥＩＤＥ」（ｅｎｈａｎｃｅｄ  ＩＤＥ：拡張ＩＤＥ）ハードディスク、「ＲＡＩＤ」（ｒｅｄｕｎｄａｎｔ  ａｒｒａｙ  ｏｆ  ｉｎｄｅｐｅｎｄｅｎｔ  ｄｉｓｋｓ：独立ディスク冗長配列）、「ＳＣＳＩ」（ｓｍａｌｌ  ｃｏｍｐｕｔｅｒ  ｓｙｓｔｅｍ  ｉｎｔｅｒｆａｃｅ：小型コンピュータシステムインターフェイス）ハードディスクなどのうちの１つまたは複数を含むことができる。ＤＳＵ５２０を、処理システム５００の内部にあるものとして示してあるが、処理システム５００と外部的に結合させてもよい。通信リンク５２５は、処理システム５００がそのネットワークを介して１つまたは複数の他のコンピュータと通信できるように、処理システム５００をネットワークに結合することができる。通信リンク５２５は、モデム、イーサネット（登録商標）カード、ギガビットイーサネット（登録商標）カード、ユニバーサルシリアルバス（「ＵＳＢ」）ポート、無線ネットワークインターフェイスカード、光ファイバインターフェイスなどを含むことができる。
【００４２】
分かりやすくするために、処理システム５００の他の様々な要素が、図５およびここでの議論から除外されていることを理解されたい。たとえば、処理システム５００は、グラフィックスカード、追加のＤＳＵ、他の永続的データ記憶装置（ｐｅｒｓｉｓｔｅｎｔ  ｄａｔａ  ｓｔｏｒａｇｅ  ｄｅｖｉｃｅｓ）（たとえば、テープドライブ）などをさらに含むことができる。チップセット５３０も、メモリコントローラハブ、入出力（「Ｉ／Ｏ」）コントローラハブなどのサブコンポーネントを相互接続するためのシステムバスおよび他の様々なデータバス、ならびに周辺装置をチップセット５３０に接続するためのデータバス（たとえば、周辺機器相互接続バス（ｐｅｒｉｐｈｅｒａｌ  ｃｏｍｐｏｎｅｎｔ  ｉｎｔｅｒｃｏｎｎｅｃｔ  ｂｕｓ））を含むことができる。したがって、処理システム５００は、図示した要素の１つまたは複数がない場合でも動作することができる。たとえば、処理システム５００は、必ずしもＤＳＵ５２０を含む必要はない。
【００４３】
本明細書の全体を通して、「一実施形態」または「ある実施形態」という表現は、その実施形態に関して記載される特定の機能、構造、または特徴が、本発明の少なくとも１つの実施形態に含まれることを意味する。したがって、本明細書の全体にわたる様々な箇所において、「一実施形態では」または「ある実施形態において」という表現があるが、それらのすべてが、必ずしも同じ実施形態に言及しているわけではない。さらに、個々の機能、構造、または特徴を、１つまたは複数の実施形態において適当な任意の形で組み合わせることもできる。
【００４４】
上記で説明したプロセス３００は、コンピュータソフトウェアおよびハードウェアに関して記載されている。ここに記載した技術は、マシン（たとえば、コンピュータ）読取可能な媒体（ｍａｃｈｉｎｅ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）内で実装されるマシン実行可能な命令（ｍａｃｈｉｎｅ−ｅｘｅｃｕｔａｂｌｅ  ｉｎｓｔｒｕｃｔｉｏｎｓ）を構成することができ、その命令がマシンによって実行されると、マシンがここに記載した動作を実行する。さらに、プロセス３００を、たとえば特定用途向け集積回路（「ＡＳＩＣ」）などのハードウェア内に実装することもできる。プロセスブロックの一部または全部がプロセス３００で出てくる順序は、限定的なものと見なされるべきではない。むしろ、本明細書を開示される当業者なら、そのプロセスブロックのいくつかが、例示されていない様々な順序で実行できることを理解するであろう。
【００４５】
本発明の図示した実施形態に関する上記の記載は、要約書に記載したことも含めて、網羅的なものではなく、また本発明をここに開示した通りの形態に限定するものでもない。上記のいくつかの例では、ある種の態様が不明瞭になるのを防ぐために、よく知られた構造、材料、または動作は示さず、あるいは詳細に説明していない。本明細書では、例示のために本発明の特定の実施形態および例を記載しているが、当業者には理解されるように、本発明の範囲内で様々な等価な変更形態が可能である。
【００４６】
上記の詳細な説明を参照して、本発明にそれらの変更を加えることができる。特許請求の範囲で使用する用語は、本発明をこの明細書および特許請求の範囲に開示した特定の実施形態に限定するものと解釈されるべきではない。むしろ、本発明の範囲は完全に、特許請求の範囲によって決定されるべきであり、その特許請求の範囲は、確立されたクレーム解釈論に従って解釈されるべきである。
【図面の簡単な説明】
【００４７】
【図１】本発明の一実施形態による、仮想マシン（「ＶＭ」）の内部動作を監視するシステムのブロック図である。
【図２】本発明の一実施形態による、ＶＭを監視する外部エンティティに内部ステータス情報を供給することができるＶＭを含むソフトウェアシステムを示すブロック図である。
【図３】本発明の一実施形態による、ＶＭの内部動作を監視するプロセスを示すフローチャートである。
【図４】本発明の実施形態を実施するための例示的な企業環境を示すブロック図である。
【図５】本発明の実施形態を実施するための例示的な処理システムを示す図である。
【符号の説明】
【００４８】
１０５  仮想マシン
１１０  プログラム
１１５  監視コンソール
１２０  出力結果
１２５  ステータス情報
１３０  ステータスクエリ
２０５  オペレーティングシステム
２１０  ネイティブラッパ（たとえば、ＪＬＡＵＮＣＨ）
２１５  ネイティブＶＭモニタ
２２０  内部メモリのバッファ
２２５  内部ＡＰＩ
２３０  ネイティブＡＰＩ
２３５  ヒープ
２３７  ヒープマネジャ
２４０  ガベージコレクタ
２４３  入出力システム
２４５  スレッド
２５０  ＶＭ監視プログラム
２５５  オブジェクト
４０５  クラスタ
４１７  ＡＳインスタンス
４２２  メッセージサーバ
４２７  データベース
４３０  ウェブディスパッチャ／ロードバランサ
５０５  プロセッサ
５１０  システムメモリ
５１５  ＮＶメモリ
５２５  通信リンク
５３０  チップセット
【図１】
2006202279.tif 000003
【図２】
2006202279.tif 000004
【図３】
2006202279.tif 000005
【図４】
2006202279.tif 000006
【図５】
2006202279.tif 000007
【外国語明細書】
2006202279000001.pdf