JP2010033543A - ソフトウエア動作監視システム、そのクライアントコンピュータおよびサーバコンピュータ、並びに、そのプログラム - Google Patents
ソフトウエア動作監視システム、そのクライアントコンピュータおよびサーバコンピュータ、並びに、そのプログラム Download PDFInfo
- Publication number
- JP2010033543A JP2010033543A JP2009122736A JP2009122736A JP2010033543A JP 2010033543 A JP2010033543 A JP 2010033543A JP 2009122736 A JP2009122736 A JP 2009122736A JP 2009122736 A JP2009122736 A JP 2009122736A JP 2010033543 A JP2010033543 A JP 2010033543A
- Authority
- JP
- Japan
- Prior art keywords
- monitoring
- program
- java
- java program
- operation information
- 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.)
- Pending
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】プログラムが実際に動作する環境に近い状態でかつリアルタイムにプログラムを監視することを可能にする。
【解決手段】サーバコンピュータ2は、クライアントコンピュータ3から監視対象のJavaプログラムの通知および問題解析に必要な動作情報の取得要求を監視要求受信手段25で受信して、監視対象のJavaプログラムをプログラム記憶領域23にロードし、監視用Javaプログラム生成手段27でロードされたJavaプログラムの中に動作情報を出力するための監視命令を挿入した監視用Javaプログラムを生成する。監視用Javaプログラムを実行して動作情報を取得して、クライアントコンピュータ3に送信し、クライアントコンピュータ3では、サーバコンピュータ2より受信した動作情報を分析手段36で分析して分析結果を表示装置31に表示する。
【選択図】図2
【解決手段】サーバコンピュータ2は、クライアントコンピュータ3から監視対象のJavaプログラムの通知および問題解析に必要な動作情報の取得要求を監視要求受信手段25で受信して、監視対象のJavaプログラムをプログラム記憶領域23にロードし、監視用Javaプログラム生成手段27でロードされたJavaプログラムの中に動作情報を出力するための監視命令を挿入した監視用Javaプログラムを生成する。監視用Javaプログラムを実行して動作情報を取得して、クライアントコンピュータ3に送信し、クライアントコンピュータ3では、サーバコンピュータ2より受信した動作情報を分析手段36で分析して分析結果を表示装置31に表示する。
【選択図】図2
Description
本発明はJava(登録商標、以下同じ)言語で書かれたプログラムの実行を監視するためのソフトウエア動作監視システム、そのクライアントコンピュータおよびサーバコンピュータ、並びに、そのプログラムに関するものである。
従来より、ソフトウエアの品質を向上させるための手法として、その内部動作を調査して不具合(バグ)を除去するため、プロファイラやデバッガに代表されるソフトウエアの開発環境が提供されてきた。
近年、製品開発後すぐに商品化を行うために、プログラムをFLASHメモリに書き込んで出荷が行われる。そこで、製品に近い状態でデバックを行うために、製品に用いられるFLASHメモリにプログラムを書き込んだ状態で、ICE(インサーキットエミュレータ)を使って、プログラムの所定の位置にブレークポイントを設定してプログラムが止まった状態でメモリやレジスタなどを確認してデバックを行っていた(例えば、特許文献1)。
しかしながら、これら従来型のソフトウエアのデバッグ手法は、ソフトウエアの動作を監視するためにICEなどの大規模な監視システムが必要とされる。また、ICEなどを用いてデバックを行う場合には、ブレークポイントを設定するためにプログラムの一部分が度々書き直される。FLASHメモリはブロック単位にプログラムの書き換えが行われるために、デバッグする際ブレークポイントが設定された部分のプログラムの書き直しに時間がかかり、実際にプログラムが動作する動作環境とは程遠い状態でデバックされることになる。
そこで、本発明は、上記事情に鑑み、実際に動作する環境に近い状態でかつリアルタイムにプログラムを監視することが可能なソフトウエア動作監視システムを提供することを目的とするものである。
本発明のソフトウエア動作監視システムは、Javaプログラムを実行するためのJava仮想マシンを備えたサーバコンピュータと、該サーバコンピュータとネットワークを介して接続されたクライアントコンピュータとを有するソフトウエア動作監視システムであり、
前記サーバコンピュータが、
前記クライアントコンピュータから監視対象とすべきJavaプログラムを特定する情報の通知および該Javaプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、通知された前記監視対象のJavaプログラムを一時的に記憶するプログラム記憶手段と、該プログラム記憶手段に記憶されたJavaプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、JavaのBCI機能を用いて前記監視命令を挿入した監視用Javaプログラムを生成する監視用Javaプログラム生成手段と、該監視用Javaプログラム生成手段により生成された前記監視用Javaプログラムを前記Java仮想マシンにより実行する監視プログラム実行手段と、該監視プログラム実行手段により前記監視用Javaプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段とを備え、
前記クライアントコンピュータが、
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、受信した前記動作情報を分析する分析手段と、該分析手段により得られた分析結果を表示する表示手段とを備えるものであることを特徴とする。
前記サーバコンピュータが、
前記クライアントコンピュータから監視対象とすべきJavaプログラムを特定する情報の通知および該Javaプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、通知された前記監視対象のJavaプログラムを一時的に記憶するプログラム記憶手段と、該プログラム記憶手段に記憶されたJavaプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、JavaのBCI機能を用いて前記監視命令を挿入した監視用Javaプログラムを生成する監視用Javaプログラム生成手段と、該監視用Javaプログラム生成手段により生成された前記監視用Javaプログラムを前記Java仮想マシンにより実行する監視プログラム実行手段と、該監視プログラム実行手段により前記監視用Javaプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段とを備え、
前記クライアントコンピュータが、
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、受信した前記動作情報を分析する分析手段と、該分析手段により得られた分析結果を表示する表示手段とを備えるものであることを特徴とする。
本発明のソフトウエア動作監視システムに使用されるサーバコンピュータは、
前記クライアントコンピュータから監視対象とすべきJavaプログラムを特定する情報の通知および該Javaプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、通知された前記監視対象のJavaプログラムを一時的に記憶するプログラム記憶手段と、該プログラム記憶手段に記憶されたJavaプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、JavaのBCI機能を用いて前記監視命令を挿入した監視用Javaプログラムを生成する監視用Javaプログラム生成手段と、該監視用Javaプログラム生成手段により生成された前記監視用Javaプログラムを前記Java仮想マシンにより実行する監視プログラム実行手段と、該監視プログラム実行手段により前記監視用Javaプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段とを備えたことを特徴とするものである。
前記クライアントコンピュータから監視対象とすべきJavaプログラムを特定する情報の通知および該Javaプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、通知された前記監視対象のJavaプログラムを一時的に記憶するプログラム記憶手段と、該プログラム記憶手段に記憶されたJavaプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、JavaのBCI機能を用いて前記監視命令を挿入した監視用Javaプログラムを生成する監視用Javaプログラム生成手段と、該監視用Javaプログラム生成手段により生成された前記監視用Javaプログラムを前記Java仮想マシンにより実行する監視プログラム実行手段と、該監視プログラム実行手段により前記監視用Javaプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段とを備えたことを特徴とするものである。
本発明のソフトウエア動作監視システムに使用されるクライアントコンピュータは、
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、受信した前記動作情報を分析する分析手段と、該分析手段により得られた分析結果を表示する表示手段を備えたことを特徴とするものである。
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、受信した前記動作情報を分析する分析手段と、該分析手段により得られた分析結果を表示する表示手段を備えたことを特徴とするものである。
本発明のソフトウエア動作監視システムに使用されるサーバコンピュータにおいて実行されるプログラムは、前記サーバコンピュータを、
前記クライアントコンピュータから監視対象とすべきJavaプログラムを特定する情報の通知および該Javaプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、通知された前記監視対象のJavaプログラムを一時的に記憶するプログラム記憶手段と、該プログラム記憶手段に記憶されたJavaプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、JavaのBCI機能を用いて前記監視命令を挿入した監視用Javaプログラムを生成する監視用Javaプログラム生成手段と、該監視用Javaプログラム生成手段により生成された前記監視用Javaプログラムを前記Java仮想マシンにより実行する監視プログラム実行手段と、該監視プログラム実行手段により前記監視用Javaプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段として機能させることを特徴とするものである。
前記クライアントコンピュータから監視対象とすべきJavaプログラムを特定する情報の通知および該Javaプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、通知された前記監視対象のJavaプログラムを一時的に記憶するプログラム記憶手段と、該プログラム記憶手段に記憶されたJavaプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、JavaのBCI機能を用いて前記監視命令を挿入した監視用Javaプログラムを生成する監視用Javaプログラム生成手段と、該監視用Javaプログラム生成手段により生成された前記監視用Javaプログラムを前記Java仮想マシンにより実行する監視プログラム実行手段と、該監視プログラム実行手段により前記監視用Javaプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段として機能させることを特徴とするものである。
本発明のソフトウエア動作監視システムに使用されるクライアントコンピュータにおいて実行されるプログラムは、前記クライアントコンピュータを、
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、受信した前記動作情報を分析する分析手段と、該分析手段により得られた分析結果を表示する表示手段として機能させることを特徴とするものである。
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、受信した前記動作情報を分析する分析手段と、該分析手段により得られた分析結果を表示する表示手段として機能させることを特徴とするものである。
「動作情報」とは、監視対象のJavaプログラムをJava仮想マシン上で動作させながら取得できる情報であり、監視対象のJavaプログラムの動作を追跡することができる情報である。例えば、ソフトウエアの使用中の資源、処理時間、実行履歴などがある。
「監視命令」は、動作情報を出力する処理と監視命令を挿入する前の元の命令の処理を行うことが可能な命令であり、「監視命令を挿入する」とは、元のJavaプログラムの命令の一部を監視命令に置き換えて、元の命令の処理と動作情報を出力する処理が実行できるようにすることをいう。
また、監視命令が、前記監視用Javaプログラム中の各メソッドを実行した履歴の記録を前記動作情報として出力するものである場合には、
前記監視用Javaプログラム生成手段は、前記Javaプログラム中の監視対象となるメソッドの開始および終了部分を検索して前記監視命令を挿入するものであり、
前記分析手段が、前記メソッドを実行した履歴の記録に基づいて複数のメソッドの関係を分析するようにするのが望ましい。
前記監視用Javaプログラム生成手段は、前記Javaプログラム中の監視対象となるメソッドの開始および終了部分を検索して前記監視命令を挿入するものであり、
前記分析手段が、前記メソッドを実行した履歴の記録に基づいて複数のメソッドの関係を分析するようにするのが望ましい。
また、前記監視視命令が、前記監視対象のメソッドの開始および終了の履歴の記録を動作情報として出力するものであり、
前記クライアントコンピュータが、前記監視用Javaプログラム中の複数のメソッドそれぞれのメソッド名および該メソッドが属するクラス名を前記サーバコンピュータより受信するクラス情報受信手段をさらに備え、
前記分析手段が、前記受信したメソッド名および該メソッドのクラス名に基づいて、各メソッドを該メソッドが属するクラスにそれぞれ分類するとともに、前記メソッドの開始および終了の履歴の記録に基づいて、各メソッドが属するクラスおよび各クラスから呼び出されるメソッドの関係を分析するものであり、
前記表示手段が、前記各メソッドが属するクラスおよび各クラスから呼び出されるメソッドの関係を表すクラス図を表示するようにするのが望ましい。
前記クライアントコンピュータが、前記監視用Javaプログラム中の複数のメソッドそれぞれのメソッド名および該メソッドが属するクラス名を前記サーバコンピュータより受信するクラス情報受信手段をさらに備え、
前記分析手段が、前記受信したメソッド名および該メソッドのクラス名に基づいて、各メソッドを該メソッドが属するクラスにそれぞれ分類するとともに、前記メソッドの開始および終了の履歴の記録に基づいて、各メソッドが属するクラスおよび各クラスから呼び出されるメソッドの関係を分析するものであり、
前記表示手段が、前記各メソッドが属するクラスおよび各クラスから呼び出されるメソッドの関係を表すクラス図を表示するようにするのが望ましい。
さらに、前記分析手段が、前記動作情報を分析して問題となる部分を検出するとともに、前記メソッドの開始および終了の履歴の記録に基づいて前記問題が検出された部分がいずれのメソッドにおいて生じた問題であるかを特定するものであり、
前記表示手段が、前記クラス図上において問題が生じた前記メソッドおよび該メソッドの属するクラスの少なくともいずれか一方が認識可能となるように表示するものが望ましい。
前記表示手段が、前記クラス図上において問題が生じた前記メソッドおよび該メソッドの属するクラスの少なくともいずれか一方が認識可能となるように表示するものが望ましい。
「認識可能となるように表示する」は、表示されているメソッド名またはクラス名を点滅、強調表示、あるいは反転して、問題が発生したメソッドまたはクラスを、問題が発生していないメソッドまたはクラスと区別できるように表示することをいう。
本発明のソフトウエア動作監視システムは、Java仮想マシンを備えたサーバコンピュータで、監視対象のJavaプログラムに監視命令を挿入し、監視命令を挿入したJavaプログラムを実行して動作中のJavaプログラムの動作情報を取得してクライアントコンピュータに送信し、クライアントコンピュータで動作情報の解析を行うことにより、Javaプログラムを実際の動作環境に近い状態で問題解析することができる。
また、メソッドを実行した履歴の記録を動作情報として取得することにより、複数のメソッドの関係を分析することができる。
また、監視対象のJavaプログラムの各メソッドのメソッド名とクラス名を含むクラス情報とともに、Javaプログラムのメソッドの前後に監視命令を挿入して、監視対象のメソッドの開始および終了の履歴の記録を動作情報として取得することにより、各クラスに属するメソッドと、各クラスから呼ばれるメソッドの関係をクラス図として表示することができる。
さらに、動作情報を分析して問題となる部分を検出するとともに、メソッドの開始および終了の履歴の記録から問題が検出された部分を特定して、クラス図上に問題の発生したメソッドあるいはクラスが認識できるように表示することで、問題部分を容易に発見することができる。
以下、図面を参照して本発明の実施の形態について説明する。図1は、本発明の第1の実施の形態の概略構成図である。
図1に示すように、本実施の形態のソフトウエア動作監視システム1は、サーバコンピュータ2と、クライアントコンピュータ3と、サーバコンピュータ2とクライアントコンピュータ3とを接続するネットワーク4とで概略構成される。サーバコンピュータ2およびクライアントコンピュータ3は、CD−ROM等の記録媒体からインストールされたプログラム、あるいは、インターネット等のネットワーク4経由で接続されたサーバコンピュータ(サーバコンピュータ2とは異なるコンピュータ)からダウンロードされたプログラムがインストールされることによって各機能が提供される。
サーバコンピュータ2は、図2に示すように、CPU(中央処理装置)(不図示)と、CPUとバスで接続されたRAMなどの揮発性素子からなる主記憶装置(不図示)と、データを永続的に記憶する不揮発性素子からなる補助記憶装置21と、通信部22とを備えた汎用の比較的処理能力の高いコンピュータであり、クライアントコンピュータ3からの要求に応じて所定の機能やデータを提供する。
主記憶装置は、プログラムを起動した際にプログラムを記憶するプログラム記憶領域(プログラム記憶手段)23とそのプログラムが動作するために必要なワークエリア等に用いられる。
補助記憶装置21は、種々のプログラムやデータを長期間記憶するために用いられる。具体的には、ハードディスク、MO、CD−R、磁気テープなどである。以下、本実施の形態では補助記憶装置21がハードディスクである場合について説明する。
本実施の形態のサーバコンピュータ2には、Java仮想マシン24がインストールされ、Java仮想マシン24を用いてJavaプログラムを実行したときの動作を監視してクライアントコンピュータ3に動作情報を提供する監視機能を備える。Java仮想マシン24は、Javaプログラムのバイトコードをサーバコンピュータ2のネイティブコードに変換して実行するものであり、ハードディスクに記憶されているJavaプログラムを主記憶装置上のプログラム記憶領域23にロード(記憶)して実行する。
クライアントコンピュータ3は、図2に示すように、CPU(不図示)と、主記憶装置(不図示)と、補助記憶装置(不図示)と、通信部32とを備えたパソコンなどのコンピュータであり、サーバコンピュータ2からネットワーク4を介して動作情報を受信し、受信した動作情報を分析する分析機能を備える。さらに、クライアントコンピュータ3には、キーボード・マウスなどの入力装置30とCRTなどの表示装置31が設けられ、サーバコンピュータ2に対して行う要求の入力、および、動作情報を分析した分析結果が表示できるように構成される。
ネットワーク4には、インターネットやイントラネットで標準的に使われるTCP/IPなどを用いるのが好ましい。
以下、本発明の第1の実施形態のサーバコンピュータ2の監視機能およびクライアントコンピュータ3の分析機能について詳細に説明する。図2は、サーバコンピュータ2とクライアントコンピュータ3の機能構成図を示す。
サーバコンピュータ2の監視機能は、クライアントコンピュータ3から監視対象のJavaプログラムの通知および問題解析に必要な動作情報の取得要求を受信する監視要求受信手段25と、監視対象のJavaプログラムをプログラム記憶領域23に読み込むプログラム読込手段26と、プログラム記憶領域23に読み込まれたJavaプログラムの動作を監視するためにJavaプログラムを改変する監視用Javaプログラム生成手段27と、監視用Javaプログラムを実行する監視プログラム実行手段28と、動作情報をクライアントコンピュータ3に送信する動作情報送信手段29とを備える。これらの監視機能は、Java仮想マシン24上で動作するものである。
本実施の形態では、Javaプログラムは、Java言語で記述されたソースコードをJavaバイトコードにコンパイルしたJavaプログラム本体と、その本体に組み込まれる外部ライブラリを含むものとして以下説明する。
プログラム読込手段26は、クライアントコンピュータ3から通知された監視対象のJavaプログラムをハードディスク21からプログラム記憶領域23に読み込む。
監視用Javaプログラム生成手段27は、プログラム記憶領域23に読み込まれたJavaプログラムの中から監視対象の処理を行うコードを検出して、JavaのBCI機能(JavaのBCI機能の詳細は、米国特許番号6,260,187を参照)を用いて検出されたコードを監視命令(監視コード)に書き直す。この監視コードの挿入により、監視用Javaプログラムが実行されると書き直し前の本来の処理と動作情報を取得する処理が実行される。
動作情報は、Javaプログラムの動作時に得られる情報である。具体的には、例えば、各メソッドの呼び出し履歴、メソッドの実行時間・リソースの変化、SQL文の実行計画、あるいは、実行されたメソッドの実行過程の記録(例えば、スタックトレース)、ロック競合の検出などの問題解析に必要な情報である。
監視プログラム実行手段28は、プログラム記憶領域23に記憶されている監視用JavaプログラムをJava仮想マシン24上で実行させる。
クライアントコンピュータ3の分析機能は、監視対象のJavaプログラムとデバックに必要な動作情報を設定する監視対象設定手段33と、設定された動作情報の取得要求をサーバコンピュータ2に送信する監視要求送信手段34と、サーバコンピュータ2から動作情報を受信する動作情報受信手段35と、動作情報を分析する分析手段36と、分析結果を表示装置31に表示する表示手段37とを備える。
監視対象設定手段33は、ユーザが入力装置30および表示装置31を利用して、監視対象のJavaプログラムと問題解析に必要な動作情報が設定入力できるようなユーザインターフェースを提供する。
例えば、ボトルネックの検出、SQLの分析、ロック競合の検出等のうちどれについて監視するのかを指定できるようなインタフェースを提供する。「SQLの分析」が選択された場合には、さらに、サーバコンピュータ2側でフルスキャンの判定を行うか、クライアントコンピュータ3側でフルスキャンの判定を行うかなどの詳細な設定も行うことができる。
例えば、ボトルネックの検出、SQLの分析、ロック競合の検出等のうちどれについて監視するのかを指定できるようなインタフェースを提供する。「SQLの分析」が選択された場合には、さらに、サーバコンピュータ2側でフルスキャンの判定を行うか、クライアントコンピュータ3側でフルスキャンの判定を行うかなどの詳細な設定も行うことができる。
監視要求送信手段34は、監視対象のJavaプログラムをサーバコンピュータ2に通知するとともに、監視対象設定手段33で設定された動作情報の取得要求をサーバコンピュータ2に送信する。たとえば、監視対象設定手段33でユーザが「SQLの分析」を選択した場合には、実行されたメソッドの履歴とSQLの実行計画などを動作情報として取得するようにサーバコンピュータ2に要求する。
分析手段36は、問題となる動作パターン、例えば、処理時間が異常に長いなどの動作パターンを利用して、サーバコンピュータ2から受信した動作情報がこのような動作パターンに合致するか否かにより問題となる動作が発生した場所を検出する。
表示手段37は、問題となる情報を表示装置31の画面上に表示する。例えば、処理時間が異常に長い場合であれば「メソッドの開始から終了までの間のCPU時間が閾値を超えています」などの情報を、表示装置31の画面上に一覧にして表示する。
以下、本実施の形態のソフトウエア動作監視システム1の処理の流れについて、図3のフローチャートに従って説明をする。本実施の形態では、「SQLの分析」を行う場合を例に、クライアントコンピュータ3で動作情報から問題の発生の判定を行う手法について説明する。
まず、「SQLの分析」を行う場合には、ユーザは、クライアントコンピュータ3の監視対象設定手段33を用いて、監視対象のJavaプログラムの指定と「SQLの分析」を選択する。監視要求送信手段34は、監視対象のJavaプログラムの通知と、「SQLの分析」に必要な動作情報の取得要求をサーバコンピュータ2に送信する(S100)。「SQLの分析」では、例えば、各メソッドの実行履歴・処理時間やSQLの実行計画などの取得を要求する。
サーバコンピュータ2の監視要求受信手段25が、監視対象のJavaプログラムの通知と動作情報の取得要求をクライアントコンピュータ3から受信すると(S101)、サーバコンピュータ2のオペレータはプログラム読込手段26を用いて、通知されたJavaプログラムをハードディスク21から検索して、メモリのプログラム記憶領域23に読み込む(ロード)(S102)。また、監視対象のJavaプログラムをロードすると同時に、Javaプログラムを監視する子プログラムがメモリ上に読み込まれる。読み込まれた子プログラムは、Javaプログラムを実行する前に監視用Javaプログラム生成処理(監視用Javaプログラム生成手段)27を開始する(S103)。監視用Javaプログラム生成処理27は、クライアントコンピュータ3から送信された動作情報の取得要求に応じて、プログラム記憶領域23に記憶されているJavaプログラムの所定のコードを監視コードに書き直す。「SQLの分析」を行う場合は、メソッド呼び出しの前後のコードを各メソッドの開始直前と終了直後の記録と開始直前と終了直後の時間を取得するための監視コードに書き直し、さらに、Javaプログラムの外部ライブラリのデータベースにアクセスするコード部分はSQLの実行計画を取得するための監視コードに書き直して、監視用Javaプログラムを生成する(S104)。
監視プログラム実行手段28で監視用Javaプログラムの実行が開始されると、監視用Javaプログラムのメソッドが実行される度、あるいは、データベースにアクセスする度に、子プログラムで書き換えた監視コードの処理が実行され(S105)、子プログラムに各メソッドの開始・終了、メソッド呼び出し前後の時間、SQLの実行計画などが通知される。子プログラムは、メソッドの開始・終了の通知を受けると、動作情報送信手段29でメソッドの開始・終了を動作情報として、随時クライアントコンピュータ3へ送信する。メソッドの開始・終了の履歴の記録は動作傾向を示す情報として有益であるので、通知を受けると即座にクライアントコンピュータ3へ送信される(S106)。また、通知を受けた子プログラムは、メソッドの開始および終了の履歴の記録と開始直前および終了直後の時刻とから、各メソッドの処理時間を計算し、所定の閾値以上の処理時間がかかっているメソッドがないかを調べる。所定の閾値を超過して必要以上に時間がかかっているメソッドがある場合にはクライアントコンピュータ3へ異常が発生したことを通知する。
異常が発生した場合には、さらに、動作情報送信手段29は、メソッドの処理時間などを動作情報としてクライアントコンピュータ3へ送信するが、所定の閾値を超過して必要以上に時間がかかっているメソッドがある場合は、メソッドの処理時間などに加えて、SQLの実行計画を動作情報としてクライアントコンピュータ3へ送信する(S106)。
クライアントコンピュータ3は、動作情報受信手段35で動作情報を受信し(S107)、受信した動作情報を分析手段36で分析する(S108)。分析は予め用意した様々な数値の組み合わせを用いて問題が発生しているか否かを判定する(S109)。例えば、各メソッドの開始および終了の履歴とSQLの実行計画が取得された時刻などから、いずれのメソッドでデータベースにアクセスしたかを見つける。さらに、取得した実行計画よりフルスキャンでテーブルアクセスを行っていると思われる計画が存在しているか否かにより、テーブルのフルスキャンなどの問題が発生しているか否かの判定を行う。
フルスキャンが発生していると判定された場合には、表示手段37で、フルスキャンが発生したことを画面上に警告表示するとともにSQLの実行計画などの詳細な情報を表示する(S110)。また、フルスキャンが発生したメソッド名なども表示する。
いずれの問題にもあてはまらない場合、すなわち、動作情報が閾値内であるような場合は何もしない。
フルスキャンが発生していると判定された場合には、表示手段37で、フルスキャンが発生したことを画面上に警告表示するとともにSQLの実行計画などの詳細な情報を表示する(S110)。また、フルスキャンが発生したメソッド名なども表示する。
いずれの問題にもあてはまらない場合、すなわち、動作情報が閾値内であるような場合は何もしない。
問題が画面上に表示された場合は、ユーザは表示された情報を確認して、例えば、「フルスキャンを行ったテーブルの定義は、フルスキャンを回避する構造に変更できないか」、「フルスキャンを行ったプログラムの該当箇所は、データベースへのアクセスを適切に実施しているか」について検討する。また、ユーザがクライアントコンピュータ3に表示された結果を見て情報の過不足を感じた場合には、監視対象設定手段33で、取得要求する動作情報を変更する。例えば、実行時のパフォーマンスの分析を行う場合は処理時間の閾値を調整する。
取得する動作情報の設定が変更された場合には、再度設定された動作情報の取得要求をサーバコンピュータ2に送信して、S104〜S110の処理を再び行う。
上述では、サーバコンピュータ2においてユーザが手動で監視対象のJavaプログラムをプログラム記憶領域23にロードする場合について説明したが、クライアントコンピュータ3からの通知に応じて、自動的にロードするようにしてもよい。
上述では、サーバコンピュータ2においてユーザが手動で監視対象のJavaプログラムをプログラム記憶領域23にロードする場合について説明したが、クライアントコンピュータ3からの通知に応じて、自動的にロードするようにしてもよい。
次に、第2の実施の形態について説明する。本実施の形態では、クライアントコンピュータ3、監視対象Javaプログラムに含まれるメソッドおよびそのメソッドが属するクラスの相関を表すクラス図を表示し、クラス図上で問題の発生場所を確認できるようにする手法について説明する。
本実施の形態の概略構成は第1の実施の形態と同じであるので詳細な説明は省略する。図4に、本実施の形態のソフトウエア動作監視システム1のサーバコンピュータ2の監視機能およびクライアントコンピュータ3の分析機能の構成を示す。第1の実施の形態と略同じ構成は同一の符号を付して詳細な説明は省略し、異なる構成についてのみ詳細に説明する。
サーバコンピュータ2の監視機能は、監視要求受信手段25と、プログラム読込手段26と、監視用Javaプログラム生成手段27と、監視プログラム実行手段28と、動作情報送信手段29とに加えて、監視対象のプログラムをJava仮想マシン上にロードする際に取得した監視対象のJavaプログラムに含まれる複数のメソッドとそのメソッドのクラスをクラス情報としてクライアントコンピュータ3に送信するクラス情報送信手段261とを備える。
クライアントコンピュータ3の分析機能は、監視対象設定手段33と、監視要求送信手段34と、動作情報受信手段35と、クラス情報を受信するクラス情報受信手段352と、動作情報を分析するとともにメソッドとクラスの関係を分析する分析手段36aと、メソッドとクラスの関係を表すクラス図と分析結果を表示装置31に表示する表示手段37aとを備える。
分析手段36aは、受信したクラス情報に基づいて、各メソッドをそのメソッドが属するクラスにそれぞれ分類する。さらに、メソッドの開始および終了の履歴の記録に基づいて、各メソッドが属するクラスと各クラスから呼び出されるメソッドの関係を分析する。さらに、動作情報を分析して、問題の発生場所が同一で数値が一定の範囲内に収まっているか否かなどの条件に応じて、問題の発生しているメソッドやクラスを特定する。
表示手段37aは、分析手段36aの分析結果に基づいて、図6に示すような各メソッドが属するクラス、および、各クラスから呼び出されるメソッドの関係を表すクラス図を表示装置31上に表示する。さらに、問題が発生しているクラスやメソッドを点滅させて、問題の発生場所が特定できるようにする。
以下、本実施の形態のソフトウエア動作監視システム1の処理の流れについて、図5のフローチャートに従って説明をする。本実施の形態では、ボトルネックとなる処理とその原因を見つける場合について説明する。
まず、「ボトルネックの検出」について分析を行う場合には、ユーザは、クライアントコンピュータ3の監視対象設定手段33で、監視対象のJavaプログラムの指定と「ボトルネックの検出」を選択する。監視要求送信手段34は、監視対象のJavaプログラムの通知と、「ボトルネックの検出」に必要な動作情報の取得要求をサーバコンピュータ2に送信する(S100)。
サーバコンピュータ2の監視要求受信手段25が、監視対象のJavaプログラムの通知と動作情報の取得要求をクライアントコンピュータ3から受信すると(S101)、サーバコンピュータ2のオペレータはプログラム読込手段26を用いてJavaプログラムをプログラム記憶領域23にロードする(S102)。このとき、クラス情報送信手段261はロード時に取得した監視対象のプログラムに含まれるメソッドと各メソッドのクラスをクラス情報としてクライアントコンピュータ3に送信する(102−1)。クライアントコンピュータ3はクラス情報受信手段352でクラス情報を受信する(S102−2)。続いて、第1の実施の形態と同様にS103〜S107の処理を行って、サーバコンピュータ2で動作情報を取得して、クライアントコンピュータ3に送信する。
クライアントコンピュータ3は、分析手段36aでサーバコンピュータ2から送信された動作情報を用いて、メソッドの開始および終了の履歴の記録や、メソッドの処理時間などの動作情報と、クラス情報から各メソッドが属するクラスおよび各クラスから呼び出されるメソッドの関係を分析する(S108)。まず、クラス情報に基づいてメソッドをクラスごとにまとめ、表示手段37aで、各クラスに属するメソッド名の一覧を表示する。図6では、各枠の上段がクラス名を示し、その下段にそのクラスに属するメソッド名の一覧を示している。さらに、分析手段36aは、メソッドの開始および終了の履歴の記録から、メソッドの呼び出しの順番を抽出し、各クラスから呼び出されるメソッドを見つける。この結果に応じて、表示手段37aで、各クラスから呼び出されるメソッドの関係をクラス図として表示装置31の画面に表示する。
例えば、
(1)メソッドAの呼び出し開始と呼び出し終了の間に別のメソッドBの呼び出しがある場合は、メソッドAはメソッドBを内部で呼び出していると分析でき、メソッドBはメソッドAに依存していると判断できる。
(2)また、メソッドAの呼び出し開始と呼び出し終了の後に、別のメソッドBの呼び出しがある場合、メソッドAの処理完了後にメソッドBが実行されるため、メソッドAとメソッドBの間には依存関係はないと判断できる。
図6は、矢印の先のメソッドが矢印の元にあるクラスから呼び出されていることを表している。また、クラス図は、図7に示すようにクラス単位でユーザが自由に再配置して、ユーザが見やすいようにクラス図を変更できるようにするのが好ましい。また、クラス図を表示位置まで含めてクライアントコンピュータ3のハードディスクに保存できるようにすれば、条件を変えて、再度監視用Javaプログラムを実行する場合にも、保存したクラス図を読み出して同じ状態で観察を行うことができる。
(1)メソッドAの呼び出し開始と呼び出し終了の間に別のメソッドBの呼び出しがある場合は、メソッドAはメソッドBを内部で呼び出していると分析でき、メソッドBはメソッドAに依存していると判断できる。
(2)また、メソッドAの呼び出し開始と呼び出し終了の後に、別のメソッドBの呼び出しがある場合、メソッドAの処理完了後にメソッドBが実行されるため、メソッドAとメソッドBの間には依存関係はないと判断できる。
図6は、矢印の先のメソッドが矢印の元にあるクラスから呼び出されていることを表している。また、クラス図は、図7に示すようにクラス単位でユーザが自由に再配置して、ユーザが見やすいようにクラス図を変更できるようにするのが好ましい。また、クラス図を表示位置まで含めてクライアントコンピュータ3のハードディスクに保存できるようにすれば、条件を変えて、再度監視用Javaプログラムを実行する場合にも、保存したクラス図を読み出して同じ状態で観察を行うことができる。
次に、分析手段36aは、各メソッドの処理時間からボトルネックとなっている箇所を見つける(S109)。さらに、パフォーマンスのボトルネックとなる処理とその原因を、類似した項目、例えば、問題の発生場所や値の範囲などについてまとめ、さらに、問題の発生場所が同一で数値が一定の範囲内に収まっているなどの条件に応じて、図6に示すように、ユーザに必要な情報を画面に表示する(S110)。
例えば、メソッドの開始および終了の履歴の記録やメソッドの処理時間から、以下の2つの観点から類似する情報を検出し、総括情報を画面に表示する。
1. 問題の発生場所が同一である
2. 数値が一定の範囲内にまとまっている
さらに、以下の類似点に注目して分類していく。
(1)動作情報の発生場所が、同一パッケージ名、同一クラス名、同一メソッド名だった場合にまとめる候補とする。ここで、パッケージとは、ひとまとまりの機能を示すものをいい、いくつかのクラスをまとめたものをいう。例えば、画面操作に関するクラスをまとめたものを同一のパッケージとする。各クラスが同一パッケージであるか否かについてはクラス情報より判定する。
(2)動作情報に含まれる処理時間の範囲を数カテゴリ、例えば処理時間が1秒〜100秒までばらつきがある場合には、1〜20秒、21秒〜40秒、41秒〜60秒、61秒〜80秒、81秒〜100秒の5カテゴリに分ける。同一カテゴリの処理時間をもつ動作情報は、類似した動作情報とする。処理時間が類似した動作情報は、最初に発生場所(メソッド)ごとにまとめる。次に各メソッドの処理時間の処理時間平均を求めて総括情報として画面に表示する。
2. 数値が一定の範囲内にまとまっている
さらに、以下の類似点に注目して分類していく。
(1)動作情報の発生場所が、同一パッケージ名、同一クラス名、同一メソッド名だった場合にまとめる候補とする。ここで、パッケージとは、ひとまとまりの機能を示すものをいい、いくつかのクラスをまとめたものをいう。例えば、画面操作に関するクラスをまとめたものを同一のパッケージとする。各クラスが同一パッケージであるか否かについてはクラス情報より判定する。
(2)動作情報に含まれる処理時間の範囲を数カテゴリ、例えば処理時間が1秒〜100秒までばらつきがある場合には、1〜20秒、21秒〜40秒、41秒〜60秒、61秒〜80秒、81秒〜100秒の5カテゴリに分ける。同一カテゴリの処理時間をもつ動作情報は、類似した動作情報とする。処理時間が類似した動作情報は、最初に発生場所(メソッド)ごとにまとめる。次に各メソッドの処理時間の処理時間平均を求めて総括情報として画面に表示する。
以上のように、クライアントコンピュータ3は、ボトルネックになる処理と類似した要因をまとめ、図6に示すように、必要な情報を要約した形でユーザに伝えることができる。図6の例では、各メソッドの横に表示されている数値は、左の数値がそのメソッドの処理にかかった最大の時間を示し、右の数値はそのメソッドの処理にかかった平均時間を示している。
また、第1の実施の形態で説明した「SQLの分析」も「ボトルネックの検出」と同時に行う場合には、SQLの実行計画が取得されたクラスの枠内に、実行計画の詳細情報を図6の右下に示すように表示する。
また、第1の実施の形態で説明した「SQLの分析」も「ボトルネックの検出」と同時に行う場合には、SQLの実行計画が取得されたクラスの枠内に、実行計画の詳細情報を図6の右下に示すように表示する。
さらに、各動作情報のうち、ユーザによって指定された閾値を超過していた動作情報を検出し、その発生場所のメソッドの呼び出しを検出する。そこで、上述で生成されたクラス図において、該当のメソッドを点滅させることで、ユーザに問題の発生と調査すべき箇所を通知する。具体的には、監視用プログラムのメソッド呼び出しの前後に監視コードを挿入した監視用Javaプログラムを実行することにより、メソッドの開始および終了の履歴が記録される。ユーザによって指定された項目(例えば、処理時間)の閾値を超過する動作情報があった場合には、メソッドの開始および終了の履歴より動作情報はどのメソッドに関連しているかを抽出して、クラス図において該当部分の点滅を一定時間行う。図8に問題を検出したメソッドを強調表示した一例を示す。図8では、メソッドを強調表示しているが、クラス単位で強調表示してもよい。
このように、クライアントコンピュータ3では監視対象のJavaプログラムを動作させながら、ソフトウエアの構成を自動的に分析し、問題の発生している場所をリアルタイムで強調表示をすることができる。
上述では、クライアントコンピュータ3で、各メソッドの処理時間からボトルネックとなっている箇所を見つける場合について説明したが、サーバコンピュータ2で各メソッドの処理時間を蓄積しておき、処理時間が所定の閾値を越えた場合にのみクライアントコンピュータ3にボトルネックが発生したことを知らせる動作情報を送信するようにしてもよい。
次に、第3の実施の形態について説明する。本実施の形態では、クライアントコンピュータで、各メソッドに関する複数種類の時間をユーザが同時に参照できるようにし、さらに同一パッケージ、同一クラス、同一メソッドについての統計データをユーザが確認することができるように表示する場合について説明する。
本実施の形態のソフトウエア動作監視システム1は、前述の第2の実施の形態の構成と略同じ構成を備えているので詳細な説明は省略し、ソフトウエア動作監視システム1の処理の流れについてのみ説明する。
ユーザは、クライアントコンピュータ3の監視対象設定手段33で、監視対象のJavaプログラムを指定する。監視要求送信手段34は、監視対象のJavaプログラムの通知と、各メソッドの(1)処理時間、(2)CPU時間、(3)WAIT時間、(4)LOCK解除待ち時間、(5)ガベージコレクション処理時間に必要な動作情報の取得要求をサーバコンピュータ2に送信する。これらの時間を取得するためには、メソッドの開始および終了の履歴と、メソッドの開始および終了の時刻などを取得する必要がある。具体的には、(1)の処理時間は、Java仮想マシン24の処理時間計測APIをメソッドの呼び出し前後に実施し、処理時間を計測し、(2)のCPU時間、(3)のWAIT時間、(4)のLOCK解除待ち時間、および、(5)のガベージコレクション処理時間は、Java仮想マシン24のJMXというJava仮想マシン24の動作に関する統計情報を取得する機能を利用し、各計測項目の取得処理をメソッドの呼び出し前後に実施する。
ユーザは、クライアントコンピュータ3の監視対象設定手段33で、監視対象のJavaプログラムを指定する。監視要求送信手段34は、監視対象のJavaプログラムの通知と、各メソッドの(1)処理時間、(2)CPU時間、(3)WAIT時間、(4)LOCK解除待ち時間、(5)ガベージコレクション処理時間に必要な動作情報の取得要求をサーバコンピュータ2に送信する。これらの時間を取得するためには、メソッドの開始および終了の履歴と、メソッドの開始および終了の時刻などを取得する必要がある。具体的には、(1)の処理時間は、Java仮想マシン24の処理時間計測APIをメソッドの呼び出し前後に実施し、処理時間を計測し、(2)のCPU時間、(3)のWAIT時間、(4)のLOCK解除待ち時間、および、(5)のガベージコレクション処理時間は、Java仮想マシン24のJMXというJava仮想マシン24の動作に関する統計情報を取得する機能を利用し、各計測項目の取得処理をメソッドの呼び出し前後に実施する。
サーバコンピュータ2は監視対象のJavaプログラムの通知と動作情報の取得要求をクライアントコンピュータ3から受信して、前述の第2の実施の形態と同様に、図5のS102〜S107の処理を行って動作情報が取得され、サーバコンピュータ2からクライアントコンピュータ3に動作情報が送信される。
動作情報を受信したクライアントコンピュータ3は、これらの動作情報から各メソッドごとに(1)処理時間、(2)CPU時間、(3)WAIT時間、(4)LOCK解除待ち時間、(5)ガベージコレクション処理時間を算出する。同じパッケージ、同じクラス、同じメソッドに分類して、各処理時間(1)〜(5)をクラス図上に表示できる状態にする。さらに、受信した全ての動作情報に基づいて、同一パッケージ、同一クラス、同一メソッドについて以下の統計情報を求めて蓄積していく。
1.総合計時間
2.平均時間
3.最大時間
4.メソッドの呼び出し回数(Javaプログラム内で各メソッドが呼び出された回数)
1.総合計時間
2.平均時間
3.最大時間
4.メソッドの呼び出し回数(Javaプログラム内で各メソッドが呼び出された回数)
動作情報はサーバコンピュータ2からクライアントコンピュータ3に随時送信し(具体的には、例えば、所定の時間間隔で送信)、随時統計情報を算出する。統計情報はクラス図上に表示されている各パッケージ名、クラス名、メソッド名と対応させて表示する。
これにより、クライアントコンピュータ3はリアルタイムに、Javaプログラムの各パッケージ、クラス、メソッドの処理時間について自動分類をすることができ、ユーザが時間のかかる処理の原因を分析するために利用することができる。
次に、第4の実施の形態について説明する。本実施の形態では、監視対象のプログラムが使用しているリソースに関するリソース情報を取得し、このリソース情報と上述の第1〜3の実施の形態で得られた動作情報を時系列に沿って表示することで、各プログラムの状態の複合的な監視情報を提供する場合について説明する。
本実施の形態のソフトウエア動作監視システム1は、前述の第2の実施の形態の構成と略同じ構成を備えているが、図9に示すように、クライアントコンピュータ3は、さらに、サーバコンピュータ2に対し一定時間ごとにサーバコンピュータ2が監視している監視用Javaプログラムのリソース使用状況を取得要求するリソース情報要求手段341と、サーバコンピュータ2からリソース情報を受信するリソース情報受信手段351が設けられる。また、サーバコンピュータ2には、さらに、クライアントコンピュータ3からリソース情報の取得要求を受信するリソース要求受信手段251と、リソース情報の取得要求に応じて監視用Javaプログラムが使用しているリソース情報を取得するリソース情報取得手段252と、クライアントコンピュータ3にリソース情報を送信するリソース情報送信手段291が設けられる。
リソース情報として、具体的には、下記の情報を取得する。
1. CPU時間
2. オブジェクトサイズ
3. オブジェクト数
4. ガーベージコレクタ時間
5. スレッド数
6. スワップ回数
7. データ受信量
8. データ送信量
9. ヒープメモリの占有量
10.ファイル出力量
11.ファイル入力量
12.仮想マシンメモリ
13.非ヒープメモリの占有量
14.物理メモリの占有量
15.VMスループット
16.ファイナライズ待ちオブジェクト数
17.各コレクションの要素数
18.レスポンス回数
19.レスポンス時間(平均、最大、最小)
20.HttpSessionのインスタンス数
21.APサーバのワーカスレッド数
1. CPU時間
2. オブジェクトサイズ
3. オブジェクト数
4. ガーベージコレクタ時間
5. スレッド数
6. スワップ回数
7. データ受信量
8. データ送信量
9. ヒープメモリの占有量
10.ファイル出力量
11.ファイル入力量
12.仮想マシンメモリ
13.非ヒープメモリの占有量
14.物理メモリの占有量
15.VMスループット
16.ファイナライズ待ちオブジェクト数
17.各コレクションの要素数
18.レスポンス回数
19.レスポンス時間(平均、最大、最小)
20.HttpSessionのインスタンス数
21.APサーバのワーカスレッド数
次に、本実施の形態のソフトウエア動作監視システム1の処理の流れについて説明する。本実施の形態のソフトウエア動作監視システム1は、前述の第1〜3の実施の形態と同様に、監視対象のJavaプログラムの該当箇所を監視コードに書き直して監視用Javaプログラムを生成して、監視用Javaプログラムを実行して取得した動作情報をクライアントコンピュータ3へ送信する。
さらに、本実施の形態のソフトウエア動作監視システム1では、上述のように監視コードに書き直した監視用Javaプログラムを実行しながら動作情報を取得する処理と平行して以下の処理を行う。
まず、クライアントコンピュータ3のリソース情報要求手段341は、サーバコンピュータ2に対して、一定時間間隔で監視用Javaプログラムのリソース使用状況の取得要求を送信する。サーバコンピュータ2は、リソース要求受信手段251でリソース使用状況の取得要求を受信すると、子プログラムのリソース情報取得手段252で現在実行中の監視Javaプログラムが使用しているリソースの使用状況の情報を取得する。サーバコンピュータ2で取得されたリソースの使用状況の情報は、リソース情報送信手段291でクライアントコンピュータ3に送信される。具体的には、Java仮想マシン24が提供している現在実行中のプログラムのリソース情報取得機能を利用して、リソース情報を取得する。例えば、CPUの使用率については、リソース情報取得機能からはCPUの使用時間のみが取得できるので、5秒おきにデータを取得している場合には、メソッド呼び出しの直前と直後で取得したCPUの使用時間の差分を、5秒で割ったものをCPUの使用率とする。
クライアントコンピュータ3は、リソース情報受信手段351で受信したリソース情報に基づいて、各リソースについて図10に示すようなグラフを作成する。図10はCPUの使用率の変化を示している。また、平行してサーバコンピュータ2から送信された動作情報から問題の発生が発見された場合は、同じグラフ上に問題が発生したことを示すアイコンiconを表示してもよい。こうすることで、ユーザがソフトウエア全体のリソース使用状況と、問題発生のタイミングを把握することを可能にする。
さらに、グラフとともに表示された問題発生を示すアイコンをクリックすることで、該当する問題発生時の動作情報について画面に表示することができる。図10の例では、CPUの使用率が高く異常が発生していると考えられる部分が枠Fで囲んである。
クライアントコンピュータ3は、長期の稼動により過去のリソース情報が膨大になった場合には、グラフには古いデータは表示せず、ファイルにデータとして保存しておく。また、クライアントコンピュータ3はグラフの描画時に過去に通知のあった動作情報についても、時系列を合わせてグラフと一緒に保存しておき、過去のグラフと動作情報の時系列を合わせて表示を行いたい場合には、画面を切り替えて表示する。例えば、アイコンをクリックすることでグラフを動作情報と一緒に表示できるようにする。
以上詳細に説明したように、Javaプログラムの動作状態の複合的な監視ができるため、ユーザはJavaプログラム全体の情報と関連付けて問題の原因を分析するために利用することができる。
また、上述の各実施の形態において、監視用Javaプログラム生成手段27で監視コードをメソッドの前後に挿入する場合、Javaプログラム中の全てのメソッドの動作を監視するようにすると、Javaプログラムの実際の動作よりもかなりオーバーヘッドが大きくなるため好ましくない。そこで、実際には該監視を行うプログラムは、予め指定のあったメソッドについての動作情報の取得のみを行うようにする。このようにすることで、パフォーマンスの低下をほとんど招かないようにして、ユーザは長期にわたって動作情報を取得して監視することが可能になり、従来の監視技術では実施が難しい長期間に実行した時の問題点を把握しやすくなる。
また、上述の各実施の形態において、監視用Javaプログラム生成手段27で監視コードをメソッドの前後に挿入する場合、Javaプログラム中の全てのメソッドの動作を監視するようにすると、Javaプログラムの実際の動作よりもかなりオーバーヘッドが大きくなるため好ましくない。そこで、実際には該監視を行うプログラムは、予め指定のあったメソッドについての動作情報の取得のみを行うようにする。このようにすることで、パフォーマンスの低下をほとんど招かないようにして、ユーザは長期にわたって動作情報を取得して監視することが可能になり、従来の監視技術では実施が難しい長期間に実行した時の問題点を把握しやすくなる。
また、この監視するメソッドについては、クライアントコンピュータ3の監視要求送信手段34から通知される度に、監視用Javaプログラム生成手段27を用いて随時変更できるようにするのが好ましい。これにより、所定のメソッドに問題が発生した場合に、問題の発生したメソッドと関連していると考えられるメソッドを監視対象に追加するようにクライアントコンピュータ3からサーバコンピュータ2に通知すれば、監視用Javaプログラム生成手段27でさらに、新しく監視対象として追加されたメソッドを呼び出している部分に監視コードを追加して、詳細な分析を行うことができる。
このようにプログラム記憶領域23にロードされているJavaプログラムに対して必要に応じて随時監視コードを挿入することにより、本来のJavaプログラムにかかる処理時間を大きく変えることなく、監視が必要な部分のみ詳細な動作情報を取得することができる。
1 ソフトウエア動作監視システム
2 サーバコンピュータ
3 クライアントコンピュータ
4 ネットワーク
21 補助記憶装置
22、32 通信部
23 プログラム記憶領域
24 Java仮想マシン
25 監視要求受信手段
26 プログラム読込手段
27 監視用Javaプログラム生成手段
28 監視プログラム実行手段
29 動作情報送信手段
30 入力装置
31 表示装置
33 監視対象設定手段
34 監視要求送信手段
35 動作情報受信手段
36、36a 分析手段
37、37a 表示手段
251 リソース要求受信手段
252 リソース情報取得手段
261 クラス情報送信手段
291 リソース情報送信手段
341 リソース情報要求手段
351 リソース情報受信手段
352 クラス情報受信手段
2 サーバコンピュータ
3 クライアントコンピュータ
4 ネットワーク
21 補助記憶装置
22、32 通信部
23 プログラム記憶領域
24 Java仮想マシン
25 監視要求受信手段
26 プログラム読込手段
27 監視用Javaプログラム生成手段
28 監視プログラム実行手段
29 動作情報送信手段
30 入力装置
31 表示装置
33 監視対象設定手段
34 監視要求送信手段
35 動作情報受信手段
36、36a 分析手段
37、37a 表示手段
251 リソース要求受信手段
252 リソース情報取得手段
261 クラス情報送信手段
291 リソース情報送信手段
341 リソース情報要求手段
351 リソース情報受信手段
352 クラス情報受信手段
Claims (8)
- Java(登録商標、以下同じ)プログラムを実行するためのJava仮想マシンを備えたサーバコンピュータと、該サーバコンピュータとネットワークを介して接続されたクライアントコンピュータとを有するソフトウエア動作監視システムにおいて、
前記サーバコンピュータが、
前記クライアントコンピュータから監視対象とすべきJavaプログラムを特定する情報の通知および該Javaプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、
通知された前記監視対象のJavaプログラムを一時的に記憶するプログラム記憶手段と、
該プログラム記憶手段に記憶されたJavaプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、JavaのBCI機能を用いて前記監視命令を挿入した監視用Javaプログラムを生成する監視用Javaプログラム生成手段と、
該監視用Javaプログラム生成手段により生成された前記監視用Javaプログラムを前記Java仮想マシンにより実行する監視プログラム実行手段と、
該監視プログラム実行手段により前記監視用Javaプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段とを備え、
前記クライアントコンピュータが、
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、
前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、
受信した前記動作情報を分析する分析手段と、
該分析手段により得られた分析結果を表示する表示手段とを備えたことを特徴とするソフトウエア動作監視システム。 - 前記監視命令が、前記監視用Javaプログラム中の各メソッドを実行した履歴の記録を前記動作情報として出力するものであり、
前記監視用Javaプログラム生成手段が、前記Javaプログラム中の監視対象となるメソッドの開始および終了部分を検索して前記監視命令を挿入するものであり、
前記分析手段が、前記メソッドを実行した履歴の記録に基づいて複数のメソッドの関係を分析するものであることを特徴とする請求項1記載のソフトウエア動作監視システム。 - 前記監視視命令が、前記監視対象のメソッドの開始および終了の履歴の記録を動作情報として出力するものであり、
前記クライアントコンピュータが、前記監視用Javaプログラム中の複数のメソッドそれぞれのメソッド名および該メソッドが属するクラス名を前記サーバコンピュータより受信するクラス情報受信手段をさらに備え、
前記分析手段が、前記受信したメソッド名および該メソッドのクラス名に基づいて、各メソッドを該メソッドが属するクラスにそれぞれ分類するとともに、前記メソッドの開始および終了の履歴の記録に基づいて、各メソッドが属するクラスおよび各クラスから呼び出されるメソッドの関係を分析するものであり、
前記表示手段が、前記各メソッドが属するクラスおよび各クラスから呼び出されるメソッドの関係を表すクラス図を表示するものであることを特徴とする請求項2記載のソフトウエア動作監視システム。 - 前記分析手段が、前記動作情報を分析して問題となる部分を検出するとともに、前記メソッドの開始および終了の履歴の記録に基づいて前記問題が検出された部分がいずれのメソッドにおいて生じた問題であるかを特定するものであり、
前記表示手段が、前記クラス図上において問題が生じた前記メソッドおよび該メソッドの属するクラスの少なくともいずれか一方が認識可能となるように表示するものであることを特徴とする請求項3記載のソフトウエア動作監視システム。 - 請求項1に記載のソフトウエア動作監視システムに使用されるサーバコンピュータであって、
前記クライアントコンピュータから監視対象とすべきJavaプログラムを特定する情報の通知および該Javaプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、
通知された前記監視対象のJavaプログラムを一時的に記憶するプログラム記憶手段と、
該プログラム記憶手段に記憶されたJavaプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、JavaのBCI機能を用いて前記監視命令を挿入した監視用Javaプログラムを生成する監視用Javaプログラム生成手段と、
該監視用Javaプログラム生成手段により生成された前記監視用Javaプログラムを前記Java仮想マシンにより実行する監視プログラム実行手段と、
該監視プログラム実行手段により前記監視用Javaプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段とを備えたことを特徴とするサーバコンピュータ。 - 請求項1に記載のソフトウエア動作監視システムに使用されるクライアントコンピュータであって、
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、
前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、
受信した前記動作情報を分析する分析手段と、
該分析手段により得られた分析結果を表示する表示手段とを備えたことを特徴とするクライアントコンピュータ。 - 請求項1に記載のソフトウエア動作監視システムに使用されるサーバコンピュータを、
前記クライアントコンピュータから監視対象とすべきJavaプログラムを特定する情報の通知および該Javaプログラムの動作上の問題解析に必要な動作情報の取得要求を受信する監視要求受信手段と、
通知された前記監視対象のJavaプログラムを一時的に記憶するプログラム記憶手段と、
該プログラム記憶手段に記憶されたJavaプログラムの中から、前記取得要求された動作情報を出力するための監視命令を挿入するプログラム部分を検索して、JavaのBCI機能を用いて前記監視命令を挿入した監視用Javaプログラムを生成する監視用Javaプログラム生成手段と、
該監視用Javaプログラム生成手段により生成された前記監視用Javaプログラムを前記Java仮想マシンにより実行する監視プログラム実行手段と、
該監視プログラム実行手段により前記監視用Javaプログラムを実行して出力された前記動作情報を前記クライアントコンピュータに送信する動作情報送信手段として機能させるためのプログラム。 - 請求項1に記載のソフトウエア動作監視システムに使用されるクライアントコンピュータを、
前記サーバコンピュータに前記通知および前記取得要求を送信する監視要求送信手段と、
前記サーバコンピュータの前記動作情報送信手段から前記動作情報を受信する動作情報受信手段と、
受信した前記動作情報を分析する分析手段と、
該分析手段により得られた分析結果を表示する表示手段として機能させるためのプログラム。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2009122736A JP2010033543A (ja) | 2008-06-24 | 2009-05-21 | ソフトウエア動作監視システム、そのクライアントコンピュータおよびサーバコンピュータ、並びに、そのプログラム |
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2008164009 | 2008-06-24 | ||
| JP2009122736A JP2010033543A (ja) | 2008-06-24 | 2009-05-21 | ソフトウエア動作監視システム、そのクライアントコンピュータおよびサーバコンピュータ、並びに、そのプログラム |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2010033543A true JP2010033543A (ja) | 2010-02-12 |
Family
ID=41737880
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2009122736A Pending JP2010033543A (ja) | 2008-06-24 | 2009-05-21 | ソフトウエア動作監視システム、そのクライアントコンピュータおよびサーバコンピュータ、並びに、そのプログラム |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2010033543A (ja) |
Cited By (12)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2011238233A (ja) * | 2010-05-11 | 2011-11-24 | Computer Associates Think Inc | 動的計測を介してのカスタムコードの診断を効率化するためのメソッド呼び出しの検出 |
| JP2014517968A (ja) * | 2011-05-31 | 2014-07-24 | ヒューレット−パッカード デベロップメント カンパニー エル.ピー. | アプリケーションのセキュリティ検査 |
| JP2014170500A (ja) * | 2013-03-05 | 2014-09-18 | Toshiba Tec Corp | 情報処理装置およびプログラム |
| JP2016001494A (ja) * | 2015-08-26 | 2016-01-07 | ヒューレット−パッカード デベロップメント カンパニー エル.ピー.Hewlett‐Packard Development Company, L.P. | アプリケーションのセキュリティ検査 |
| US9411616B2 (en) | 2011-12-09 | 2016-08-09 | Ca, Inc. | Classloader/instrumentation approach for invoking non-bound libraries |
| JP2016528650A (ja) * | 2013-08-22 | 2016-09-15 | オラクル・インターナショナル・コーポレイション | クラウドベースのターゲットデバッグ |
| US9501650B2 (en) | 2011-05-31 | 2016-11-22 | Hewlett Packard Enterprise Development Lp | Application security testing |
| JP2020524344A (ja) * | 2017-06-23 | 2020-08-13 | ニュー レリック インコーポレイテッド | 適応アプリケーションの性能分析 |
| CN113010367A (zh) * | 2020-11-02 | 2021-06-22 | 证通股份有限公司 | 针对java进程垃圾回收的监控方法及监控系统 |
| JP2022154258A (ja) * | 2021-03-30 | 2022-10-13 | 富士通株式会社 | 不正箇所特定プログラム、不正箇所特定装置、及び不正箇所特定方法 |
| JP2022174856A (ja) * | 2021-05-12 | 2022-11-25 | アズビル株式会社 | プログラム開発装置及びプログラム開発システム |
| JP7295541B1 (ja) | 2022-01-28 | 2023-06-21 | 株式会社インサイトテクノロジー | 情報処理システム、情報処理装置および情報処理方法、並びに、プログラム |
Citations (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH1124901A (ja) * | 1997-06-27 | 1999-01-29 | Internatl Business Mach Corp <Ibm> | プログラム情報の解析・表示方法およびシステム |
| JP2004094374A (ja) * | 2002-08-29 | 2004-03-25 | Ntt Comware Corp | ロギングシステム |
| JP2004258728A (ja) * | 2003-02-24 | 2004-09-16 | Nippon Telegr & Teleph Corp <Ntt> | プログラム実行時間測定方法 |
| JP2005346414A (ja) * | 2004-06-03 | 2005-12-15 | Fujitsu Ltd | トレース処理プログラム、方法及び装置 |
| JP2007265190A (ja) * | 2006-03-29 | 2007-10-11 | Fujitsu Ltd | モジュール組込プログラム、モジュール組込装置およびモジュール組込方法 |
| JP2008059515A (ja) * | 2006-09-04 | 2008-03-13 | Hitachi Software Eng Co Ltd | プログラム実行過程の表示方法及びシステム並びにプログラム |
-
2009
- 2009-05-21 JP JP2009122736A patent/JP2010033543A/ja active Pending
Patent Citations (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH1124901A (ja) * | 1997-06-27 | 1999-01-29 | Internatl Business Mach Corp <Ibm> | プログラム情報の解析・表示方法およびシステム |
| JP2004094374A (ja) * | 2002-08-29 | 2004-03-25 | Ntt Comware Corp | ロギングシステム |
| JP2004258728A (ja) * | 2003-02-24 | 2004-09-16 | Nippon Telegr & Teleph Corp <Ntt> | プログラム実行時間測定方法 |
| JP2005346414A (ja) * | 2004-06-03 | 2005-12-15 | Fujitsu Ltd | トレース処理プログラム、方法及び装置 |
| JP2007265190A (ja) * | 2006-03-29 | 2007-10-11 | Fujitsu Ltd | モジュール組込プログラム、モジュール組込装置およびモジュール組込方法 |
| JP2008059515A (ja) * | 2006-09-04 | 2008-03-13 | Hitachi Software Eng Co Ltd | プログラム実行過程の表示方法及びシステム並びにプログラム |
Cited By (19)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2011238233A (ja) * | 2010-05-11 | 2011-11-24 | Computer Associates Think Inc | 動的計測を介してのカスタムコードの診断を効率化するためのメソッド呼び出しの検出 |
| KR101745758B1 (ko) * | 2011-05-31 | 2017-06-09 | 휴렛 팩커드 엔터프라이즈 디벨롭먼트 엘피 | 애플리케이션 보안 검사 |
| JP2014517968A (ja) * | 2011-05-31 | 2014-07-24 | ヒューレット−パッカード デベロップメント カンパニー エル.ピー. | アプリケーションのセキュリティ検査 |
| US9215247B2 (en) | 2011-05-31 | 2015-12-15 | Hewlett Packard Enterprise Development Lp | Application security testing |
| US9501650B2 (en) | 2011-05-31 | 2016-11-22 | Hewlett Packard Enterprise Development Lp | Application security testing |
| US9411616B2 (en) | 2011-12-09 | 2016-08-09 | Ca, Inc. | Classloader/instrumentation approach for invoking non-bound libraries |
| JP2014170500A (ja) * | 2013-03-05 | 2014-09-18 | Toshiba Tec Corp | 情報処理装置およびプログラム |
| JP2016528650A (ja) * | 2013-08-22 | 2016-09-15 | オラクル・インターナショナル・コーポレイション | クラウドベースのターゲットデバッグ |
| JP2016001494A (ja) * | 2015-08-26 | 2016-01-07 | ヒューレット−パッカード デベロップメント カンパニー エル.ピー.Hewlett‐Packard Development Company, L.P. | アプリケーションのセキュリティ検査 |
| JP2020524344A (ja) * | 2017-06-23 | 2020-08-13 | ニュー レリック インコーポレイテッド | 適応アプリケーションの性能分析 |
| JP6995146B2 (ja) | 2017-06-23 | 2022-01-14 | ニュー レリック インコーポレイテッド | 適応アプリケーションの性能分析 |
| CN113010367A (zh) * | 2020-11-02 | 2021-06-22 | 证通股份有限公司 | 针对java进程垃圾回收的监控方法及监控系统 |
| JP2022154258A (ja) * | 2021-03-30 | 2022-10-13 | 富士通株式会社 | 不正箇所特定プログラム、不正箇所特定装置、及び不正箇所特定方法 |
| JP7568934B2 (ja) | 2021-03-30 | 2024-10-17 | 富士通株式会社 | 不正箇所特定プログラム、不正箇所特定装置、及び不正箇所特定方法 |
| JP2022174856A (ja) * | 2021-05-12 | 2022-11-25 | アズビル株式会社 | プログラム開発装置及びプログラム開発システム |
| JP7675555B2 (ja) | 2021-05-12 | 2025-05-13 | アズビル株式会社 | プログラム開発装置及びプログラム開発システム |
| JP7295541B1 (ja) | 2022-01-28 | 2023-06-21 | 株式会社インサイトテクノロジー | 情報処理システム、情報処理装置および情報処理方法、並びに、プログラム |
| WO2023145794A1 (ja) * | 2022-01-28 | 2023-08-03 | 株式会社インサイトテクノロジー | 情報処理システム、情報処理装置および情報処理方法、並びに、プログラム |
| JP2023110529A (ja) * | 2022-01-28 | 2023-08-09 | 株式会社インサイトテクノロジー | 情報処理システム、情報処理装置および情報処理方法、並びに、プログラム |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP2010033543A (ja) | ソフトウエア動作監視システム、そのクライアントコンピュータおよびサーバコンピュータ、並びに、そのプログラム | |
| US9298589B2 (en) | User interaction analysis of tracer data for configuring an application tracer | |
| US9389992B2 (en) | Multiple tracer configurations applied on a function-by-function level | |
| US9417993B2 (en) | Real time analysis of tracer summaries to change tracer behavior | |
| US9021445B2 (en) | Tracer list for automatically controlling tracer behavior | |
| US9575874B2 (en) | Error list and bug report analysis for configuring an application tracer | |
| US9535818B2 (en) | Identifying high impact bugs | |
| EP3072051B1 (en) | Diagnosing production applications based on process snapshots | |
| US8578340B1 (en) | Recording and replaying computer program execution with recorded execution event breakpoints | |
| CN102053906A (zh) | 用于收集程序运行时信息的系统和方法 | |
| JP2012084150A (ja) | 2パス自動アプリケーション計測 | |
| US11422920B2 (en) | Debugging multiple instances of code using thread patterns | |
| CN111506470B (zh) | 浏览器错误检测和告警方法、装置、设备及存储介质 | |
| US10528456B2 (en) | Determining idle testing periods | |
| US20180337817A1 (en) | Performance evaluation of applications that access external resources | |
| CN108089978B (zh) | 一种分析asp.net应用软件性能及故障的诊断方法 | |
| US20190354468A1 (en) | Code coverage module with testing function identifier | |
| CN112069066A (zh) | 代码覆盖率统计方法、装置、设备及计算机可读存储介质 | |
| CN106294136B (zh) | 并行程序运行期间性能变化的在线检测方法和系统 | |
| US20080082967A1 (en) | Method and system for parameter profile compiling | |
| CN114020580A (zh) | 监测应用系统的性能指标的方法、系统、设备和存储介质 | |
| EP3995966B1 (en) | System and method for automatic application log messages grouping using logging framework code instrumentation | |
| KR100920414B1 (ko) | 트랜잭션의 지정된 수행지점에서 자바 스택을 스냅샷하는자바 프로세스 모니터링 시스템 및 그 방법 | |
| CN114048099A (zh) | Java应用监控方法及装置、存储介质及电子设备 | |
| CN110321130B (zh) | 基于系统调用日志的不可重复编译定位方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20091110 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20100330 |