(57)【要約】【課題】プログラムが実際に動作する環境に近い状態でかつリアルタイムにプログラムを監視することを可能にする。【解決手段】サーバコンピュータ２は、クライアントコンピュータ３から監視対象のＪａｖａプログラムの通知および問題解析に必要な動作情報の取得要求を監視要求受信手段２５で受信して、監視対象のＪａｖａプログラムをプログラム記憶領域２３にロードし、監視用Ｊａｖａプログラム生成手段２７でロードされたＪａｖａプログラムの中に動作情報を出力するための監視命令を挿入した監視用Ｊａｖａプログラムを生成する。監視用Ｊａｖａプログラムを実行して動作情報を取得して、クライアントコンピュータ３に送信し、クライアントコンピュータ３では、サーバコンピュータ２より受信した動作情報を分析手段３６で分析して分析結果を表示装置３１に表示する。【選択図】図２
2010033543.tif 000002
【特許請求の範囲】
【請求項１】
Ｊａｖａ（登録商標、以下同じ）プログラムを実行するためのＪａｖａ仮想マシンを備えたサーバコンピュータと、該サーバコンピュータとネットワークを介して接続されたクライアントコンピュータとを有するソフトウエア動作監視システムにおいて、
前記サーバコンピュータが、
前記クライアントコンピュータから監視対象とすべきＪａｖａプログラムを特定する情報の通知および該Ｊａｖａプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、
通知された前記監視対象のＪａｖａプログラムを一時的に記憶するプログラム記憶手段と、
該プログラム記憶手段に記憶されたＪａｖａプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、ＪａｖａのＢＣＩ機能を用いて前記監視命令を挿入した監視用Ｊａｖａプログラムを生成する監視用Ｊａｖａプログラム生成手段と、
該監視用Ｊａｖａプログラム生成手段により生成された前記監視用Ｊａｖａプログラムを前記Ｊａｖａ仮想マシンにより実行する監視プログラム実行手段と、
該監視プログラム実行手段により前記監視用Ｊａｖａプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段とを備え、
前記クライアントコンピュータが、
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、
前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、
受信した前記動作情報を分析する分析手段と、
該分析手段により得られた分析結果を表示する表示手段とを備えたことを特徴とするソフトウエア動作監視システム。
【請求項２】
前記監視命令が、前記監視用Ｊａｖａプログラム中の各メソッドを実行した履歴の記録を前記動作情報として出力するものであり、
前記監視用Ｊａｖａプログラム生成手段が、前記Ｊａｖａプログラム中の監視対象となるメソッドの開始および終了部分を検索して前記監視命令を挿入するものであり、
前記分析手段が、前記メソッドを実行した履歴の記録に基づいて複数のメソッドの関係を分析するものであることを特徴とする請求項１記載のソフトウエア動作監視システム。
【請求項３】
前記監視視命令が、前記監視対象のメソッドの開始および終了の履歴の記録を動作情報として出力するものであり、
前記クライアントコンピュータが、前記監視用Ｊａｖａプログラム中の複数のメソッドそれぞれのメソッド名および該メソッドが属するクラス名を前記サーバコンピュータより受信するクラス情報受信手段をさらに備え、
前記分析手段が、前記受信したメソッド名および該メソッドのクラス名に基づいて、各メソッドを該メソッドが属するクラスにそれぞれ分類するとともに、前記メソッドの開始および終了の履歴の記録に基づいて、各メソッドが属するクラスおよび各クラスから呼び出されるメソッドの関係を分析するものであり、
前記表示手段が、前記各メソッドが属するクラスおよび各クラスから呼び出されるメソッドの関係を表すクラス図を表示するものであることを特徴とする請求項２記載のソフトウエア動作監視システム。
【請求項４】
前記分析手段が、前記動作情報を分析して問題となる部分を検出するとともに、前記メソッドの開始および終了の履歴の記録に基づいて前記問題が検出された部分がいずれのメソッドにおいて生じた問題であるかを特定するものであり、
前記表示手段が、前記クラス図上において問題が生じた前記メソッドおよび該メソッドの属するクラスの少なくともいずれか一方が認識可能となるように表示するものであることを特徴とする請求項３記載のソフトウエア動作監視システム。
【請求項５】
請求項１に記載のソフトウエア動作監視システムに使用されるサーバコンピュータであって、
前記クライアントコンピュータから監視対象とすべきＪａｖａプログラムを特定する情報の通知および該Ｊａｖａプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、
通知された前記監視対象のＪａｖａプログラムを一時的に記憶するプログラム記憶手段と、
該プログラム記憶手段に記憶されたＪａｖａプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、ＪａｖａのＢＣＩ機能を用いて前記監視命令を挿入した監視用Ｊａｖａプログラムを生成する監視用Ｊａｖａプログラム生成手段と、
該監視用Ｊａｖａプログラム生成手段により生成された前記監視用Ｊａｖａプログラムを前記Ｊａｖａ仮想マシンにより実行する監視プログラム実行手段と、
該監視プログラム実行手段により前記監視用Ｊａｖａプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段とを備えたことを特徴とするサーバコンピュータ。
【請求項６】
請求項１に記載のソフトウエア動作監視システムに使用されるクライアントコンピュータであって、
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、
前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、
受信した前記動作情報を分析する分析手段と、
該分析手段により得られた分析結果を表示する表示手段とを備えたことを特徴とするクライアントコンピュータ。
【請求項７】
請求項１に記載のソフトウエア動作監視システムに使用されるサーバコンピュータを、
前記クライアントコンピュータから監視対象とすべきＪａｖａプログラムを特定する情報の通知および該Ｊａｖａプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、
通知された前記監視対象のＪａｖａプログラムを一時的に記憶するプログラム記憶手段と、
該プログラム記憶手段に記憶されたＪａｖａプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、ＪａｖａのＢＣＩ機能を用いて前記監視命令を挿入した監視用Ｊａｖａプログラムを生成する監視用Ｊａｖａプログラム生成手段と、
該監視用Ｊａｖａプログラム生成手段により生成された前記監視用Ｊａｖａプログラムを前記Ｊａｖａ仮想マシンにより実行する監視プログラム実行手段と、
該監視プログラム実行手段により前記監視用Ｊａｖａプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段として機能させるためのプログラム。
【請求項８】
請求項１に記載のソフトウエア動作監視システムに使用されるクライアントコンピュータを、
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、
前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、
受信した前記動作情報を分析する分析手段と、
該分析手段により得られた分析結果を表示する表示手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はＪａｖａ（登録商標、以下同じ）言語で書かれたプログラムの実行を監視するためのソフトウエア動作監視システム、そのクライアントコンピュータおよびサーバコンピュータ、並びに、そのプログラムに関するものである。
【背景技術】
【０００２】
従来より、ソフトウエアの品質を向上させるための手法として、その内部動作を調査して不具合(バグ)を除去するため、プロファイラやデバッガに代表されるソフトウエアの開発環境が提供されてきた。
【０００３】
近年、製品開発後すぐに商品化を行うために、プログラムをＦＬＡＳＨメモリに書き込んで出荷が行われる。そこで、製品に近い状態でデバックを行うために、製品に用いられるＦＬＡＳＨメモリにプログラムを書き込んだ状態で、ＩＣＥ（インサーキットエミュレータ）を使って、プログラムの所定の位置にブレークポイントを設定してプログラムが止まった状態でメモリやレジスタなどを確認してデバックを行っていた（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−２６７４４５号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、これら従来型のソフトウエアのデバッグ手法は、ソフトウエアの動作を監視するためにＩＣＥなどの大規模な監視システムが必要とされる。また、ＩＣＥなどを用いてデバックを行う場合には、ブレークポイントを設定するためにプログラムの一部分が度々書き直される。ＦＬＡＳＨメモリはブロック単位にプログラムの書き換えが行われるために、デバッグする際ブレークポイントが設定された部分のプログラムの書き直しに時間がかかり、実際にプログラムが動作する動作環境とは程遠い状態でデバックされることになる。
【０００６】
そこで、本発明は、上記事情に鑑み、実際に動作する環境に近い状態でかつリアルタイムにプログラムを監視することが可能なソフトウエア動作監視システムを提供することを目的とするものである。
【課題を解決するための手段】
【０００７】
本発明のソフトウエア動作監視システムは、Ｊａｖａプログラムを実行するためのＪａｖａ仮想マシンを備えたサーバコンピュータと、該サーバコンピュータとネットワークを介して接続されたクライアントコンピュータとを有するソフトウエア動作監視システムであり、
前記サーバコンピュータが、
前記クライアントコンピュータから監視対象とすべきＪａｖａプログラムを特定する情報の通知および該Ｊａｖａプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、通知された前記監視対象のＪａｖａプログラムを一時的に記憶するプログラム記憶手段と、該プログラム記憶手段に記憶されたＪａｖａプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、ＪａｖａのＢＣＩ機能を用いて前記監視命令を挿入した監視用Ｊａｖａプログラムを生成する監視用Ｊａｖａプログラム生成手段と、該監視用Ｊａｖａプログラム生成手段により生成された前記監視用Ｊａｖａプログラムを前記Ｊａｖａ仮想マシンにより実行する監視プログラム実行手段と、該監視プログラム実行手段により前記監視用Ｊａｖａプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段とを備え、
前記クライアントコンピュータが、
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、受信した前記動作情報を分析する分析手段と、該分析手段により得られた分析結果を表示する表示手段とを備えるものであることを特徴とする。
【０００８】
本発明のソフトウエア動作監視システムに使用されるサーバコンピュータは、
前記クライアントコンピュータから監視対象とすべきＪａｖａプログラムを特定する情報の通知および該Ｊａｖａプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、通知された前記監視対象のＪａｖａプログラムを一時的に記憶するプログラム記憶手段と、該プログラム記憶手段に記憶されたＪａｖａプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、ＪａｖａのＢＣＩ機能を用いて前記監視命令を挿入した監視用Ｊａｖａプログラムを生成する監視用Ｊａｖａプログラム生成手段と、該監視用Ｊａｖａプログラム生成手段により生成された前記監視用Ｊａｖａプログラムを前記Ｊａｖａ仮想マシンにより実行する監視プログラム実行手段と、該監視プログラム実行手段により前記監視用Ｊａｖａプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段とを備えたことを特徴とするものである。
【０００９】
本発明のソフトウエア動作監視システムに使用されるクライアントコンピュータは、
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、受信した前記動作情報を分析する分析手段と、該分析手段により得られた分析結果を表示する表示手段を備えたことを特徴とするものである。
【００１０】
本発明のソフトウエア動作監視システムに使用されるサーバコンピュータにおいて実行されるプログラムは、前記サーバコンピュータを、
前記クライアントコンピュータから監視対象とすべきＪａｖａプログラムを特定する情報の通知および該Ｊａｖａプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、通知された前記監視対象のＪａｖａプログラムを一時的に記憶するプログラム記憶手段と、該プログラム記憶手段に記憶されたＪａｖａプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、ＪａｖａのＢＣＩ機能を用いて前記監視命令を挿入した監視用Ｊａｖａプログラムを生成する監視用Ｊａｖａプログラム生成手段と、該監視用Ｊａｖａプログラム生成手段により生成された前記監視用Ｊａｖａプログラムを前記Ｊａｖａ仮想マシンにより実行する監視プログラム実行手段と、該監視プログラム実行手段により前記監視用Ｊａｖａプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段として機能させることを特徴とするものである。
【００１１】
本発明のソフトウエア動作監視システムに使用されるクライアントコンピュータにおいて実行されるプログラムは、前記クライアントコンピュータを、
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、受信した前記動作情報を分析する分析手段と、該分析手段により得られた分析結果を表示する表示手段として機能させることを特徴とするものである。
【００１２】
「動作情報」とは、監視対象のＪａｖａプログラムをＪａｖａ仮想マシン上で動作させながら取得できる情報であり、監視対象のＪａｖａプログラムの動作を追跡することができる情報である。例えば、ソフトウエアの使用中の資源、処理時間、実行履歴などがある。
【００１３】
「監視命令」は、動作情報を出力する処理と監視命令を挿入する前の元の命令の処理を行うことが可能な命令であり、「監視命令を挿入する」とは、元のＪａｖａプログラムの命令の一部を監視命令に置き換えて、元の命令の処理と動作情報を出力する処理が実行できるようにすることをいう。
【００１４】
また、監視命令が、前記監視用Ｊａｖａプログラム中の各メソッドを実行した履歴の記録を前記動作情報として出力するものである場合には、
前記監視用Ｊａｖａプログラム生成手段は、前記Ｊａｖａプログラム中の監視対象となるメソッドの開始および終了部分を検索して前記監視命令を挿入するものであり、
前記分析手段が、前記メソッドを実行した履歴の記録に基づいて複数のメソッドの関係を分析するようにするのが望ましい。
【００１５】
また、前記監視視命令が、前記監視対象のメソッドの開始および終了の履歴の記録を動作情報として出力するものであり、
前記クライアントコンピュータが、前記監視用Ｊａｖａプログラム中の複数のメソッドそれぞれのメソッド名および該メソッドが属するクラス名を前記サーバコンピュータより受信するクラス情報受信手段をさらに備え、
前記分析手段が、前記受信したメソッド名および該メソッドのクラス名に基づいて、各メソッドを該メソッドが属するクラスにそれぞれ分類するとともに、前記メソッドの開始および終了の履歴の記録に基づいて、各メソッドが属するクラスおよび各クラスから呼び出されるメソッドの関係を分析するものであり、
前記表示手段が、前記各メソッドが属するクラスおよび各クラスから呼び出されるメソッドの関係を表すクラス図を表示するようにするのが望ましい。
【００１６】
さらに、前記分析手段が、前記動作情報を分析して問題となる部分を検出するとともに、前記メソッドの開始および終了の履歴の記録に基づいて前記問題が検出された部分がいずれのメソッドにおいて生じた問題であるかを特定するものであり、
前記表示手段が、前記クラス図上において問題が生じた前記メソッドおよび該メソッドの属するクラスの少なくともいずれか一方が認識可能となるように表示するものが望ましい。
【００１７】
「認識可能となるように表示する」は、表示されているメソッド名またはクラス名を点滅、強調表示、あるいは反転して、問題が発生したメソッドまたはクラスを、問題が発生していないメソッドまたはクラスと区別できるように表示することをいう。
【発明の効果】
【００１８】
本発明のソフトウエア動作監視システムは、Ｊａｖａ仮想マシンを備えたサーバコンピュータで、監視対象のＪａｖａプログラムに監視命令を挿入し、監視命令を挿入したＪａｖａプログラムを実行して動作中のＪａｖａプログラムの動作情報を取得してクライアントコンピュータに送信し、クライアントコンピュータで動作情報の解析を行うことにより、Ｊａｖａプログラムを実際の動作環境に近い状態で問題解析することができる。
【００１９】
また、メソッドを実行した履歴の記録を動作情報として取得することにより、複数のメソッドの関係を分析することができる。
【００２０】
また、監視対象のＪａｖａプログラムの各メソッドのメソッド名とクラス名を含むクラス情報とともに、Ｊａｖａプログラムのメソッドの前後に監視命令を挿入して、監視対象のメソッドの開始および終了の履歴の記録を動作情報として取得することにより、各クラスに属するメソッドと、各クラスから呼ばれるメソッドの関係をクラス図として表示することができる。
【００２１】
さらに、動作情報を分析して問題となる部分を検出するとともに、メソッドの開始および終了の履歴の記録から問題が検出された部分を特定して、クラス図上に問題の発生したメソッドあるいはクラスが認識できるように表示することで、問題部分を容易に発見することができる。
【図面の簡単な説明】
【００２２】
【図１】ソフトウエア動作監視システムの概略構成図
【図２】第１の実施の形態のサーバコンピュータとクライアントコンピュータの機能構成図
【図３】第１の実施の形態のソフトウエア動作監視システムの処理の流れを示すフローチャート
【図４】第２の実施の形態のサーバコンピュータとクライアントコンピュータの機能構成図
【図５】第２の実施の形態のソフトウエア動作監視システムの処理の流れを示すフローチャート
【図６】クラス図の一例
【図７】クラス図のクラスを再配置する様子を示す図
【図８】クラス図上で問題の発生したスレッドを強調表示した一例
【図９】第４の実施の形態のサーバコンピュータとクライアントコンピュータの機能構成図
【図１０】リソースの変化を示すグラフの一例
【発明を実施するための形態】
【００２３】
以下、図面を参照して本発明の実施の形態について説明する。図１は、本発明の第１の実施の形態の概略構成図である。
【００２４】
図１に示すように、本実施の形態のソフトウエア動作監視システム１は、サーバコンピュータ２と、クライアントコンピュータ３と、サーバコンピュータ２とクライアントコンピュータ３とを接続するネットワーク４とで概略構成される。サーバコンピュータ２およびクライアントコンピュータ３は、ＣＤ−ＲＯＭ等の記録媒体からインストールされたプログラム、あるいは、インターネット等のネットワーク４経由で接続されたサーバコンピュータ（サーバコンピュータ２とは異なるコンピュータ）からダウンロードされたプログラムがインストールされることによって各機能が提供される。
【００２５】
サーバコンピュータ２は、図２に示すように、ＣＰＵ(中央処理装置)（不図示）と、ＣＰＵとバスで接続されたＲＡＭなどの揮発性素子からなる主記憶装置（不図示）と、データを永続的に記憶する不揮発性素子からなる補助記憶装置２１と、通信部２２とを備えた汎用の比較的処理能力の高いコンピュータであり、クライアントコンピュータ３からの要求に応じて所定の機能やデータを提供する。
【００２６】
主記憶装置は、プログラムを起動した際にプログラムを記憶するプログラム記憶領域（プログラム記憶手段）２３とそのプログラムが動作するために必要なワークエリア等に用いられる。
【００２７】
補助記憶装置２１は、種々のプログラムやデータを長期間記憶するために用いられる。具体的には、ハードディスク、ＭＯ、ＣＤ−Ｒ、磁気テープなどである。以下、本実施の形態では補助記憶装置２１がハードディスクである場合について説明する。
【００２８】
本実施の形態のサーバコンピュータ２には、Ｊａｖａ仮想マシン２４がインストールされ、Ｊａｖａ仮想マシン２４を用いてＪａｖａプログラムを実行したときの動作を監視してクライアントコンピュータ３に動作情報を提供する監視機能を備える。Ｊａｖａ仮想マシン２４は、Ｊａｖａプログラムのバイトコードをサーバコンピュータ２のネイティブコードに変換して実行するものであり、ハードディスクに記憶されているＪａｖａプログラムを主記憶装置上のプログラム記憶領域２３にロード（記憶）して実行する。
【００２９】
クライアントコンピュータ３は、図２に示すように、ＣＰＵ（不図示）と、主記憶装置（不図示）と、補助記憶装置（不図示）と、通信部３２とを備えたパソコンなどのコンピュータであり、サーバコンピュータ２からネットワーク４を介して動作情報を受信し、受信した動作情報を分析する分析機能を備える。さらに、クライアントコンピュータ３には、キーボード・マウスなどの入力装置３０とＣＲＴなどの表示装置３１が設けられ、サーバコンピュータ２に対して行う要求の入力、および、動作情報を分析した分析結果が表示できるように構成される。
【００３０】
ネットワーク４には、インターネットやイントラネットで標準的に使われるＴＣＰ/ＩＰなどを用いるのが好ましい。
【００３１】
以下、本発明の第１の実施形態のサーバコンピュータ２の監視機能およびクライアントコンピュータ３の分析機能について詳細に説明する。図２は、サーバコンピュータ２とクライアントコンピュータ３の機能構成図を示す。
【００３２】
サーバコンピュータ２の監視機能は、クライアントコンピュータ３から監視対象のＪａｖａプログラムの通知および問題解析に必要な動作情報の取得要求を受信する監視要求受信手段２５と、監視対象のＪａｖａプログラムをプログラム記憶領域２３に読み込むプログラム読込手段２６と、プログラム記憶領域２３に読み込まれたＪａｖａプログラムの動作を監視するためにＪａｖａプログラムを改変する監視用Ｊａｖａプログラム生成手段２７と、監視用Ｊａｖａプログラムを実行する監視プログラム実行手段２８と、動作情報をクライアントコンピュータ３に送信する動作情報送信手段２９とを備える。これらの監視機能は、Ｊａｖａ仮想マシン２４上で動作するものである。
【００３３】
本実施の形態では、Ｊａｖａプログラムは、Ｊａｖａ言語で記述されたソースコードをＪａｖａバイトコードにコンパイルしたＪａｖａプログラム本体と、その本体に組み込まれる外部ライブラリを含むものとして以下説明する。
【００３４】
プログラム読込手段２６は、クライアントコンピュータ３から通知された監視対象のＪａｖａプログラムをハードディスク２１からプログラム記憶領域２３に読み込む。
【００３５】
監視用Ｊａｖａプログラム生成手段２７は、プログラム記憶領域２３に読み込まれたＪａｖａプログラムの中から監視対象の処理を行うコードを検出して、ＪａｖａのＢＣＩ機能（ＪａｖａのＢＣＩ機能の詳細は、米国特許番号６，２６０，１８７を参照）を用いて検出されたコードを監視命令（監視コード）に書き直す。この監視コードの挿入により、監視用Ｊａｖａプログラムが実行されると書き直し前の本来の処理と動作情報を取得する処理が実行される。
【００３６】
動作情報は、Ｊａｖａプログラムの動作時に得られる情報である。具体的には、例えば、各メソッドの呼び出し履歴、メソッドの実行時間・リソースの変化、ＳＱＬ文の実行計画、あるいは、実行されたメソッドの実行過程の記録（例えば、スタックトレース）、ロック競合の検出などの問題解析に必要な情報である。
【００３７】
監視プログラム実行手段２８は、プログラム記憶領域２３に記憶されている監視用ＪａｖａプログラムをＪａｖａ仮想マシン２４上で実行させる。
【００３８】
クライアントコンピュータ３の分析機能は、監視対象のＪａｖａプログラムとデバックに必要な動作情報を設定する監視対象設定手段３３と、設定された動作情報の取得要求をサーバコンピュータ２に送信する監視要求送信手段３４と、サーバコンピュータ２から動作情報を受信する動作情報受信手段３５と、動作情報を分析する分析手段３６と、分析結果を表示装置３１に表示する表示手段３７とを備える。
【００３９】
監視対象設定手段３３は、ユーザが入力装置３０および表示装置３１を利用して、監視対象のＪａｖａプログラムと問題解析に必要な動作情報が設定入力できるようなユーザインターフェースを提供する。
例えば、ボトルネックの検出、ＳＱＬの分析、ロック競合の検出等のうちどれについて監視するのかを指定できるようなインタフェースを提供する。「ＳＱＬの分析」が選択された場合には、さらに、サーバコンピュータ２側でフルスキャンの判定を行うか、クライアントコンピュータ３側でフルスキャンの判定を行うかなどの詳細な設定も行うことができる。
【００４０】
監視要求送信手段３４は、監視対象のＪａｖａプログラムをサーバコンピュータ２に通知するとともに、監視対象設定手段３３で設定された動作情報の取得要求をサーバコンピュータ２に送信する。たとえば、監視対象設定手段３３でユーザが「ＳＱＬの分析」を選択した場合には、実行されたメソッドの履歴とＳＱＬの実行計画などを動作情報として取得するようにサーバコンピュータ２に要求する。
【００４１】
分析手段３６は、問題となる動作パターン、例えば、処理時間が異常に長いなどの動作パターンを利用して、サーバコンピュータ２から受信した動作情報がこのような動作パターンに合致するか否かにより問題となる動作が発生した場所を検出する。
【００４２】
表示手段３７は、問題となる情報を表示装置３１の画面上に表示する。例えば、処理時間が異常に長い場合であれば「メソッドの開始から終了までの間のＣＰＵ時間が閾値を超えています」などの情報を、表示装置３１の画面上に一覧にして表示する。
【００４３】
以下、本実施の形態のソフトウエア動作監視システム１の処理の流れについて、図３のフローチャートに従って説明をする。本実施の形態では、「ＳＱＬの分析」を行う場合を例に、クライアントコンピュータ３で動作情報から問題の発生の判定を行う手法について説明する。
【００４４】
まず、「ＳＱＬの分析」を行う場合には、ユーザは、クライアントコンピュータ３の監視対象設定手段３３を用いて、監視対象のＪａｖａプログラムの指定と「ＳＱＬの分析」を選択する。監視要求送信手段３４は、監視対象のＪａｖａプログラムの通知と、「ＳＱＬの分析」に必要な動作情報の取得要求をサーバコンピュータ２に送信する（Ｓ１００）。「ＳＱＬの分析」では、例えば、各メソッドの実行履歴・処理時間やＳＱＬの実行計画などの取得を要求する。
【００４５】
サーバコンピュータ２の監視要求受信手段２５が、監視対象のＪａｖａプログラムの通知と動作情報の取得要求をクライアントコンピュータ３から受信すると（Ｓ１０１）、サーバコンピュータ２のオペレータはプログラム読込手段２６を用いて、通知されたＪａｖａプログラムをハードディスク２１から検索して、メモリのプログラム記憶領域２３に読み込む（ロード）（Ｓ１０２）。また、監視対象のＪａｖａプログラムをロードすると同時に、Ｊａｖａプログラムを監視する子プログラムがメモリ上に読み込まれる。読み込まれた子プログラムは、Ｊａｖａプログラムを実行する前に監視用Ｊａｖａプログラム生成処理（監視用Ｊａｖａプログラム生成手段）２７を開始する（Ｓ１０３）。監視用Ｊａｖａプログラム生成処理２７は、クライアントコンピュータ３から送信された動作情報の取得要求に応じて、プログラム記憶領域２３に記憶されているＪａｖａプログラムの所定のコードを監視コードに書き直す。「ＳＱＬの分析」を行う場合は、メソッド呼び出しの前後のコードを各メソッドの開始直前と終了直後の記録と開始直前と終了直後の時間を取得するための監視コードに書き直し、さらに、Ｊａｖａプログラムの外部ライブラリのデータベースにアクセスするコード部分はＳＱＬの実行計画を取得するための監視コードに書き直して、監視用Ｊａｖａプログラムを生成する（Ｓ１０４）。
【００４６】
監視プログラム実行手段２８で監視用Ｊａｖａプログラムの実行が開始されると、監視用Ｊａｖａプログラムのメソッドが実行される度、あるいは、データベースにアクセスする度に、子プログラムで書き換えた監視コードの処理が実行され（Ｓ１０５）、子プログラムに各メソッドの開始・終了、メソッド呼び出し前後の時間、ＳＱＬの実行計画などが通知される。子プログラムは、メソッドの開始・終了の通知を受けると、動作情報送信手段２９でメソッドの開始・終了を動作情報として、随時クライアントコンピュータ３へ送信する。メソッドの開始・終了の履歴の記録は動作傾向を示す情報として有益であるので、通知を受けると即座にクライアントコンピュータ３へ送信される（Ｓ１０６）。また、通知を受けた子プログラムは、メソッドの開始および終了の履歴の記録と開始直前および終了直後の時刻とから、各メソッドの処理時間を計算し、所定の閾値以上の処理時間がかかっているメソッドがないかを調べる。所定の閾値を超過して必要以上に時間がかかっているメソッドがある場合にはクライアントコンピュータ３へ異常が発生したことを通知する。
【００４７】
異常が発生した場合には、さらに、動作情報送信手段２９は、メソッドの処理時間などを動作情報としてクライアントコンピュータ３へ送信するが、所定の閾値を超過して必要以上に時間がかかっているメソッドがある場合は、メソッドの処理時間などに加えて、ＳＱＬの実行計画を動作情報としてクライアントコンピュータ３へ送信する（Ｓ１０６）。
【００４８】
クライアントコンピュータ３は、動作情報受信手段３５で動作情報を受信し（Ｓ１０７）、受信した動作情報を分析手段３６で分析する（Ｓ１０８）。分析は予め用意した様々な数値の組み合わせを用いて問題が発生しているか否かを判定する（Ｓ１０９）。例えば、各メソッドの開始および終了の履歴とＳＱＬの実行計画が取得された時刻などから、いずれのメソッドでデータベースにアクセスしたかを見つける。さらに、取得した実行計画よりフルスキャンでテーブルアクセスを行っていると思われる計画が存在しているか否かにより、テーブルのフルスキャンなどの問題が発生しているか否かの判定を行う。
フルスキャンが発生していると判定された場合には、表示手段３７で、フルスキャンが発生したことを画面上に警告表示するとともにＳＱＬの実行計画などの詳細な情報を表示する（Ｓ１１０）。また、フルスキャンが発生したメソッド名なども表示する。
いずれの問題にもあてはまらない場合、すなわち、動作情報が閾値内であるような場合は何もしない。
【００４９】
問題が画面上に表示された場合は、ユーザは表示された情報を確認して、例えば、「フルスキャンを行ったテーブルの定義は、フルスキャンを回避する構造に変更できないか」、「フルスキャンを行ったプログラムの該当箇所は、データベースへのアクセスを適切に実施しているか」について検討する。また、ユーザがクライアントコンピュータ３に表示された結果を見て情報の過不足を感じた場合には、監視対象設定手段３３で、取得要求する動作情報を変更する。例えば、実行時のパフォーマンスの分析を行う場合は処理時間の閾値を調整する。
【００５０】
取得する動作情報の設定が変更された場合には、再度設定された動作情報の取得要求をサーバコンピュータ２に送信して、Ｓ１０４〜Ｓ１１０の処理を再び行う。
上述では、サーバコンピュータ２においてユーザが手動で監視対象のＪａｖａプログラムをプログラム記憶領域２３にロードする場合について説明したが、クライアントコンピュータ３からの通知に応じて、自動的にロードするようにしてもよい。
【００５１】
次に、第２の実施の形態について説明する。本実施の形態では、クライアントコンピュータ３、監視対象Ｊａｖａプログラムに含まれるメソッドおよびそのメソッドが属するクラスの相関を表すクラス図を表示し、クラス図上で問題の発生場所を確認できるようにする手法について説明する。
【００５２】
本実施の形態の概略構成は第１の実施の形態と同じであるので詳細な説明は省略する。図４に、本実施の形態のソフトウエア動作監視システム１のサーバコンピュータ２の監視機能およびクライアントコンピュータ３の分析機能の構成を示す。第１の実施の形態と略同じ構成は同一の符号を付して詳細な説明は省略し、異なる構成についてのみ詳細に説明する。
【００５３】
サーバコンピュータ２の監視機能は、監視要求受信手段２５と、プログラム読込手段２６と、監視用Ｊａｖａプログラム生成手段２７と、監視プログラム実行手段２８と、動作情報送信手段２９とに加えて、監視対象のプログラムをＪａｖａ仮想マシン上にロードする際に取得した監視対象のＪａｖａプログラムに含まれる複数のメソッドとそのメソッドのクラスをクラス情報としてクライアントコンピュータ３に送信するクラス情報送信手段２６１とを備える。
【００５４】
クライアントコンピュータ３の分析機能は、監視対象設定手段３３と、監視要求送信手段３４と、動作情報受信手段３５と、クラス情報を受信するクラス情報受信手段３５２と、動作情報を分析するとともにメソッドとクラスの関係を分析する分析手段３６ａと、メソッドとクラスの関係を表すクラス図と分析結果を表示装置３１に表示する表示手段３７ａとを備える。
【００５５】
分析手段３６ａは、受信したクラス情報に基づいて、各メソッドをそのメソッドが属するクラスにそれぞれ分類する。さらに、メソッドの開始および終了の履歴の記録に基づいて、各メソッドが属するクラスと各クラスから呼び出されるメソッドの関係を分析する。さらに、動作情報を分析して、問題の発生場所が同一で数値が一定の範囲内に収まっているか否かなどの条件に応じて、問題の発生しているメソッドやクラスを特定する。
【００５６】
表示手段３７ａは、分析手段３６ａの分析結果に基づいて、図６に示すような各メソッドが属するクラス、および、各クラスから呼び出されるメソッドの関係を表すクラス図を表示装置３１上に表示する。さらに、問題が発生しているクラスやメソッドを点滅させて、問題の発生場所が特定できるようにする。
【００５７】
以下、本実施の形態のソフトウエア動作監視システム１の処理の流れについて、図５のフローチャートに従って説明をする。本実施の形態では、ボトルネックとなる処理とその原因を見つける場合について説明する。
【００５８】
まず、「ボトルネックの検出」について分析を行う場合には、ユーザは、クライアントコンピュータ３の監視対象設定手段３３で、監視対象のＪａｖａプログラムの指定と「ボトルネックの検出」を選択する。監視要求送信手段３４は、監視対象のＪａｖａプログラムの通知と、「ボトルネックの検出」に必要な動作情報の取得要求をサーバコンピュータ２に送信する（Ｓ１００）。
【００５９】
サーバコンピュータ２の監視要求受信手段２５が、監視対象のＪａｖａプログラムの通知と動作情報の取得要求をクライアントコンピュータ３から受信すると（Ｓ１０１）、サーバコンピュータ２のオペレータはプログラム読込手段２６を用いてＪａｖａプログラムをプログラム記憶領域２３にロードする（Ｓ１０２）。このとき、クラス情報送信手段２６１はロード時に取得した監視対象のプログラムに含まれるメソッドと各メソッドのクラスをクラス情報としてクライアントコンピュータ３に送信する（１０２−１）。クライアントコンピュータ３はクラス情報受信手段３５２でクラス情報を受信する（Ｓ１０２−２）。続いて、第１の実施の形態と同様にＳ１０３〜Ｓ１０７の処理を行って、サーバコンピュータ２で動作情報を取得して、クライアントコンピュータ３に送信する。
【００６０】
クライアントコンピュータ３は、分析手段３６ａでサーバコンピュータ２から送信された動作情報を用いて、メソッドの開始および終了の履歴の記録や、メソッドの処理時間などの動作情報と、クラス情報から各メソッドが属するクラスおよび各クラスから呼び出されるメソッドの関係を分析する（Ｓ１０８）。まず、クラス情報に基づいてメソッドをクラスごとにまとめ、表示手段３７ａで、各クラスに属するメソッド名の一覧を表示する。図６では、各枠の上段がクラス名を示し、その下段にそのクラスに属するメソッド名の一覧を示している。さらに、分析手段３６ａは、メソッドの開始および終了の履歴の記録から、メソッドの呼び出しの順番を抽出し、各クラスから呼び出されるメソッドを見つける。この結果に応じて、表示手段３７ａで、各クラスから呼び出されるメソッドの関係をクラス図として表示装置３１の画面に表示する。
【００６１】
例えば、
（１）メソッドＡの呼び出し開始と呼び出し終了の間に別のメソッドＢの呼び出しがある場合は、メソッドＡはメソッドＢを内部で呼び出していると分析でき、メソッドＢはメソッドＡに依存していると判断できる。
（２）また、メソッドＡの呼び出し開始と呼び出し終了の後に、別のメソッドＢの呼び出しがある場合、メソッドＡの処理完了後にメソッドＢが実行されるため、メソッドＡとメソッドＢの間には依存関係はないと判断できる。
図６は、矢印の先のメソッドが矢印の元にあるクラスから呼び出されていることを表している。また、クラス図は、図７に示すようにクラス単位でユーザが自由に再配置して、ユーザが見やすいようにクラス図を変更できるようにするのが好ましい。また、クラス図を表示位置まで含めてクライアントコンピュータ３のハードディスクに保存できるようにすれば、条件を変えて、再度監視用Ｊａｖａプログラムを実行する場合にも、保存したクラス図を読み出して同じ状態で観察を行うことができる。
【００６２】
次に、分析手段３６ａは、各メソッドの処理時間からボトルネックとなっている箇所を見つける（Ｓ１０９）。さらに、パフォーマンスのボトルネックとなる処理とその原因を、類似した項目、例えば、問題の発生場所や値の範囲などについてまとめ、さらに、問題の発生場所が同一で数値が一定の範囲内に収まっているなどの条件に応じて、図６に示すように、ユーザに必要な情報を画面に表示する（Ｓ１１０）。
【００６３】
例えば、メソッドの開始および終了の履歴の記録やメソッドの処理時間から、以下の２つの観点から類似する情報を検出し、総括情報を画面に表示する。
【００６４】
1. 問題の発生場所が同一である
2. 数値が一定の範囲内にまとまっている
さらに、以下の類似点に注目して分類していく。
（１）動作情報の発生場所が、同一パッケージ名、同一クラス名、同一メソッド名だった場合にまとめる候補とする。ここで、パッケージとは、ひとまとまりの機能を示すものをいい、いくつかのクラスをまとめたものをいう。例えば、画面操作に関するクラスをまとめたものを同一のパッケージとする。各クラスが同一パッケージであるか否かについてはクラス情報より判定する。
（２）動作情報に含まれる処理時間の範囲を数カテゴリ、例えば処理時間が1秒〜100秒までばらつきがある場合には、1〜20秒、21秒〜40秒、41秒〜60秒、61秒〜80秒、81秒〜100秒の５カテゴリに分ける。同一カテゴリの処理時間をもつ動作情報は、類似した動作情報とする。処理時間が類似した動作情報は、最初に発生場所（メソッド）ごとにまとめる。次に各メソッドの処理時間の処理時間平均を求めて総括情報として画面に表示する。
【００６５】
以上のように、クライアントコンピュータ３は、ボトルネックになる処理と類似した要因をまとめ、図６に示すように、必要な情報を要約した形でユーザに伝えることができる。図６の例では、各メソッドの横に表示されている数値は、左の数値がそのメソッドの処理にかかった最大の時間を示し、右の数値はそのメソッドの処理にかかった平均時間を示している。
また、第１の実施の形態で説明した「ＳＱＬの分析」も「ボトルネックの検出」と同時に行う場合には、ＳＱＬの実行計画が取得されたクラスの枠内に、実行計画の詳細情報を図６の右下に示すように表示する。
【００６６】
さらに、各動作情報のうち、ユーザによって指定された閾値を超過していた動作情報を検出し、その発生場所のメソッドの呼び出しを検出する。そこで、上述で生成されたクラス図において、該当のメソッドを点滅させることで、ユーザに問題の発生と調査すべき箇所を通知する。具体的には、監視用プログラムのメソッド呼び出しの前後に監視コードを挿入した監視用Ｊａｖａプログラムを実行することにより、メソッドの開始および終了の履歴が記録される。ユーザによって指定された項目（例えば、処理時間）の閾値を超過する動作情報があった場合には、メソッドの開始および終了の履歴より動作情報はどのメソッドに関連しているかを抽出して、クラス図において該当部分の点滅を一定時間行う。図８に問題を検出したメソッドを強調表示した一例を示す。図８では、メソッドを強調表示しているが、クラス単位で強調表示してもよい。
【００６７】
このように、クライアントコンピュータ３では監視対象のＪａｖａプログラムを動作させながら、ソフトウエアの構成を自動的に分析し、問題の発生している場所をリアルタイムで強調表示をすることができる。
【００６８】
上述では、クライアントコンピュータ３で、各メソッドの処理時間からボトルネックとなっている箇所を見つける場合について説明したが、サーバコンピュータ２で各メソッドの処理時間を蓄積しておき、処理時間が所定の閾値を越えた場合にのみクライアントコンピュータ３にボトルネックが発生したことを知らせる動作情報を送信するようにしてもよい。
【００６９】
次に、第３の実施の形態について説明する。本実施の形態では、クライアントコンピュータで、各メソッドに関する複数種類の時間をユーザが同時に参照できるようにし、さらに同一パッケージ、同一クラス、同一メソッドについての統計データをユーザが確認することができるように表示する場合について説明する。
【００７０】
本実施の形態のソフトウエア動作監視システム１は、前述の第２の実施の形態の構成と略同じ構成を備えているので詳細な説明は省略し、ソフトウエア動作監視システム１の処理の流れについてのみ説明する。
ユーザは、クライアントコンピュータ３の監視対象設定手段３３で、監視対象のＪａｖａプログラムを指定する。監視要求送信手段３４は、監視対象のＪａｖａプログラムの通知と、各メソッドの（１）処理時間、（２）CPU時間、（３）WAIT時間、（４）LOCK解除待ち時間、（５）ガベージコレクション処理時間に必要な動作情報の取得要求をサーバコンピュータ２に送信する。これらの時間を取得するためには、メソッドの開始および終了の履歴と、メソッドの開始および終了の時刻などを取得する必要がある。具体的には、（１）の処理時間は、Ｊａｖａ仮想マシン２４の処理時間計測ＡＰＩをメソッドの呼び出し前後に実施し、処理時間を計測し、（２）のCPU時間、（３）のWAIT時間、（４）のLOCK解除待ち時間、および、（５）のガベージコレクション処理時間は、Ｊａｖａ仮想マシン２４のＪＭＸというＪａｖａ仮想マシン２４の動作に関する統計情報を取得する機能を利用し、各計測項目の取得処理をメソッドの呼び出し前後に実施する。
【００７１】
サーバコンピュータ２は監視対象のＪａｖａプログラムの通知と動作情報の取得要求をクライアントコンピュータ３から受信して、前述の第２の実施の形態と同様に、図５のＳ１０２〜Ｓ１０７の処理を行って動作情報が取得され、サーバコンピュータ２からクライアントコンピュータ３に動作情報が送信される。
【００７２】
動作情報を受信したクライアントコンピュータ３は、これらの動作情報から各メソッドごとに（１）処理時間、（２）CPU時間、（３）WAIT時間、（４）LOCK解除待ち時間、（５）ガベージコレクション処理時間を算出する。同じパッケージ、同じクラス、同じメソッドに分類して、各処理時間（１）〜（５）をクラス図上に表示できる状態にする。さらに、受信した全ての動作情報に基づいて、同一パッケージ、同一クラス、同一メソッドについて以下の統計情報を求めて蓄積していく。
１．総合計時間
２．平均時間
３．最大時間
４．メソッドの呼び出し回数（Ｊａｖａプログラム内で各メソッドが呼び出された回数）
【００７３】
動作情報はサーバコンピュータ２からクライアントコンピュータ３に随時送信し（具体的には、例えば、所定の時間間隔で送信）、随時統計情報を算出する。統計情報はクラス図上に表示されている各パッケージ名、クラス名、メソッド名と対応させて表示する。
【００７４】
これにより、クライアントコンピュータ３はリアルタイムに、Ｊａｖａプログラムの各パッケージ、クラス、メソッドの処理時間について自動分類をすることができ、ユーザが時間のかかる処理の原因を分析するために利用することができる。
【００７５】
次に、第４の実施の形態について説明する。本実施の形態では、監視対象のプログラムが使用しているリソースに関するリソース情報を取得し、このリソース情報と上述の第１〜３の実施の形態で得られた動作情報を時系列に沿って表示することで、各プログラムの状態の複合的な監視情報を提供する場合について説明する。
【００７６】
本実施の形態のソフトウエア動作監視システム１は、前述の第２の実施の形態の構成と略同じ構成を備えているが、図９に示すように、クライアントコンピュータ３は、さらに、サーバコンピュータ２に対し一定時間ごとにサーバコンピュータ２が監視している監視用Ｊａｖａプログラムのリソース使用状況を取得要求するリソース情報要求手段３４１と、サーバコンピュータ２からリソース情報を受信するリソース情報受信手段３５１が設けられる。また、サーバコンピュータ２には、さらに、クライアントコンピュータ３からリソース情報の取得要求を受信するリソース要求受信手段２５１と、リソース情報の取得要求に応じて監視用Ｊａｖａプログラムが使用しているリソース情報を取得するリソース情報取得手段２５２と、クライアントコンピュータ３にリソース情報を送信するリソース情報送信手段２９１が設けられる。
【００７７】
リソース情報として、具体的には、下記の情報を取得する。
１．  CPU時間
２．  オブジェクトサイズ
３．  オブジェクト数
４．  ガーベージコレクタ時間
５．  スレッド数
６．  スワップ回数
７．  データ受信量
８．  データ送信量
９．  ヒープメモリの占有量
１０．ファイル出力量
１１．ファイル入力量
１２．仮想マシンメモリ
１３．非ヒープメモリの占有量
１４．物理メモリの占有量
１５．VMスループット
１６．ファイナライズ待ちオブジェクト数
１７．各コレクションの要素数
１８．レスポンス回数
１９．レスポンス時間（平均、最大、最小）
２０．HttpSessionのインスタンス数
２１．APサーバのワーカスレッド数
【００７８】
次に、本実施の形態のソフトウエア動作監視システム１の処理の流れについて説明する。本実施の形態のソフトウエア動作監視システム１は、前述の第１〜３の実施の形態と同様に、監視対象のＪａｖａプログラムの該当箇所を監視コードに書き直して監視用Ｊａｖａプログラムを生成して、監視用Ｊａｖａプログラムを実行して取得した動作情報をクライアントコンピュータ３へ送信する。
【００７９】
さらに、本実施の形態のソフトウエア動作監視システム１では、上述のように監視コードに書き直した監視用Ｊａｖａプログラムを実行しながら動作情報を取得する処理と平行して以下の処理を行う。
【００８０】
まず、クライアントコンピュータ３のリソース情報要求手段３４１は、サーバコンピュータ２に対して、一定時間間隔で監視用Ｊａｖａプログラムのリソース使用状況の取得要求を送信する。サーバコンピュータ２は、リソース要求受信手段２５１でリソース使用状況の取得要求を受信すると、子プログラムのリソース情報取得手段２５２で現在実行中の監視Ｊａｖａプログラムが使用しているリソースの使用状況の情報を取得する。サーバコンピュータ２で取得されたリソースの使用状況の情報は、リソース情報送信手段２９１でクライアントコンピュータ３に送信される。具体的には、Ｊａｖａ仮想マシン２４が提供している現在実行中のプログラムのリソース情報取得機能を利用して、リソース情報を取得する。例えば、ＣＰＵの使用率については、リソース情報取得機能からはＣＰＵの使用時間のみが取得できるので、５秒おきにデータを取得している場合には、メソッド呼び出しの直前と直後で取得したＣＰＵの使用時間の差分を、５秒で割ったものをＣＰＵの使用率とする。
【００８１】
クライアントコンピュータ３は、リソース情報受信手段３５１で受信したリソース情報に基づいて、各リソースについて図１０に示すようなグラフを作成する。図１０はＣＰＵの使用率の変化を示している。また、平行してサーバコンピュータ２から送信された動作情報から問題の発生が発見された場合は、同じグラフ上に問題が発生したことを示すアイコンｉｃｏｎを表示してもよい。こうすることで、ユーザがソフトウエア全体のリソース使用状況と、問題発生のタイミングを把握することを可能にする。
【００８２】
さらに、グラフとともに表示された問題発生を示すアイコンをクリックすることで、該当する問題発生時の動作情報について画面に表示することができる。図１０の例では、ＣＰＵの使用率が高く異常が発生していると考えられる部分が枠Ｆで囲んである。
【００８３】
クライアントコンピュータ３は、長期の稼動により過去のリソース情報が膨大になった場合には、グラフには古いデータは表示せず、ファイルにデータとして保存しておく。また、クライアントコンピュータ３はグラフの描画時に過去に通知のあった動作情報についても、時系列を合わせてグラフと一緒に保存しておき、過去のグラフと動作情報の時系列を合わせて表示を行いたい場合には、画面を切り替えて表示する。例えば、アイコンをクリックすることでグラフを動作情報と一緒に表示できるようにする。
【００８４】
以上詳細に説明したように、Ｊａｖａプログラムの動作状態の複合的な監視ができるため、ユーザはＪａｖａプログラム全体の情報と関連付けて問題の原因を分析するために利用することができる。
また、上述の各実施の形態において、監視用Ｊａｖａプログラム生成手段２７で監視コードをメソッドの前後に挿入する場合、Ｊａｖａプログラム中の全てのメソッドの動作を監視するようにすると、Ｊａｖａプログラムの実際の動作よりもかなりオーバーヘッドが大きくなるため好ましくない。そこで、実際には該監視を行うプログラムは、予め指定のあったメソッドについての動作情報の取得のみを行うようにする。このようにすることで、パフォーマンスの低下をほとんど招かないようにして、ユーザは長期にわたって動作情報を取得して監視することが可能になり、従来の監視技術では実施が難しい長期間に実行した時の問題点を把握しやすくなる。
【００８５】
また、この監視するメソッドについては、クライアントコンピュータ３の監視要求送信手段３４から通知される度に、監視用Ｊａｖａプログラム生成手段２７を用いて随時変更できるようにするのが好ましい。これにより、所定のメソッドに問題が発生した場合に、問題の発生したメソッドと関連していると考えられるメソッドを監視対象に追加するようにクライアントコンピュータ３からサーバコンピュータ２に通知すれば、監視用Ｊａｖａプログラム生成手段２７でさらに、新しく監視対象として追加されたメソッドを呼び出している部分に監視コードを追加して、詳細な分析を行うことができる。
【００８６】
このようにプログラム記憶領域２３にロードされているＪａｖａプログラムに対して必要に応じて随時監視コードを挿入することにより、本来のＪａｖａプログラムにかかる処理時間を大きく変えることなく、監視が必要な部分のみ詳細な動作情報を取得することができる。
【符号の説明】
【００８７】
１    ソフトウエア動作監視システム
２    サーバコンピュータ
３    クライアントコンピュータ
４    ネットワーク
２１  補助記憶装置
２２、３２  通信部
２３  プログラム記憶領域
２４  Ｊａｖａ仮想マシン
２５  監視要求受信手段
２６  プログラム読込手段
２７  監視用Ｊａｖａプログラム生成手段
２８  監視プログラム実行手段
２９  動作情報送信手段
３０  入力装置
３１  表示装置
３３  監視対象設定手段
３４  監視要求送信手段
３５  動作情報受信手段
３６、３６ａ  分析手段
３７、３７ａ  表示手段
２５１  リソース要求受信手段
２５２  リソース情報取得手段
２６１  クラス情報送信手段
２９１  リソース情報送信手段
３４１  リソース情報要求手段
３５１  リソース情報受信手段
３５２  クラス情報受信手段
【図１】
2010033543.tif 000003
【図２】
2010033543.tif 000004
【図３】
2010033543.tif 000005
【図４】
2010033543.tif 000006
【図５】
2010033543.tif 000007
【図９】
2010033543.tif 000008
【図６】
2010033543.tif 000009
【図７】
2010033543.tif 000010
【図８】
2010033543.tif 000011
【図１０】
2010033543.tif 000012
【手続補正書】
【提出日】平成21年8月17日(2009.8.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
Ｊａｖａ（登録商標、以下同じ）プログラムを実行するためのＪａｖａ仮想マシンを備えたサーバコンピュータと、該サーバコンピュータとネットワークを介して接続されたクライアントコンピュータとを有するソフトウエア動作監視システムにおいて、
前記サーバコンピュータが、
前記クライアントコンピュータから監視対象とすべきＪａｖａプログラムを特定する情報の通知および該Ｊａｖａプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、
通知された前記監視対象のＪａｖａプログラムを一時的に記憶するプログラム記憶手段と、
該プログラム記憶手段に記憶されたＪａｖａプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、ＪａｖａのＢＣＩ機能を用いて前記監視命令を挿入した監視用Ｊａｖａプログラムを生成する監視用Ｊａｖａプログラム生成手段と、
該監視用Ｊａｖａプログラム生成手段により生成された前記監視用Ｊａｖａプログラムを前記Ｊａｖａ仮想マシンにより実行する監視プログラム実行手段と、
該監視プログラム実行手段により前記監視用Ｊａｖａプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段とを備え、
前記クライアントコンピュータが、
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、
前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、
受信した前記動作情報を分析する分析手段と、
該分析手段により得られた分析結果を表示する表示手段と、
前記取得要求された動作情報の変更を前記サーバコンピュータに送信する変更手段とを備え、
前記変更手段により前記変更が前記サーバコンピュータに送信された際、前記監視用Ｊａｖａプログラム生成手段により該変更に応じた前記監視命令を挿入した監視用Ｊａｖａプログラムを再び生成することを特徴とするソフトウエア動作監視システム。
【請求項２】
前記監視命令が、前記監視用Ｊａｖａプログラム中の各メソッドを実行した履歴の記録を前記動作情報として出力するものであり、
前記監視用Ｊａｖａプログラム生成手段が、前記Ｊａｖａプログラム中の監視対象となるメソッドの開始および終了部分を検索して前記監視命令を挿入するものであり、
前記分析手段が、前記メソッドを実行した履歴の記録に基づいて複数のメソッドの関係を分析するものであることを特徴とする請求項１記載のソフトウエア動作監視システム。
【請求項３】
前記監視命令が、前記監視対象のメソッドの開始および終了の履歴の記録を動作情報として出力するものであり、
前記クライアントコンピュータが、前記監視用Ｊａｖａプログラム中の複数のメソッドそれぞれのメソッド名および該メソッドが属するクラス名を前記サーバコンピュータより受信するクラス情報受信手段をさらに備え、
前記分析手段が、前記受信したメソッド名および該メソッドのクラス名に基づいて、各メソッドを該メソッドが属するクラスにそれぞれ分類するとともに、前記メソッドの開始および終了の履歴の記録に基づいて、各メソッドが属するクラスおよび各クラスから呼び出されるメソッドの関係を分析するものであり、
前記表示手段が、前記各メソッドが属するクラスおよび各クラスから呼び出されるメソッドの関係を表すクラス図を表示するものであることを特徴とする請求項２記載のソフトウエア動作監視システム。
【請求項４】
前記分析手段が、前記動作情報を分析して問題となる部分を検出するとともに、前記メソッドの開始および終了の履歴の記録に基づいて前記問題が検出された部分がいずれのメソッドにおいて生じた問題であるかを特定するものであり、
前記表示手段が、前記クラス図上において問題が生じた前記メソッドおよび該メソッドの属するクラスの少なくともいずれか一方が認識可能となるように表示するものであることを特徴とする請求項３記載のソフトウエア動作監視システム。
【請求項５】
請求項１に記載のソフトウエア動作監視システムに使用されるサーバコンピュータであって、
前記クライアントコンピュータから監視対象とすべきＪａｖａプログラムを特定する情報の通知および該Ｊａｖａプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、
通知された前記監視対象のＪａｖａプログラムを一時的に記憶するプログラム記憶手段と、
該プログラム記憶手段に記憶されたＪａｖａプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、ＪａｖａのＢＣＩ機能を用いて前記監視命令を挿入した監視用Ｊａｖａプログラムを生成する監視用Ｊａｖａプログラム生成手段と、
該監視用Ｊａｖａプログラム生成手段により生成された前記監視用Ｊａｖａプログラムを前記Ｊａｖａ仮想マシンにより実行する監視プログラム実行手段と、
該監視プログラム実行手段により前記監視用Ｊａｖａプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段とを備えたことを特徴とするサーバコンピュータ。
【請求項６】
請求項１に記載のソフトウエア動作監視システムに使用されるクライアントコンピュータであって、
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、
前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、
受信した前記動作情報を分析する分析手段と、
該分析手段により得られた分析結果を表示する表示手段と、
前記取得要求された動作情報の変更を前記サーバコンピュータに送信する変更手段と、
を備えたことを特徴とするクライアントコンピュータ。
【請求項７】
請求項１に記載のソフトウエア動作監視システムに使用されるサーバコンピュータを、
前記クライアントコンピュータから監視対象とすべきＪａｖａプログラムを特定する情報の通知および該Ｊａｖａプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、
通知された前記監視対象のＪａｖａプログラムを一時的に記憶するプログラム記憶手段と、
該プログラム記憶手段に記憶されたＪａｖａプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、ＪａｖａのＢＣＩ機能を用いて前記監視命令を挿入した監視用Ｊａｖａプログラムを生成する監視用Ｊａｖａプログラム生成手段と、
該監視用Ｊａｖａプログラム生成手段により生成された前記監視用Ｊａｖａプログラムを前記Ｊａｖａ仮想マシンにより実行する監視プログラム実行手段と、
該監視プログラム実行手段により前記監視用Ｊａｖａプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段として機能させるためのプログラム。
【請求項８】
請求項１に記載のソフトウエア動作監視システムに使用されるクライアントコンピュータを、
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、
前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、
受信した前記動作情報を分析する分析手段と、
該分析手段により得られた分析結果を表示する表示手段と、
前記取得要求された動作情報の変更を前記サーバコンピュータに送信する変更手段として機能させるためのプログラム。