[go: up one dir, main page]

JP2009064124A - 性能データ収集・表示システム、性能データ表示装置、そのプログラム - Google Patents

性能データ収集・表示システム、性能データ表示装置、そのプログラム Download PDF

Info

Publication number
JP2009064124A
JP2009064124A JP2007229709A JP2007229709A JP2009064124A JP 2009064124 A JP2009064124 A JP 2009064124A JP 2007229709 A JP2007229709 A JP 2007229709A JP 2007229709 A JP2007229709 A JP 2007229709A JP 2009064124 A JP2009064124 A JP 2009064124A
Authority
JP
Japan
Prior art keywords
time
request
function
processing
performance data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2007229709A
Other languages
English (en)
Other versions
JP4867864B2 (ja
Inventor
Kazuto Hiuga
一人 日向
Takashi Itooka
崇 糸岡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fuji Electric Co Ltd
Original Assignee
Fuji Electric Systems Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fuji Electric Systems Co Ltd filed Critical Fuji Electric Systems Co Ltd
Priority to JP2007229709A priority Critical patent/JP4867864B2/ja
Publication of JP2009064124A publication Critical patent/JP2009064124A/ja
Application granted granted Critical
Publication of JP4867864B2 publication Critical patent/JP4867864B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】効率的且つ的確な性能ボトルネック分析を可能とする。
【解決手段】第1の性能データ収集プログラム16は所定のログ出力を行うと共に、セッションID、リクエストIDをスレッド固有変数領域31に格納する。第2の性能データ収集プログラム17は、アプリケーションプログラム(Javaクラス12)からの呼び出しに応じて、スレッド固有変数領域31から取得したセッションID、リクエストIDに対応付けて関数の性能データをログ出力する。ログ記録内容に基づいて、例えば各セッション・リクエスト毎の関数の性能データの表示を行う。
【選択図】図5

Description

本発明は、クライアントとサーバからなるシステムにおいて、クライアントからの要求に応じてサーバ上で実行されるアプリケーションプログラムの、関数単位の性能データ収集方式に関する。
クライアントとサーバからなるシステムにおいて、サーバ上で動作するアプリケーションプログラムの応答が遅いなど性能に問題がある場合に、アプリケーションプログラムの性能(例えば、どの関数の処理に時間がかかっているのか等)を調べる方法としては、アプリケーションプログラムのソースプログラムに性能データ(上記関数の処理時間等)を収集する仕組みを組み込む方法が一般的であった。
図22に、従来のシステム構成及び性能データ収集方式を示す。
図22において、クライアント100は、例えば一般ユーザが所有するパソコン等の汎用コンピュータであり、一般的なOS102環境上でブラウザ等のクライアントプログラム101を実行することにより、不図示のLAN、インターネット等のネットワークを介してWeb/Apサーバ80にアクセスして任意の処理を要求する。例えばホームページ等を表示する。
Web/Apサーバ80は、Webサーバ/Ap(アプリケーション)サーバであり、各種アプリケーションプログラムを実装し、クライアント100からの要求に応じたアプリケーション実行を行い、例えばクライアント100側のディスプレイにホームページの表示等を行わせる。
この各種アプリケーションは、JSP/Servlet81、Javaクラス82より成る。尚、これら各種アプリケーションは、図示の通り、一般的なJava実行環境上(OS85、JavaVM(Java仮想マシン)84、Servletコンテナ83)で実行されることになる。また、JSPは、Java Server Pagesの略である。
各種アプリケーションは、概略的には、JSP/Servlet81が基本動作を行い、JSP/Servlet81が必要なJavaクラス82を随時呼び出し、呼び出されたJavaクラス82のメソッド(関数)の処理が実行される。
上記JSP/Servlet81、Javaクラス82より成る各種アプリケーションのうち任意のアプリケーション(特にJavaクラス82の各メソッド(関数))について、その性能データ(例えば各関数の処理時間等)収集を行いたい場合、開発用PC(パソコン)90上で、まず、当該性能データ収集対象のアプリケーションのソースコードファイルを開いて、オペレータ等が手作業で、このソースプログラムに性能データ収集処理を追加・記述する(図22上に示す(1))。
続いて、この新たなソースコード91(性能データ収集処理が追加記述されたソースコード)をコンパイルして実行モジュール92(性能データ収集機能付き)を生成する(図22上に示す(2))。そして、Web/APサーバ80において、上記性能データ収集対象のアプリケーション(実行モジュール)を、上記性能データ収集機能付きの実行モジュール92に入れ替える(図22上に示す(3))。
その後は、実行モジュール92を実行することで、性能データ(各関数の処理時間等)
収集処理も行われることになる。
例えばサーバ上で動作するアプリケーションプログラムの応答が遅い等、性能に問題があるときに、原因を特定する為に、OS、ミドルウェア、アプリケーションプログラムの性能データ(各関数の処理時間等)を収集して、該収集した性能データを分析してグラフ表示を行うことは、従来から、よく行われていることである。
そして、従来では、上記のように、各アプリケーションプログラム(Javaクラス82等)に性能データ収集処理を埋め込み、各関数の処理時間等を収集して分析することで、例えば図23(a)に示すように関数別に処理時間をグラフ表示する。また、OS、ミドルウェアの性能データは、例えばWindows(登録商標)のパフォーマンスモニタなどの既存の機能により収集でき、収集したデータを例えば図23(b)に示すようにグラフ表示していた。
尚、よく知られているように、Javaにおけるメソッドは“関数”に相当するものであり、上記の通り関数と呼ぶ場合もある。
また、特許文献1に記載の従来技術は、ログ情報採取解析装置に関し、プログラム実行時の動作状況を示すチャートの表示部分とソースプログラムとの対応をとるようにすることを目的としている。この発明では、利用者が指定したチャート上の位置情報からその位置に対応するソースプログラム上の関数名および行番号を知ることが出来る。その逆に、利用者が指定した関数名および行番号から、チャート上の表示位置を知ることができる。
特開平9−259011号公報
上述した従来技術では、以下の課題が発生していた。
(1)アプリケーションプログラムの性能データの収集・集計結果には、各関数毎にこの関数が呼ばれたときのクライアント(ブラウザ)やリクエストを識別する情報が無いので、クライアント/リクエストに対応した関数の処理時間が把握できないため、クライアントやリクエスト固有の問題があった場合に特定が困難であった。
(2)OS/ミドルウェアの性能データとアプリケーションの性能データをそれぞれ別々に表示することしかできない為、アプリケーションの動きとOS/ミドルウェアの状態との相関関係が掴み難く、効率的な原因分析が行えない。
本発明の課題は、各関数毎にその関数実行に係るクライアント/リクエストを識別できる性能データ収集が行えることで、クライアントやリクエスト固有の問題があった場合に特定が容易となり、更にアプリケーションプログラムの関数単位の処理時間と、OS/ミドルウェアのリソース状況を重ね合わせて可視化表示(表、バー、グラフ等による表示)することで、効率的且つ的確な性能ボトルネック分析が可能となる性能データ収集・表示システム、性能データ表示装置、そのプログラムなどを提供することである。
本発明の性能データ収集・表示システムは、任意のクライアントから任意のリクエストを受け付ける毎に、このリクエストに応じたセッションID、リクエストIDを所定の記憶領域に記憶すると共に、該セッションIDとリクエストIDとに対応付けて所定のログ情報を記録する第1の性能データ収集手段と、前記リクエストに応じて所定の1以上の関数の処理を実行するアプリケーション実行手段と、前記アプリケーション実行手段による前記各関数の処理実行時に、前記所定の記憶領域から前記セッションID、リクエストIDを取得して、該セッションIDとリクエストIDとに対応付けて前記各関数の処理実行に係る所定の性能データを前記ログ情報に追加記録する第2の性能データ収集手段と、
OS/ミドルウェアのリソース状況を示すデータを収集するリソース状況データ収集手段と、前記記録されたログ情報に基づいて、任意の前記各リクエストに応じた処理全体の開始日時、終了日時、処理時間を求め、又は前記各関数毎にその関数の処理の開始日時、終了日時、該関数の処理実行に掛かった時間である実行時間を求めて、該求めた情報を前記セッションID及びリクエストIDに対応付けて成る内部データを生成・記憶する内部データ生成・記憶手段と、前記内部データに基づいて、任意の前記各リクエスト毎の処理全体の処理時間又は該処理全体中の各関数の前記実行時間を示す可視化表示を行うと共に、これと同一時間軸上に前記リソース状況データに基づく可視化表示を重ね合わせて表示する表示手段とを有する。
上記性能データ収集・表示システムでは、上記任意のクライアントからの任意のリクエストに応じたセッションIDとリクエストIDとに対応付けて、各関数の性能データ等が記録される。よって、この記録を参照/分析すれば、例えば各セッション・リクエスト毎の処理全体の処理時間やこの処理全体中の各関数の実行時間等が求められ、これとリソース状況データとに基づいて表示を行うことで、問題がある箇所(例えばリソース状況が悪化する時間帯におけるセッション・リクエストの処理等)が、容易に把握できるようになる。あるいは、例えば同じ関数であっても、特定のセッション・リクエストに対応するものの性能データのみが悪ければ(実行時間が長い等)、この特定のセッション・リクエストに固有の何らかの問題があることが推測できる。
また、上記性能データ収集・表示システムにおいて、例えば、前記第2の性能データ収集手段と前記アプリケーション実行手段を実現させるプログラムは、所定のログ出力処理と任意の各ログ出力対象/ログ出力箇所とが記述されたアスペクトソースファイルと、前記関数の処理に係るアプリケーションプログラムとをアスペクトコンパイルすることで生成される。
これにより、各アプリケーションプログラム毎に逐一必要な箇所にログ出力処理を追加するような手間が掛かることは必要なく、1つのアスペクトソースファイルを作成すれば済む。
本発明の性能データ収集・表示システム、性能データ表示装置、そのプログラムなどによれば、特に各関数毎にその関数実行に係るクライアント/リクエストを識別できる性能データ収集が行えることで、クライアントやリクエスト固有の問題があった場合に特定が容易となり、更にアプリケーションプログラムの関数単位の処理時間と、OS/ミドルウェアのリソース状況を重ね合わせて可視化表示(表、バー、グラフ等による表示)することで、効率的且つ的確な性能ボトルネック分析が可能となる。更に、性能データ収集の為の処理を容易に追加可能となる。
以下、図面を参照して本発明の実施の形態について説明する。
図1に、本例のクライアントとサーバからなるシステムのシステム構成図を示す。
図1において、クライアント100は、上記従来のクライアント100と同じであってよく(ブラウザ搭載の一般ユーザのパソコン等)、同一符号を付し、説明は省略する。
図示のWeb/Apサーバ10は、上記従来のWeb/Apサーバ80と同様に、一般的なJava実行環境上(OS15、JavaVM(Java仮想マシン)14、Servletコンテナ13)で、各種アプリケーションが実行されることになる。各種アプリケーションは、JSP/Servlet11、Javaクラス12等より成る。従来で説明したように、JSP/Servlet11が各Javaクラス12を呼び出すものであ
り、各Javaクラス12は1以上のメソッド(関数)を実行するものであり、概略的にはJavaクラス12をメソッド(関数)と見做してもよい。
そして、本例の構成では、Web/Apサーバ10は、更に、第1の性能データ収集プログラム(Servletフィルタ)16と第2の性能データ収集プログラム17を有する。
尚、第1の性能データ収集プログラム(Servletフィルタ)16と第2の性能データ収集プログラム17(その他、JSP/Servlet11、Javaクラス12等の他の各種プログラムも)は、例えば後述する図21に示す記憶部75に格納されており、これをCPU71が読み出し・実行することにより、所定の機能・動作を実現するものであり、以下、特に逐一断らないが、当然、以下の説明における各種プログラムに係る機能・動作の説明は、これら各種プログラムがCPU71等の演算プロセッサにより実行されることにより実現される機能・動作を説明しているものである。
第1の性能データ収集プログラム(Servletフィルタ)16は、Javaのサーバアプリケーション形態の一つであるServletフィルタプログラムであり、Servlet やJSPの実行環境であるServletコンテナ13上で動作する。本プログラムは、アプリケーションプログラムとは別物であり、アプリケーションプログラムの実行環境に配備して利用する。
そして、第1の性能データ収集プログラム(Servletフィルタ)16は、詳しくは後述するように、任意のクライアント100からの任意のリクエストが受信される毎に(更に、その応答毎に)、セッションID、リクエストID、スレッド名、日付時刻情報等を取得して、ログファイルに記録する。また、リクエスト受信時に、上記セッションID、リクエストIDを、所定の記憶領域に記憶して、この記憶領域を介することで、第2の性能データ収集プログラム(Javaクラス)17に渡す。
第2の性能データ収集プログラム(Javaクラス)17は、当該プログラム実行毎に、上記所定の記憶領域を参照する等して上記セッションID、リクエストIDを取得し、更にスレッド名、日付時刻情報、メソッド名(関数名)等を取得して、これらをログファイルに記録する。
第2の性能データ収集プログラム(Javaクラス)17は、例えば後述する図5のように、実行中のアプリケーションプログラム(Javaクラス12)から任意のタイミングで呼び出されることで実行される。この呼び出しタイミングは、例えば任意のログ出力対象のメソッド(関数)の実行時(例えばその開始/終了時等)等となっている。これにより、例えば、実行された関数の日付時刻情報(関数の実行開始/終了時刻等)等に、この関数実行に係るクライアントやリクエストを示すセッションID、リクエストIDが対応付けられて、ログファイルに記録されることになる。
上記のように、アプリケーションプログラム(Javaクラス12)には任意のタイミングでの呼び出し処理が含まれているが、これは最初から存在するわけでなく、必要に応じて追加される。つまり、呼び出し処理を有するアプリケーションプログラム(Javaクラス12)は、必要に応じて、第2の性能データ収集プログラム(Javaクラス)17と共に生成される。この生成処理は、従来のように手間が掛かるものではなく、以下に説明するように容易に生成できる。尚、後述するように、アプリケーションプログラム(Javaクラス12)内に第2の性能データ収集プログラム(Javaクラス)17が含まれる形態であってもよい。
以下、上記アプリケーションプログラム(Javaクラス12)及び第2の性能データ収集プログラム(Javaクラス)17の生成処理について説明する。
アプリケーションプログラム(Javaクラス12)及び第2の性能データ収集プログ
ラム(Javaクラス)17は、アプリケーションプログラムのバイトコードと、当該アプリケーションプログラム内の任意のログ出力対象関数、当該関数内のログ出力箇所(例:関数開始点、関数終了点)、およびログ出力処理を記述したアスペクトプログラムのソースファイルとを、アスペクトコンパイラによりコンパイルすることで生成される。
尚、アスペクトプログラムとは、所謂“アスペクト指向プログラミング”(略してAOPと呼ばれる)手法に係るプログラムである。AOPとは、端的に言えば、システムに渡って横断的に要求される機能を、一箇所に「アスペクト」としてまとめておくプログラミング手法のことである。よって、上記アスペクトプログラムは、複数の各アプリケーションプログラムに共通的な処理(例:ログ出力処理等)が記述されたものである。
以下、図2を参照して、上記第2の性能データ収集プログラム(Javaクラス:アスペクトプログラム)17等の生成方法について説明する。
上記第2の性能データ収集プログラム(Javaクラス)17(及びJavaクラス12)は、図2に示すアプリケーションプログラムのバイトコード(.classファイル)22(以下、アプリケーションプログラム22と記す)と、アスペクトプログラムのソースファイル(.ajファイル)21(以下、アスペクトソースファイル21と記す)とを、アスペクトコンパイラ20によりコンパイルする(以下、アスペクトコンパイルという)ことで生成される。アスペクトソースファイル21には、アプリケーションプログラム22のログ出力対象関数、関数内のログ出力箇所(例:関数開始点、関数終了点)、およびログ出力処理が、プログラマ等によって記述されている。
そして、アスペクトコンパイラ20によるコンパイルの結果として、図2に示す(3)アスペクトプログラム(.classファイル)23と(4)アプリケーションプログラム(.classファイル)24とが生成される。このアスペクトプログラム(.classファイル)23が上記図1に示す第2の性能データ収集プログラム(Javaクラス)17に相当し、アプリケーションプログラム(.classファイル)24がJavaクラス12に相当する。
尚、アプリケーションプログラム22はアスペクトコンパイル前のアプリケーションプログラム(Javaクラス12)であり、上記アスペクトコンパイルによって、アスペクトソースファイル21に記述されている各ログ出力対象関数の各ログ出力箇所に、第2の性能データ収集プログラム(Javaクラス)17の呼び出し処理が挿入されることになり、これが上記アプリケーションプログラム(.classファイル)24である。
上記アスペクトコンパイラ20によるコンパイル前後のソースファイル/プログラムに関して、以下にまとめて説明する。
(1)アスペクトソースファイル(.ajファイル)21;
アプリケーションプログラム22の各関数のうちの特定のログ出力対象関数、このログ出力対象関数に係るログ出力箇所(例:関数開始点、関数終了点)、およびログ出力処理を記述したソースファイル。Javaに似た言語にて記述する。
(2)アプリケーションプログラム(.classファイル)22;
アプリケーションソースファイルをJavaコンパイラでコンパイルしたバイトコード。従来のJavaクラス82(但し、処理時間収集処理無しのバージョン)に相当する。
(3)アスペクトプログラム(.classファイル)23;
アスペクトソースファイル21をアスペクトコンパイルした結果生成される、上記第2の性能データ収集プログラム(Javaクラス)17である。アスペクトソースファイル21内で定義された各ログ出力対象関数内の各ログ出力箇所でアプリケーションプログラム(.classファイル)24が呼び出しを行うことで、ログ出力処理を行う。つまり、アスペク
トプログラム(.classファイル)23自体は、基本的に、所定のログ出力処理を行うだけである。
(4)アプリケーションプログラム(.classファイル)24;
アプリケーションプログラム22に対しアスペクトコンパイルを行うことで、例えば図4(b)に示すように各ログ出力箇所に上記アスペクトプログラム(.classファイル)23の呼び出し処理が埋め込まれたプログラム。
上記のように生成したアスペクトプログラム(.classファイル)23及びアプリケーションプログラム(.classファイル)24を、例えば図3に示すようにアプリケーション実行環境に配備、置き換えすることで(上記の通り、これらプログラム23,24は、第2の性能データ収集プログラム(Javaクラス)17、Javaクラス12に相当する)、アプリケーションプログラムの性能データの収集が可能になる。
尚、図1〜図3に示すものは、一例であり、この例に限るものではない。すなわち、公知のように、上記“アスペクト指向プログラミング”手法に係るコンパイラでは、アスペクトプログラムとアプリケーションプログラムとを統合することも可能である。
この場合、アスペクトコンパイル処理によって、例えば図4(a)に示すように、アプリケーションプログラム22中にアスペクトプログラム23が埋め込まれた形式の1つのプログラムが生成されることになる。アスペクトプログラム23が埋め込まれる位置は、当然、アスペクトソースファイル(.ajファイル)21で記述されている、上記各ログ出力対象関数に係る各ログ出力箇所(例えば関数の開始/終了時点)である。この場合も、埋め込まれるアスペクトプログラム23自体は、上記ログ出力処理を実行するものである。
一方、本説明で用いる例では、上述した通り、2つのプログラムが1つに統合されることはなく、アスペクトプログラム(.classファイル)23及びアプリケーションプログラム(.classファイル)24が生成される。
そして、アプリケーションプログラム(.classファイル)24には、図4(b)に示すように、コンパイル前のアプリケーションプログラム(.classファイル)22中に、アスペクトプログラム(.classファイル)23を呼び出す処理が埋め込まれることになる。この呼び出し処理が埋め込まれる位置は、当然、アスペクトソースファイル(.ajファイル)21で記述されている、上記ログ出力箇所である。そして、呼び出されたアスペクトプログラム(.classファイル)23は、上記ログ出力処理を実行することになる。
尚、よく知られているように、一つの「クラス」は通常、1以上の「メソッド(関数)」を有しており、例えば全ての「クラス」を上記アプリケーションプログラム22とし、アスペクトソースファイル(.ajファイル)21で指定された関数を有する「クラス」には、当該関数の実行箇所に呼び出し処理が埋め込まれるようにしてもよいし、アスペクトソースファイル(.ajファイル)21で指定された「クラス」のみを上記アプリケーションプログラム22としてアスペクトコンパイラ20に入力させるようにしてもよい。
図5は、本例のクライアントとサーバからなるシステム全体の動作を示す図である。
Web/Apサーバ10は、任意のクライアント100のブラウザ等から送られてくる任意のリクエストを受信すると、まず、第1の性能データ収集プログラム(Servletフィルタ)16が、詳しくは後述する図6の処理によって得たセッションIDとリクエストIDを、主記憶装置30内のスレッド固有の変数領域31に格納する。尚、言うまでもないが、セッションIDは各セッションを識別する識別コードであり、リクエストIDは各リ
クエストに対し一意となるIDであり、スレッド固有の変数領域31は各スレッド毎に割り当てられる変数領域である。
第1の性能データ収集プログラム(Servletフィルタ)16は、更に、詳しくは後述する図6の処理によって、更に、日付時刻情報、スレッド名、処理の開始/終了情報、アクセスURL等の各種情報を取得して、これら取得した情報を上記セッションID、リクエストIDと共に、例えば補助記憶装置40(ハードディスク等)内のログファイル41に書き込む。
上記第1の性能データ収集プログラム(Servletフィルタ)16による処理に続いて、上記受信したリクエストに応じたJavaアプリケーション(JSP/Servlet11、Javaクラス12)が実行されることになる。(JSP/Servlet11が実行され、当該スレッドから呼び出された関数が実行される。)
そして、任意のJavaクラス12が実行されるとき、このJavaクラス12が上記呼び出し処理が埋め込まれたものである場合には、この呼び出し処理が実行されることで呼び出されたアスペクトプログラム(.classファイル)23(第2の性能データ収集プログラム(Javaクラス)17)が実行されることになる。
この呼び出しタイミングは、ユーザ等が上記ソースプログラムで任意に指定しているものであり、例えば関数の実行開始時/終了時等であり、ここではこの例を用いて説明する。
呼び出された第2の性能データ収集プログラム(Javaクラス)17は、詳しくは後述する図7の処理を実行することで、当該スレッド固有の変数領域31に格納されている上記セッションID、リクエストIDや、日付時刻情報、スレッド名、処理の開始/終了情報、アクセスURL等の各種情報を、例えば補助記憶装置40(ハードディスク等)内のログファイル41に書き込む。
尚、上記各種処理は、一旦、主記憶装置30内に記憶しておき、リクエストによる一連の処理(リクエストに応じて呼び出される全関数の実行)が完了したタイミングで、主記憶装置30から補助記憶装置40上のログファイル41に出力するようにしてもよい。
以下、図6、図7を参照して、上記第1、第2の性能データ収集プログラムによって実行される処理について説明する。
上記の通り、図6は第1の性能データ収集プログラム(Servletフィルタ)16の処理フローチャート図であり、図7は第2の性能データ収集プログラム(Javaクラス)17の処理フローチャート図である。
まず、図6に示す処理について説明する。
図6に示すように、第1の性能データ収集プログラム(Servletフィルタ)16は、任意のクライアントから任意のリクエストを受信する毎に(ステップS11)、まず、当該Apサーバが自動的に割り当てるセッションIDと、当該リクエストの通過時に当該プログラム(Servletフィルタ)がプログラム内でカウント/生成するリクエストIDとを、上記スレッド固有の変数領域31に格納する(ステップS12)。また、Java内部で付与されるスレッド名を取得する(ステップS13)。更に、現在日時(あるいは上記リクエストを受信した時点)を示す日付時刻情報等を、Web/Apサーバ10内の不図示のシステムクロックから取得する(ステップS14)。
そして、上記各処理により取得した各種情報、すなわち現在の日付時刻情報、セッションID、リクエストID、スレッド名と、更に、処理の開始/終了情報、アクセスURL
を、ログファイル41に書き込む(ステップS15)。
尚、処理の開始/終了情報は、単に、任意のリクエストに応じた処理の開始時点か終了時点かを示す情報であり、リクエスト受信時には当然“開始”となる。尚、リクエストに応じた一連の処理が終了してレスポンスを返す際にも、第1の性能データ収集プログラム(Servletフィルタ)16は図6の処理を実行するものであり、その際には処理の開始/終了情報は当然“終了”となる。また、尚、アクセスURLは、リクエストされた(アクセス先の)ホームページ等のURLである。
次に、図7の処理について以下に説明する。
尚、図7に示す各ステップの処理のうち、第2の性能データ収集プログラム(Javaクラス)17自体によって実行される処理は、ステップS24〜S27であると見做してもよい。すなわち、ステップS21〜S23の処理は、任意の第2の性能データ収集プログラム(Javaクラス)17が呼び出されるまでの処理を意味すると見做してもよい。つまり、JSP/Servlet11が任意のJavaクラス12を呼出す毎に(ステップS21)、このJavaクラス12にログ出力対象関数がない場合(ステップS22,NO)、すなわち上記アスペクト・コンパイルにより呼び出し処理が全く埋め込まれていない場合には、当然、第2の性能データ収集プログラム(Javaクラス)17が呼び出されることはなく、このJavaクラス12の処理が実行されるだけである。
一方、ログ出力対象関数がある場合には(ステップS22,YES)、このログ出力対象関数の実行に伴って、上記ログ出力箇所(関数実行開始/終了時等)に埋め込まれている呼び出し処理が実行される毎に(ステップS23,YES)、呼び出された第2の性能データ収集プログラム(Javaクラス)17がステップS24〜S27の処理を実行することになる。
すなわち、まず、当該スレッドに対応する上記スレッド固有変数領域31に記憶されている上記セッションID、リクエストIDを取得し(ステップS24)、Java内部で付与されるスレッド名を取得する(ステップS25)。更に、現在日時(あるいは上記呼び出しを受けた時点等)の日付時刻情報等を、Web/Apサーバ10内の不図示のシステムクロックから取得する(ステップS26)。
そして、上記各処理で取得した各種情報、すなわち現在の日付時刻情報、セッションID、リクエストID、スレッド名と、更に、処理の開始/終了情報、アクセスURL、(呼び出し元の)関数名を、当該関数の性能データとしてログファイル41に書き込む(ステップS27)。
尚、開始/終了情報や(呼び出し元の)関数名は、呼び出し処理の際にパラメータとして渡してもよいし、他の方法であってよい。
上述した処理により、任意のクライアント(セッション)からの任意のリクエストに応じた全てのログ出力対象関数に関する上記性能データには、同一のセッションID及びリクエストIDが格納されていることになり、後に、収集した性能データを分析する際に、例えば各リクエストによる同じ関数に係る処理時間を一覧表示して、他と比較して処理時間が非常に長いものがあった場合に、この関数の性能データに含まれるセッションID及びリクエストIDから、そのクライアントやリクエスト固有の問題があることが推定できる等、クライアントやリクエスト固有の問題があった場合に特定が容易となる
図8に、上記ログファイル41の格納データ形式の一例を示す。
図示の例では、ログファイル41のテーブル50(以下、性能データ50とも言うものとする)は、年月日時分秒.ミリ秒51、ログレベル52、セッションID53、リクエ
ストID54、スレッド名55、開始/終了56、URL57、実行メソッド情報58等の各データ項目より成る(尚、図示の「備考・参考情報」はここでは関係ない)。
年月日時分秒.ミリ秒51には、上記現在の日付時刻情報が格納される。この例のように、日付時刻情報は、年月日時分秒に加えてミリ秒単位まであり、ここではミリ秒は3桁となっている。
ログレベル52は常に“DEBUG”とするが、ここでは関係ない。
セッションID53、リクエストID54、スレッド名55、開始/終了56、URL57には、それぞれ上記セッションID、リクエストID、スレッド名、処理の開始/終了情報、アクセスURLが格納される。
実行メソッド情報58には、上記呼び出し元の関数名(メソッド名)が格納される。よって、図6の処理の際には何も格納されない。
上述した本システムによれば、アプリケーションプログラムの各ソースコード毎に逐一、処理時間収集のための仕組みを組み込んだり、モジュールを入れ替える必要がなくなる。更に、複数のクライアント、リクエストから同じ関数が呼ばれた場合であっても、クライアント、リクエストに対応した関数の処理時間を収集することができる。
上述した実施例の動作を概略的に示す図面として図9、図10を示すものとし、以下、図9、図10について簡単に説明するものとする。
上記の通り、図9は上述した実施例のWeb/Apサーバ10の動作を概略的に示す図であり、図10はそのフローチャート図である。
図9に示す動作は、既に説明してある通りであり、任意のクライアント100のブラウザから任意のHTTPリクエストがあると、第1の性能データ収集プログラム(Servletフィルタ)16が、セッション情報(セッションID、リクエストID)の記憶や、上記各種情報のログ出力を行う。そして、リクエストに応じたJavaアプリケーションを実行させる。これにより、JSP/Servlet11は、各メソッド(Javaクラス12)を実行させ、Javaクラス12は上記呼び出し処理が挿入されているものである場合には、この呼び出し処理実行のタイミングで第2の性能データ収集プログラム(Javaクラス)17を呼び出す。本例では、上記の通り、一例として、Javaクラス12(関数)の実行開始と終了時のタイミングで、呼び出し処理が実行されるものである。
これより、図示の通り、第2の性能データ収集プログラム(Javaクラス)17は、Javaクラス12(関数)の実行開始と終了時のタイミングで、それぞれ、上記ログ出力処理を行うことになる。
そして、リクエストに応じたJavaアプリケーション処理が全て終了したら、第1の性能データ収集プログラム(Servletフィルタ)16は、レスポンス通過の際に、上記ログ出力を行う。更に、セッション情報を解除する。すなわち、上記スレッド固有変数領域31に格納したセッション情報を消去する。
図10は、図9に対応する概略的な処理フローチャート図である。よって、必ずしも実際の動作と一致するものではないが(実際の動作は図5、図6、図7等で既に説明してある)、以下、簡単に説明するものとする。
図10において、任意のリクエストを受信すると(ステップS31)、生成されるセッションID、リクエストIDを上記スレッド固有変数領域31に格納し、当該リクエストに応じた関数(Javaクラス12)が実行される毎に(ステップS33)、上記の例で
は関数処理開始時(ステップS34,YES)及び終了時(ステップS36,YES)にそれぞれ、上記各種情報(セッションID、リクエストID、日付時刻情報等)から成る性能データを取得して(ステップS35,S37)、ログファイル41に書き込む(ステップS39)。
図11に、上記ログファイル41に書き込まれたログデータの一例を示す。
図示の通り、ログファイル41には、任意の同一のセッションID及びリクエストIDの組み合わせ毎に、この同一のセッションID及びリクエストIDによるURL57(ここでは省略して示す)へのアクセスに応じて実行された、すなわち任意のクライアント(ブラウザ)からの任意のリクエストに応じて実行された一連の関数処理等のログデータ(性能データ)が、書き込まれた順番通りに(ログ出力処理実行順に)格納されている。
また、同図の例では、実行メソッド情報58として、α、βが格納されており、これはメソッド名(関数名)α、βの2つの関数が、セッションID=‘1122’及びリクエストID=‘3’によるURL57(ここでは省略して示す)へのアクセスに応じて実行されたことを意味する。
上記メソッド(関数)α、βの実行に関する4つのレコードが、実行メソッド情報58及び開始/終了56が「α;開始」→「β;開始」→「β;終了」→「α;終了」という順番に格納されているのは、メソッドα実行中にメソッドβが呼び出されたことを意味している。つまり、基本的に「開始」が複数連続するのは、任意の関数を呼び出していることを意味している。この様に、ログファイル41には、各関数の開始、終了のタイミングでログ出力された順番にレコードが記録されているので、上記の通り他の関数等の呼び出し関係を解析することができる。
また、図示の一連のレコードの最初と最後のレコードには、実行メソッド情報58(関数名)が記録されていないが、これは、上記第1の性能データ収集プログラム(Servletフィルタ)16による上記HTTPリクエスト受付時及び応答時のログ出力処理によって記録されたレコードであることを意味する。この第1の性能データ収集プログラム(Servletフィルタ)16による上記HTTPリクエストの受付及び応答に係る処理を「リクエスト受付・応答処理」と呼ぶものとする。従って、ログファイル41には、任意の同一のセッションID及びリクエストIDの組み合わせ毎に、「リクエスト受付・応答処理」に係るレコードと、各関数実行(開始/終了)に係るレコードとが記録されることになる(例えば、ログ記録処理の際に、セッションID及びリクエストIDをキーにしてログファイル41を検索して、該当するレコード群の最後に新たなレコードを追加すればよい)。
尚、図11では、日付時刻情報(年月日時分秒.ミリ秒51)は、年月日時は省略し、分秒.ミリ秒のみ示してある。また、上記の通りURL57の具体例は省略してある。
以下、上述したようにして収集した性能データを分析して表示する処理について説明する。
本例では、性能データを可視化表示(表、バー、グラフ等による表示)する為に、まず、上記ログファイル41のデータを、表、グラフ等の表示の元となる内部データに変換する。この変換処理の一例を図12に示す。また、内部データ構造の一例を図13、図14等に示す。尚、図12の処理は、図13の例に応じた処理例である。
図13は、内部データ構造に係る概略的な階層構造を示す図である。
まず、図13に示すように、各内部データを格納する不図示の内部データファイルは、例えば階層0、階層1、階層2、・・等の階層構造を有する。階層0は最上位階層である。
階層1は各クライアント(ブラウザ)毎に対応する階層である。つまり、これまでに当該Webサーバにアクセスした記録が無い(少なくとも内部データには無い)新たなクライアント(ブラウザ)毎からのアクセスがある毎に、新たな階層1のデータが作成される。
そして、各階層1毎に、この階層1のクライアント(ブラウザ)から任意のリクエストがある毎に、その階層1内に新たな階層2の内部データが作成される。
尚、ここでは階層1と階層2とに分けて考えているが、実際には上述した通り(そして図14等に示す通り)任意の「セッションID及びリクエストID」の組み合わせを1単位とする性能データ収集・記録が行われるわけであるので、図示の階層1、階層2のデータに関しては特に説明しない。階層1と階層2とから成るデータは、上記「リクエスト受付・応答処理」に係る性能データに基づいて作成される内部データであると考えてよい。
そして、各階層2毎に、そのリクエストに応じた関数が実行される毎に記録されたログデータがある毎に、該関数に応じた新たな階層3の内部データが作成される。更に、この階層3の関数の実行中に呼び出された別の関数に関するログデータがある毎に、該別の関数に応じた新たな階層4の内部データが作成される。
上記図13に示す階層構造に応じた上記内部データへの変換処理について、図12を参照して説明する。
図12の処理は、任意のログファイル41を対象として、このログファイル41に格納されている性能データを1行(1レコード)ずつ読み出して(ステップS41)、読み出したレコードについてステップS42以降の処理を実施する。
まず、読み出したレコードのセッションIDを用いて内部データファイル内を検索して、同一のセッションIDの階層1があるか否かをチェックし(ステップS42)、無い場合には(ステップS42,NO)、このセッションID(クライアント(ブラウザ))に応じた新たな階層1を内部データファイル内に作成し、これを階層0の最後(既に作成されている階層1群の最後の階層1の後)に追加する(ステップS43)。
更に、読み出したレコードのリクエストIDに応じた階層2を新規作成して、これを階層1(ここでは新たに作成した階層1)の最後に追加する。更に、主記憶上に設けられる任意の記憶領域(又は変数)(以下、“開始状態”と呼ぶ)に、当該レコードのURL57を記憶する(ステップS45)。尚、この例に限らず、“開始状態”として「関数無し」等と記録してもよい。
また、ステップS42がYESでステップS44がNOの場合も、ステップS45の処理が行われる。ステップS44は、上記同一セッションIDの階層1内に、読み出したレコードのリクエストIDと同一のリクエストIDの階層2があるか否かを判定する処理である。
ステップS45の処理後は、ステップS51の判定処理へ移行し、ログファイル41内の全てのレコードの読み込みが完了しない限り、ステップS51の判定はNOとなってステップS41へ戻り、次のレコードの読み込みを行うことになる。
尚、階層2以下(階層2、階層3、階層4・・・等)の階層の新規作成に際しては、上記読み出したレコードの各データ(年月日時分秒.ミリ秒51、セッションID53、リクエストID54、URL57、実行メソッド情報58)を、その階層情報(‘2’、‘3’、‘4’等)と共に、内部データファイルに新規追加レコードとして記憶する処理も
行われる。その際、年月日時分秒.ミリ秒51は、後述する開始日時64として記憶される。
上述したステップS45の処理により任意のリクエストIDに応じた新規階層2が作成された後、次以降のレコードがログファイル41から読み込まれると、上記図11に示す例のように、これらレコードはこのリクエストに応じて実行される各関数に関する性能データである。よって、ステップS42、S44の判定はYESとなり、ステップS46の処理が実行される。ステップS46の処理では上記“開始状態”に任意の関数名(ここでは関数名αとする)が記憶されているか否かを判定する。上記ステップS45の直後のレコードに関する処理では、上記の通り関数名ではなくURLが記憶されているので、ステップS46の判定はNOとなり、ステップS47の処理へ移行する。
ステップS47の処理では、読み込んだレコード(任意の関数に関する性能データ)に関する階層3を新規作成し、階層2の最後に記憶する。そして、上記“開始状態”に当該レコードの関数名(実行メソッド情報58)を関数名αとして記憶する。そして、ステップS51の判定を経てステップS41に戻る。
次に読み込むレコードに関しては、ステップS42,S44,S46の判定がYESとなり、ステップS48の処理に移行する。ステップS48では、読み込んだレコードの開始/終了56が“開始”、“終了”の何れであるかを判定する。もし、上記関数名αの関数(メソッド)が更に別の関数を呼び出すものではなかったなら、ステップS48の判定は「終了」となるものであり、ステップS49の処理へ移行する。
ステップS49では、当該関数名αの関数に関する内部データおける後述する終了日時65に、読み込んだレコードの年月日時分秒.ミリ秒51を記憶する。更に、開始日時64と終了日時65との時間差を求め、これを経過時間66に記憶する。これにより、当該関数名αに関する表示用等の内部データは、図14に示す61〜69の各データ項目のうち、実行時間67を除いて全て記録されることになる。尚、実行時間67の算出・記録処理については後に説明する。
ステップS49では、最後に、上記“開始状態”に現在の階層の親階層の関数名(関数名が無い場合にはURL)を記憶する。
一方、上記関数名αの関数(メソッド)が更に別の関数を呼び出していたならば、当該読み込んだレコードは、例えば図11の例における「α;開始」のレコードの次の「β;開始」のレコードのように、呼び出された関数の「開始」時のレコードであるので、ステップS48の判定は「開始」となり、ステップS50の処理に移る。
ステップS50では、「関数αの階層+1」の階層(ここでは階層4)を新規作成し、これを当該関数αの階層内の最後に追加する。そして、上記“開始状態”に当該読み込んだレコードの関数名(実行メソッド情報58)を新たな関数名αとして記憶する(ステップS50)。
その後、開始/終了56が「終了」のレコードが読み込まれると、ステップS48の判定は当然「終了」となり、ステップS49の処理が実行されることになる。
尚、例えば図11に示すように、同一のセッションID・リクエストIDを有するレコード群の最後には、上記「リクエスト受付・応答処理」の応答処理で記録されたレコードが格納されていることになるので、図12には特に示していないが、当該最後のレコードを読み込んだ場合には(関数名が無いこと等で判定できる)、上記ステップS45で作成されていた階層2の内部データを完成させる。すなわち、当該階層2の内部データの後述する終了日時65に、読み込んだレコードの年月日時分秒.ミリ秒51を記憶すると共に
、経過時間66等を算出して記憶する。
図14に示す表示用の内部データ60は、階層61、URL62、関数名63、開始日時64、終了日時65、経過時間66、実行時間67、セッションID68、及びリクエストID69の各データ項目より成る。
階層61には、上記階層1,2,3等の階層を示す数値が格納される。階層は、上記の通り、関数等のネストの深さを示すものである。
URL62、関数名63には、それぞれ、上記URL57、実行メソッド情報58が格納される。同様に、セッションID68、リクエストID69には、それぞれ、セッションID53、リクエストID54が格納される。
開始/終了56が「開始」のレコードの日付時刻情報(年月日時分秒.ミリ秒51)が開始日時64に格納され、開始/終了56が「終了」のレコードの日付時刻情報(年月日時分秒.ミリ秒51)が終了日時65に格納される。
経過時間66は、上記の通り、開始日時64と終了日時65との時間差(終了日時65−開始日時64)である。つまり、経過時間66は、例えば、各関数の処理開始から終了までの時間を意味する。但し、各関数に限らず、例えば図11に示す最初と最後のレコードから生成される内部データは、上記「リクエスト受付・応答処理」に係る内部データということになり、この場合の経過時間66は、リクエスト受付から応答までの時間を意味することになる。
本例では、リクエストは任意のURLへのアクセスを例にしており、この例では上記「リクエスト受付・応答処理」に係る経過時間66は、任意のURL(ホームページ)アクセスに係る処理全体の最初から最後までの時間を意味することになる。また、上記「リクエスト受付・応答処理」には、単なる受付、応答の処理だけでなく、各関数の呼び出し処理も含まれる。
この様な「リクエスト受付・応答処理」のことを、以下「URL」と呼ぶものとする。
従って、上記「リクエスト受付・応答処理」に係る経過時間66は、「URL」に係る経過時間66と表現できる。また、これより、経過時間66とは、「URL」/関数の処理開始から終了までの時間を意味するものと言える。また、上記の通り「URL」は関数を呼び出すものであり、例えば図11に示す例では、「URL」は関数αを呼び出す。同様に図17に示す例では「URL」は、関数getDB()、関数setDB()を呼び出すものと表現できる。
ここで、上記経過時間66には、「URL」/関数から呼び出した他の関数の処理に係る時間(当該他の関数の経過時間)も含まれる。経過時間66から当該他の関数の経過時間を除外したものが、実行時間67となる。
上記表示用の内部データ60について、以下、図15〜図17に示す具体例を参照して更に説明する。
図15は任意のリクエストに係る表示用の内部データ60の具体例であり、図16は図15に示す内部データ60の元となった性能データ50の一例を示す図である。図17は、図15に示す例に応じたリクエスト時の動作を示す図である。
図15に示すように、この例では、URL=“http//:localhost:8080/DBAccess.jsp”に対するアクセスがあり、セッションID=‘1234’且つリクエストID=‘1’が割り当てられたものとし、図15はこの場合に収集された図16の性能データ50から生成さ
れた表示用の内部データ60を示すものである。
尚、図13に示す例やこの例に対応する図12の処理では、上記の通り、セッションIDで1階層、リクエストIDで1階層という扱いにしていたが、これは1つの考え方を示すものであり、この例に限らない。本手法では、基本的に、任意のセッションIDとリクエストIDの組み合わせが示す各リクエスト毎に、性能データ50の収集が行われるので、当該各リクエスト毎の性能データ50の最初のレコード(すなわち上記「URL」によってログ出力されたレコード)に関する内部データ60には、図15に示すように階層1を与える。
尚、最初のレコードであるか否かは、例えば前回読み込んだ性能データ50のレコードのセッションIDとリクエストIDとを一時的に記憶して、これと今回読み込んだレコードのセッションIDとリクエストIDと比較して不一致である場合に、最初のレコードであると判定する。勿論、この例に限らない。
すなわち、上記最初のレコードを含め、この最初のレコードと同一のセッションIDとリクエストIDを有する一連のレコードを順次読み込む毎に、そのレコードの開始/終了56が「開始」か「終了」かによって、「開始」であれば階層を+1し、「終了」であれば階層を−1する。ここでは、階層の初期値は‘0’とする。この例では、上記最初のレコードは当然「開始」であるので、「0+1」で上記の通り階層1が与えられる。
その後、例えば、その後のレコードが、「開始」→「開始」→「終了」→「終了」→「開始」→「終了」→「終了」であったならば、階層は、上記1から2→3→2→1→2→1となる。この例は、例えば最初に関数α実行開始し(これには階層2が与えられる)、関数αから関数βが呼び出され(これには階層3が与えられる)、関数βが終了し、更に関数αが終了した後に、関数γが実行される(これには階層2が与えられる)場合等である。
これは、図15、図17に示す例でいうと、まず、上記最初のレコードは当然「開始」であり、上記の通り階層1となり、2番目以降のレコードは、図17に示すように、関数名getDB()に係る「開始」→「終了」、更に関数名setDB()に係る「開始」→「終了」となり、最後に上記階層1に関する「終了」となる。よって、図15、図17に示すように、これら関数名getDB()とsetDB()に係る表示用の内部データ60の階層61は、共に‘2’となる。
この様に、性能データ50においては「開始」、「終了」毎に別々のレコードであったものを、表示用の内部データ60では「URL」や各関数毎に1つにまとめて、開始日時、終了日時が記録され、更に階層や経過時間等が求められて記憶されている。尚、図14には示さないが、内部データ60に更に呼び出し元(上位階層)の関数の関数名も記憶するようにしてもよい。
ここで、特に図示しないが、図14に示すデータ構造の内部データ作成処理について、以下、図15、図16に示す例も参照しながら説明する。尚、図16では、日付時刻情報(年月日時分秒.ミリ秒51)は、年月日時は省略し、分秒.ミリ秒のみ示してある。
この処理では、例えば上記ログファイル41(性能データ50)からレコードを1行読み込む毎に、まず、内部データ60の中に読み出したレコードのセッションID53及びリクエストID54と同一のセッションID68及びリクエストID69を有するデータが存在するか否かをチェックする。あるいは、このチェック処理は、前回読み込んだレコードのセッションID及びリクエストIDを一時的に保持しておき、これと一致するか否
かにより判定してもよい。
もし、同一のセッションID68及びリクエストID69を有するデータが存在しないならば(上記チェック結果がNOであるものとする)、このレコードは上記「URL」(特に第1の性能データ収集プログラム(Servletフィルタ)16)によってリクエスト受付時にログ出力されたレコード(同一のセッションID68及びリクエストID69を有するレコード群の最初のレコード)ということになる。
もし、読み込んだレコードが上記最初のレコード(例えば図16に示すレコードaに相当)である場合には、まず、任意の変数(ここでは“階層変数”という)に初期値‘1’をセットする。
続いて、内部データ60に新たなレコードを追加し、このレコードの階層61に階層変数の値(ここでは上記の通り‘1’)を記憶する。更に、この内部データ60の新たなレコードの各データ項目に、上記ログファイル41から読み出したレコードにおける該当するデータ項目のデータをコピーする。すなわち、URL57、実行メソッド情報58、セッションID53、及びリクエストID54の各データを、それぞれ、URL62、関数名63、セッションID68、リクエストID69にコピー・記憶する。更に、この場合は、開始/終了56は「開始」となっているので、その日付時刻情報(年月日時分秒.ミリ秒51)を開始日時64にコピー・記憶する。尚、この場合、実行メソッド情報58は空白なので、図15の階層1のデータに示すように、関数名63は空白となる。
この状態では、例えば図15に示す例では階層1の内部データのみが作成され且つこの内部データは未完成となっている。つまり、終了日時65、経過時間66、及び実行時間67は未だ記録されていない。
そして、次のレコードを読み込む。
上記最初のレコードの次以降の各レコードは、上記一連の処理の終了時のレコードまでは全て同一のセッションID68及びリクエストID69を有することになるので、上記チェック結果はYESの判定となり、その場合には以下の処理が実行される。
すなわち、まず、読み込んだレコードの開始/終了56を参照して、これが「開始」であるか「終了」であるかによって処理が分かれる。
まず、「開始」である場合には、まず、上記“階層変数”を+1インクリメントする。そして、上記最初のレコードの場合と同様にして、内部データ60に新たなレコードを追加し、このレコードの階層61に現在の“階層変数”の値を記憶すると共に、この内部データ60の新たなレコードの各データ項目に、読み出したレコードにおける該当するデータ項目のデータをコピーする。上記の通り、終了日時65、経過時間66、及び実行時間67以外の各データ項目のデータがコピー・記録される。
図16の例では、レコードaの次にレコードbが読み込まれ、階層変数は‘2’となり、図15に示すようにこの関数名getDB()に関する各データ(終了日時65、経過時間66、及び実行時間67は除く)が記録されることになる。
一方、読み込んだレコードの開始/終了56が「終了」である場合には、この「終了」レコードと対になる「開始」レコードによって既に内部データ60に新たなレコードが追加されているので(但し、上記の通り、未完成)、この対となる「開始」レコードを探して、このレコードを完成させる。
すなわち、例えばその階層61の値が現在の“階層変数”の値と同一であり且つ関数名
が同じであるレコードを検索して求める。そして、求めたレコードの終了時間65に読み込んだレコードの日付時刻情報(年月日時分秒.ミリ秒51)を記憶し、経過時間66を算出・記憶する。更に、可能であれば、実行時間67も算出・記憶する。実行時間67の算出方法は後に説明する。
この様にして、「終了」のレコードを読み込む毎に、内部データ60における未完成のレコードが完成する。図16の例では、レコードcが読み込まれることで、図15に示す関数getDB()に関する内部データが完成する。
読み込んだレコードの開始/終了56が「終了」である場合には、上記処理の後、最後に、“階層変数”を−1デクリメントする。そして、次のレコードを読み込むことになる。レコードcに関する処理では、最後に、階層変数=‘1’にしていることになる。
図16に示す例では、その後に更にレコードd、eが読み込まれ、図15に示すように、関数setDB()に関する内部データの新規レコード(階層=‘2’)が作成され、完成することになる。
そして、最後にレコードfが読み込まれ、上記階層1のレコードが完成することになる。
ここで、上記実行時間67の算出処理について説明する。
図17に示す例では、例えば階層1のレコードの経過時間66には、この階層1(上記「URL」)から呼び出される2つの関数(getDB()とsetDB())の経過時間66も含まれており、経過時間66からは階層1(「URL」)自体の処理に掛かった時間は分からない。これは各関数においても同様であり、図17では2つの関数(getDB()とsetDB())は他の関数を呼び出すものではないが、例えば図18(a)に示す例では、「URL」から呼び出された関数Aは関数Bを呼び出し、更にその後に「URL」から呼び出された関数Bは関数Cを呼び出している。
図18(a)に図上太い縦線で示すものが、「URL」や各関数A,B,Cの経過時間66を示すものである。図示の通り、例えば関数Aの経過時間には当該関数Aから呼び出した関数Bの経過時間も含まれており、関数A自体の処理実行に要した時間は、経過時間からは分からない。よって、この例の場合、関数Aの経過時間から関数Bの経過時間を差し引いた時間を求めて、これを上記実行時間67とする。もし、他の関数を呼び出していない場合には、経過時間66=実行時間67となる。
このようにして実行時間67を求めると、図18(a)の場合、「URL」及び各関数の実行時間67は、図18(b)に図上太い縦線で示すものとなる。例えば、関数Aの実行時間67は、図示の「a1+a2」となる。この関数Aから呼び出された関数Bの実行時間67は、その経過時間66と同じとなる。また、その後に「URL」から呼び出された関数Bの実行時間は、図示の「b1+b2」となる。
また、図17に示す例では、階層1(「URL」)の実行時間67は、図示の経過時間から、getDB()の経過時間とsetDB()の経過時間を差し引いた値となる。つまり、「URL」であっても関数であっても、それが直接呼び出した各関数の経過時間の総和を、自己の経過時間から差し引いた値が、その「URL」又は関数の実行時間として求められる。
ここで、直接呼び出した関数は、上記のように図14には示さないがテーブル60に呼び出し元の関数の関数名も記憶するようにした場合には、これを参照すれば分かる。そうでない場合でも、階層と、開始日時64から終了日時65までの時間帯(以下、経過時間
帯と呼ぶ)を比較すれば、呼び出し関係が分かる。
すなわち、任意の対象レコードの実行時間67を求める場合には、この対象レコードの階層の1つ下の階層(対象レコードの階層+1;例えば対象レコードの階層が‘2’であれば‘3’)の全てのレコードを抽出して、対象レコードの経過時間帯に、抽出した各レコードの経過時間帯が含まれるか否かを判定し、含まれるものは該当レコードとする。そして、全ての該当レコードの経過時間66の総和を、対象レコードの経過時間66から差し引くことで、対象レコードの実行時間67が求められる。
例えば図15に示す例において、図示の階層1(「URL」)のレコードを対象レコードした場合、この対象レコードの経過時間帯は、年月日時を省略すると、「40:00.848〜40:30.848」となる。また、この対象レコードの階層は‘1’であるので、階層が‘2’であるレコードを抽出すると、図示の関数名getDB()とsetDB()の2つのレコードが抽出される。
そして、各抽出レコードの経過時間帯は、図示の通り、「40:10.848〜40:15.848」と「40:20.848〜40:25.848」であり、何れも上記対象レコードの経過時間帯「40:00.848〜40:30.848」に含まれるので、両方とも上記該当レコードとなる。
そして、対象レコードの経過時間は30000(ミリ秒)であり、上記各該当レコードの経過時間はそれぞれ、5000(ミリ秒)と5000(ミリ秒)であるので、
対象レコードの実行時間67=30000−(5000+5000)=20000(ミリ秒)
となる。
尚、既に説明してあるが、上記図15、図17の説明における「URL」や図18(a)、(b)に示す「URL」とは、主に第1の性能データ収集プログラム(Servletフィルタ)16とJSP/Servlet11によって実行される処理を意味する。換言すれば、任意のURLへのアクセスに係る処理のうち、各関数によって実行される処理以外の処理を意味する。例えば図17に示すURLの処理(階層1の処理)の経過時間は、URL=“http//:localhost:8080/DBAccess.jsp”に対するアクセスのリクエスト受信から応答までの時間を意味する。
更に、上述したアプリケーションプログラムの性能データ収集の際に、OS/ミドルウェアの性能データ(リソース状況を示す各種データ)も収集しておく。OS/ミドルウェアのリソース状況を示す各種データの収集は、例えば従来で説明したように、例えばWindows(登録商標)のパフォーマンスモニタ等の既存の機能により実現できる。
そして、上述した処理によって生成された上記表示用の内部データ60と、OS/ミドルウェアのリソース状況を、同一時間軸上にプロットして表示することで、例えば図19(a)のような表示が行われる。表示用の内部データ60に関しては、図示の例では、セッション・リクエスト毎の処理に掛かった時間(処理時間)を示すバーが表示される(例えば上記階層1(「URL」)の経過時間66に基づき表示する)。尚、図上では、セッション毎としているが、実際には、任意のセッションIDとリクエストIDとの組み合わせ毎に表示する。
この表示処理や上述した内部データ生成処理を行うコンピュータ装置は、Web/Apサーバ10であってもよいし、他の任意の情報処理装置であってもよい。何れにしても、上述した各関数等の性能データ収集、OS/ミドルウェアのリソース状況を示す各種データの収集、表示用の内部データの生成、この内部データに基づく表示を行う装置/システム全体を、性能データ収集・表示システムと呼ぶものとする。
あるいは、既に、上述した各関数等の性能データ収集、及びOS/ミドルウェアのリソース状況を示す各種データの収集が行われて記憶されていることを前提として、これら収集・記憶されているデータに基づいて、表示用の内部データの生成、この内部データに基づく表示を行う装置のことを、性能データ表示装置と呼ぶものとする。
また、図19(a)のような表示を行うだけであれば、上記の通り階層1の経過時間66のデータのみで表示可能であるが、実際には、例えば図示のセッション1の表示として、例えば図15に示すセッションID=‘1234’、リクエストID=‘1’の内部データを全て取得して表示する。
よって、図19(a)には示されないが、例えば図19(b)の拡大表示が示すように、上記セッション・リクエスト毎の処理時間を示すバーは、各URL/関数毎の実行時間を示す処理時間バーが結合されたものとして生成されている(例えば各関数毎に色を変える等、区別がつくように表示する)。つまり、例えば、図18(b)に示すものが図19(b)に示すように1本のバー形状で示されているものであり、表示の形態は変わっていても内容的には図18(b)と示すものと略同様である。尚、図19(b)には示していないが、バー内に各関数の関数名等を表示するようにしてもよい。
図19(a)、(b)に示すように、更に、上記OS/ミドルウェアのリソース状況を示す各種データに基づくグラフ等も、上記バーの表示に重ねて表示される。
図19(a)に示す表示画面では、OS/ミドルウェアのリソース状況の一例として、ディスクI/O(ディスクへの負荷量)が表示される(図では折れ線グラフのような表示となっている)。これをオペレータ等が視認することで、例えば、ディスクへの負荷量が増大している時間帯が分かり、更にこの時間帯に実行されたセッションが分かるので(図では主にセッション3が該当)、例えば図示のような矩形選択を行う(この例に限らず例えば該当セッションを直接指定する等)ことで、該当セッションの性能データが図19(b)に示すように拡大表示されることになる。
上記の通り、図19(b)に示す拡大表示では、セッション3に係り実行された各関数の実行時間が表示されるので、オペレータ等はこの表示を参照したり、あるいは更に他の正常と思われる(処理時間が短い、あるいはディスクへの負荷量が小さい)セッションを比較の為に拡大表示する等して、性能が悪い関数((他と比較して)実行時間が長い関数;ディスク負荷量増加に影響を及ぼしている関数等)を容易に把握することができるようになる。
尚、図19(a)に示す表示は、例えばオペレータ等が任意の時間帯(図の横軸の時間全体に相当)を指定することで表示されるが、この例に限らない。例えば、オペレータが任意のURLを指定することで、上記性能データ60のうちそのURL62が指定されたURLと同一である全てのデータが抽出された表示されるものであってもよい。この場合には、例えば、同一のURLへのアクセスであるにも係らず、他のセッションよりも極端に処理時間が長いセッションを特定することができる等、クライアント(ブラウザ)固有の問題があった場合に特定が容易となる。
上記の例に限らず、例えば特定の関数名を指定して該当するデータを抽出させてその実行時間を表示させる等(この場合には、各データ毎にそのセッションID等も一緒に表示させる)、様々な検索条件を入力可能としてこの検索条件に応じた表示を行わせることができる。
図20(a)、(b)に他の表示例を示す。これら表示例は基本的には図19(a)、
図20と略同様の表示であり、図20(a)は任意に指定された時間帯のアプリケーション性能データやOS/ミドルウェアのリソース状況の表示画面であり、図20(b)は図20(a)の画面上でオペレータ等により任意に指定された部分(図上点線で示す矩形領域)の拡大表示画面である。
図20(a)が図19(a)と異なる点は、まず、OS/ミドルウェアのリソース状況として、ディスクへの負荷量とCPU使用率の2種類が表示されている(図ではそれぞれ折れ線グラフのような表示となっている)点である。この様に、複数種類のリソース状況を表示させることもでき、アプリケーション性能データとリソース状況の対応関係が更に正確に行えるようになる。尚、上記表示は、例えば、OS/ミドルウェアのリソース状況を示す各種データのなかから、オペレータ等が任意の1又は複数の種類を指定して表示させることができる。
更に、図20(a)では図19(a)に比べて短時間に多数のセッション・リクエスト毎の処理が実行された為、各セッション毎のバーの表示が密集して表示される為、図20(a)に示すように画面上では各セッション毎のバーが区別できない表示となっている。すなわち、画面上の時間tの位置(縦の点線で示す位置)をほぼ中心とする、画面の左上から右下に至る帯状の線が、各セッション毎のバーの表示が密集して成る表示となっている。この様に、あたかも1つの線のように密集して表示される場合もある。尚、バーの表示も折れ線グラフの表示も、グラフ表示の一種と見做してよいものとする。
この様な表示であっても、OS/ミドルウェアのリソース状況の表示を参考にして、問題がありそうな特定の時間帯を上記矩形として指定することで、図20(b)に示すように拡大表示されるので、オペレータ等は、各セッション毎の処理時間や、各セッションに係る各関数の処理時間が分かり、問題があるセッションや関数を容易に把握することができる。尚、図20(b)は図19(b)とは異なり、複数のセッションについて表示されるが、この中から更に特定のセッションをオペレータ等が選択して拡大表示させることも当然可能である。
尚、上記特定領域(特定時間帯)の選択・指定方法は、上記矩形による方法に限らず、既知の様々な方法であってよい。例えば、マウスのホイール操作との連動、数値指定等であってよい。また、尚、OS/ミドルウェアのリソース状況は、アプリケーションプログラムが実行されるWebサーバに限らず、当該Webサーバと接続し、同一システム上にあるサーバ(データベースサーバ等)のものであっても構わない。
また、上記アプリケーションプログラムの性能データ収集・解析結果(上記表示用の内部データ60等)に基づいて、更に、平均・最速・最遅処理時間、メソッド呼び出し回数等を計算することも可能であり、計算結果は例えば市販の表計算ソフトを用いて表形式で出力することもできる。
図21に、上記Web/Apサーバ10等のコンピュータのハードウェア構成図を示す。尚、当該コンピュータは、Web/Apサーバ10に限らず、上記性能データ収集・表示システムを構成する他の情報処理装置であってもよい。
図21に示すコンピュータ70は、CPU71、メモリ72、入力部73、出力部74、記憶部75、記録媒体駆動部76、及びネットワーク接続部77を有し、これらがバス78に接続された構成となっている。
CPU71は、当該コンピュータ70全体を制御する中央処理装置である。また、CPU71には、例えば、上記主記憶装置30が内臓されていてもよい。
メモリ72は、プログラム実行、データ更新等の際に、記憶部75(あるいは可搬型記録媒体79)に記憶されているプログラムあるいはデータを一時的に格納するRAM等のメモリである。CPU71は、メモリ72に読み出したプログラム/データを用いて、各種処理を実行する。
出力部74は、例えばディスプレイ等であり、上記図19、図20等に示す内部データ等の表示画面等が表示される。
入力部73は、例えば、キーボード、マウス等であり、ユーザはこれらを操作して、上記図19、図20等に示す画面上で所望の入力操作(上記矩形領域の指定等)を行う。
ネットワーク接続部77は、例えば不図示のネットワークに接続して、他の情報処理装置(クライアント100等)との通信(コマンド/データ送受信等)を行う為の構成である。
記憶部75は、例えばハードディスク等であり、例えば第1、第2の性能データ収集プログラム16,17や、アプリケーションプログラム(JSP/Servlet11、Javaクラス12等)が格納されている。その他、OS15やJavaVM14を実現するプログラム等、本例のWeb/Apサーバ10の各種機能・処理(特に図6、図7、図10、図12に示す処理)を実現させる為に必要となる各種プログラムが格納されている。
CPU71は、上記記憶部75に格納されている各種プログラムを読み出し・実行することにより、上述した性能データ収集・表示システムとしての各種機能・処理を実現する。
また、記憶部75は、上記補助記憶装置40に相当するものであってもよく、この場合にはログファイル41も記憶されることになる。また、記憶部75には表示用の内部データ60も記憶されてもよい。すなわち、記憶部75には、図8、図11、図13、図14図15、図16等に示すデータ等が格納されるものであってもよい。
あるいは、上記記憶部75に格納される各種プログラム/データは、可搬型記録媒体79に記憶されているものであってもよい。この場合、可搬型記録媒体79に記憶されているプログラム/データは、記録媒体駆動部76によって読み出される。可搬型記録媒体79とは、例えば、FD(フレキシブル・ディスク)79a、CD−ROM79b、その他、DVD、光磁気ディスク等である。
あるいは、また、上記プログラム/データは、ネットワーク接続部77により接続しているネットワークを介して、他の装置内に記憶されているものをダウンロードするものであってもよい。あるいは、更に、インターネットを介して、外部の他の装置内に記憶されているものをダウンロードするものであってもよい。
また、本発明は、上記本発明の各種処理をコンピュータ上で実現するプログラムを記録した可搬型記憶媒体として構成できるだけでなく、当該プログラム自体として構成することもできる。
以上説明したように、本手法では、アプリケーションプログラムのセッション・リクエスト毎の関数レベルでの処理時間や処理実行日時を自動的に集計して、この集計結果をOS/ミドルウェアのリソース状況と同一グラフ上で重ね合わせて表示することが可能であり、アプリケーションプログラムのセッション・リクエスト毎の処理時間や更に関数毎の処理時間と、OS/ミドルウェアのリソース状況との関連を把握することが可能となる。
これより、上記の通り、OS/ミドルウェアの処理性能悪化に影響を及ぼしている関数を特定できるだけでなく、この関数実行に係るセッション・リクエストが把握でき、クライアントやリクエスト固有の問題があった場合に特定が容易となる。すなわち、効率的且つ的確な性能ボトルネック分析が可能となる。
また、アプリケーションプログラムのセッション・リクエスト毎の、更に各関数レベルでの、性能データ収集の為の処理は、上記の通りアスペクト・コンパイルによって容易に追加可能であり、ユーザ等の手間が掛からないものとなる。
尚、本手法は、例えば以下のシステム・状況において特に有用に適用可能である。
(ア)新規開発する業務システム利用者の要求性能達成度の確認及び性能改善の為に実施する性能テストにおける、性能データ収集後のデータ集計および表示。
(イ)機能追加、利用者増などにより、運用開始後、アプリケーションプログラムの性能確認・改善を実施する場合の、性能データ収集後のデータ集計および表示。
(ウ)その他、アプリケーションプログラムの性能データ集計および表示が必要なシステム全般。
本例のクライアントとサーバからなるシステムのシステム構成図である。 第2の性能データ収集プログラム等の生成処理を説明する為の図である。 図2と図1を対応付けて示す図である。 (a)、(b)はアスペクト・コンパイル結果のアプリケーション(Javaクラス)の一例である。 本例のシステム全体の動作を示す図である。 第1の性能データ収集プログラムの処理フローチャート図である。 第2の性能データ収集プログラムの処理フローチャート図である。 ログファイルの格納データ形式の一例を示す図である。 本実施例のWeb/Apサーバの動作を概略的に示す図である。 図9に対応する概略的なフローチャート図である。 ログファイルに書き込まれたログデータの一例を示す図である。 図13の例に応じた変換処理の一例を示すフローチャート図である。 内部データ構造の一例を図(その1)である。 内部データ構造の一例を図(その2)である。 図14に示すデータ構造における内部データの具体例である。 図15に示す内部データの元となった性能データの一例を示す図である。 図15に示す例に応じたリクエスト時の動作を示す図である。 (a)はURL/各関数の経過時間、(b)はその実行時間を示す図である。 (a)は内部データ等に基づく表示画面例(その1)、(b)は(a)に示す画面の一部分の拡大画面例である。 (a)は内部データ等に基づく表示画面例(その2)、(b)は(a)に示す画面の一部分の拡大画面例である。 コンピュータ・ハードウェア構成図である。 従来のシステム構成及び性能データ収集方式を示す図である。 (a)、(b)は従来の性能データ等の表示例である。
符号の説明
10 Web/Apサーバ
11 JSP/Servlet
12 Javaクラス
13 Servletコンテナ
14 JavaVM(Java仮想マシン)
15 OS
16 第1の性能データ収集プログラム
17 第2の性能データ収集プログラム
20 アスペクトコンパイラ
21 アスペクトソースファイル
22 アプリケーションプログラム
23 アスペクトプログラム(.classファイル)
24 アプリケーションプログラム(.classファイル)
30 主記憶装置
31 スレッド固有の変数領域
40 補助記憶装置
41 ログファイル
50 ログファイルのテーブル(性能データ)
51 年月日時分秒.ミリ秒
52 ログレベル
53 セッションID
54 リクエストID
55 スレッド名
56 開始/終了
57 URL
58 実行メソッド情報
60 表示用の内部データ
61 階層
62 URL
63 関数名
64 開始日時
65 終了日時
66 経過時間
67 実行時間
68 セッションID
69 リクエストID
70 コンピュータ
71 CPU
72 メモリ
73 入力部
74 出力部
75 記憶部
76 記録媒体駆動部
77 ネットワーク接続部
78 バス
79 可搬型記録媒体
79a FD(フレキシブル・ディスク)
79b CD−ROM
100 クライアント
101 クライアントプログラム(ブラウザ等)
102 OS

Claims (6)

  1. 任意のクライアントから任意のリクエストを受け付ける毎に、このリクエストに応じたセッションID、リクエストIDを所定の記憶領域に記憶すると共に、該セッションIDとリクエストIDとに対応付けて所定のログ情報を記録する第1の性能データ収集手段と、
    前記リクエストに応じて所定の1以上の関数の処理を実行するアプリケーション実行手段と、
    前記アプリケーション実行手段による前記各関数の処理実行時に、前記所定の記憶領域から前記セッションID、リクエストIDを取得して、該セッションIDとリクエストIDとに対応付けて前記各関数の処理実行に係る所定の性能データを前記ログ情報に追加記録する第2の性能データ収集手段と、
    OS/ミドルウェアのリソース状況を示すデータを収集するリソース状況データ収集手段と、
    前記記録されたログ情報に基づいて、任意の前記各リクエストに応じた処理全体の開始日時、終了日時、処理時間を求め、又は前記各関数毎にその関数の処理の開始日時、終了日時、該関数の処理実行に掛かった時間である実行時間を求めて、該求めた情報を前記セッションID及びリクエストIDに対応付けて成る内部データを生成・記憶する内部データ生成・記憶手段と、
    前記内部データに基づいて、任意の前記各リクエスト毎の処理全体の処理時間又は該処理全体中の各関数の前記実行時間を示す可視化表示を行うと共に、これと同一時間軸上に前記リソース状況データに基づく可視化表示を重ね合わせて表示する表示手段と、
    を有することを特徴とする性能データ収集・表示システム。
  2. 前記第2の性能データ収集手段と前記アプリケーション実行手段を実現させるプログラムは、所定のログ出力処理と任意の各ログ出力対象/ログ出力箇所とが記述されたアスペクトソースファイルと、前記関数の処理に係るアプリケーションプログラムとをアスペクト・コンパイルすることで生成されることを特徴とする請求項1記載の性能データ収集・表示システム。
  3. 前記各関数の処理実行に係る所定の性能データは、該各関数の関数名、処理開始/終了日時、接続先URLであることを特徴とする請求項1又は2記載の性能データ収集・表示システム。
  4. 任意のクライアントからの任意のリクエストを受付ける毎に生成されるセッションIDとリクエストIDとに対応付けて、該リクエストに応じた処理全体に係る性能データ、又は該処理全体中の各関数の処理実行に係る性能データが、ログ情報として記憶された性能データ記憶手段と、
    少なくとも前記リクエストに応じた処理の実行時のOS/ミドルウェアのリソース状況を示す各種データが記憶されたリソース状況データ記憶手段と、
    前記記録されたログ情報に基づいて、任意の前記各リクエストに応じた処理全体の開始日時、終了日時、処理時間を求め、又は前記各関数毎にその関数の処理の開始日時、終了日時、該関数の処理実行に掛かった時間である実行時間を求めて、該求めた情報を前記セッションID及びリクエストIDに対応付けて成る内部データを生成・記憶する内部データ生成・記憶手段と、
    前記内部データに基づいて、任意の前記各リクエスト毎の処理全体の処理時間又は該処理全体中の各関数の前記実行時間を示す可視化表示を行うと共に、これと同一時間軸上に前記リソース状況データに基づく可視化表示を重ね合わせて表示する表示手段と、
    を有することを特徴とする性能データ表示装置。
  5. コンピュータを、
    任意のクライアントから任意のリクエストを受け付ける毎に、このリクエストに応じたセッションID、リクエストIDを所定の記憶領域に記憶すると共に、該セッションIDとリクエストIDとに対応付けて所定のログ情報を記録する第1の性能データ収集手段と、
    前記リクエストに応じて所定の1以上の関数の処理を実行するアプリケーション実行手段と、
    前記アプリケーション実行手段による前記各関数の処理実行時に、前記所定の記憶領域から前記セッションID、リクエストIDを取得して、該セッションIDとリクエストIDとに対応付けて前記各関数の処理実行に係る所定の性能データを前記ログ情報に追加記録する第2の性能データ収集手段と、
    OS/ミドルウェアのリソース状況を示すデータを収集するリソース状況データ収集手段と、
    前記記録されたログ情報に基づいて、任意の前記各リクエストに応じた処理全体の開始日時、終了日時、処理時間を求め、又は前記各関数毎にその関数の処理の開始日時、終了日時、該関数の処理実行に掛かった時間である実行時間を求めて、該求めた情報を前記セッションID及びリクエストIDに対応付けて成る内部データを生成・記憶する内部データ生成・記憶手段と、
    前記内部データに基づいて、任意の前記各リクエスト毎の処理全体の処理時間又は該処理全体中の各関数の前記実行時間を示す可視化表示を行うと共に、これと同一時間軸上に前記リソース状況データに基づく可視化表示を重ね合わせて表示する表示手段、
    として機能させる為のプログラム。
  6. コンピュータを、
    任意のクライアントからの任意のリクエストを受付ける毎に生成されるセッションIDとリクエストIDとに対応付けて、該リクエストに応じた処理全体に係る性能データ、又は該処理全体中の各関数の処理実行に係る性能データが、ログ情報として記憶された性能データ記憶手段と、
    少なくとも前記リクエストに応じた処理の実行時のOS/ミドルウェアのリソース状況を示す各種データが記憶されたリソース状況データ記憶手段と、
    前記記録されたログ情報に基づいて、任意の前記各リクエストに応じた処理全体の開始日時、終了日時、処理時間を求め、又は前記各関数毎にその関数の処理の開始日時、終了日時、該関数の処理実行に掛かった時間である実行時間を求めて、該求めた情報を前記セッションID及びリクエストIDに対応付けて成る内部データを生成・記憶する内部データ生成・記憶手段と、
    前記内部データに基づいて、任意の前記各リクエスト毎の処理全体の処理時間又は該処理全体中の各関数の前記実行時間を示す可視化表示を行うと共に、これと同一時間軸上に前記リソース状況データに基づく可視化表示を重ね合わせて表示する表示手段、
    として機能させる為のプログラム。
JP2007229709A 2007-09-05 2007-09-05 性能データ収集・表示システム、性能データ表示装置、そのプログラム Active JP4867864B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007229709A JP4867864B2 (ja) 2007-09-05 2007-09-05 性能データ収集・表示システム、性能データ表示装置、そのプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007229709A JP4867864B2 (ja) 2007-09-05 2007-09-05 性能データ収集・表示システム、性能データ表示装置、そのプログラム

Publications (2)

Publication Number Publication Date
JP2009064124A true JP2009064124A (ja) 2009-03-26
JP4867864B2 JP4867864B2 (ja) 2012-02-01

Family

ID=40558676

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007229709A Active JP4867864B2 (ja) 2007-09-05 2007-09-05 性能データ収集・表示システム、性能データ表示装置、そのプログラム

Country Status (1)

Country Link
JP (1) JP4867864B2 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012023318A1 (ja) * 2010-08-17 2012-02-23 富士フイルム株式会社 画像処理装置、画像処理方法、画像処理プログラム及び記録媒体
CN104426945A (zh) * 2013-08-27 2015-03-18 腾讯科技(深圳)有限公司 一种获取应用性能数据的方法、设备和系统
JP2015528612A (ja) * 2012-09-14 2015-09-28 アリババ・グループ・ホールディング・リミテッドAlibaba Group Holding Limited 分散システムにおいてユーザリクエストの実行を監視するための方法及びシステム
JP2016115296A (ja) * 2014-12-18 2016-06-23 日本電気株式会社 プロセス管理装置、方法及びプログラム
JP2019207547A (ja) * 2018-05-29 2019-12-05 日本電信電話株式会社 機能解析装置、機能解析方法および機能解析プログラム

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001306364A (ja) * 2000-04-18 2001-11-02 Ntt Comware Corp トランザクション処理システムおよびその記録媒体
JP2003141076A (ja) * 2001-10-30 2003-05-16 Oki Electric Ind Co Ltd Webアプリケーション処理性能測定方法及びWebアプリケーションサーバ
WO2005048118A1 (ja) * 2003-11-17 2005-05-26 Kenji Katsui オンライン手続きにおける計測方法、評価方法及びアンケート実施方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001306364A (ja) * 2000-04-18 2001-11-02 Ntt Comware Corp トランザクション処理システムおよびその記録媒体
JP2003141076A (ja) * 2001-10-30 2003-05-16 Oki Electric Ind Co Ltd Webアプリケーション処理性能測定方法及びWebアプリケーションサーバ
WO2005048118A1 (ja) * 2003-11-17 2005-05-26 Kenji Katsui オンライン手続きにおける計測方法、評価方法及びアンケート実施方法

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012023318A1 (ja) * 2010-08-17 2012-02-23 富士フイルム株式会社 画像処理装置、画像処理方法、画像処理プログラム及び記録媒体
JP2015528612A (ja) * 2012-09-14 2015-09-28 アリババ・グループ・ホールディング・リミテッドAlibaba Group Holding Limited 分散システムにおいてユーザリクエストの実行を監視するための方法及びシステム
US9485317B2 (en) 2012-09-14 2016-11-01 Alibaba Group Holding Limited Method and system for monitoring execution of user request in distributed system
CN104426945A (zh) * 2013-08-27 2015-03-18 腾讯科技(深圳)有限公司 一种获取应用性能数据的方法、设备和系统
CN104426945B (zh) * 2013-08-27 2019-08-13 腾讯科技(深圳)有限公司 一种获取应用性能数据的方法、设备和系统
JP2016115296A (ja) * 2014-12-18 2016-06-23 日本電気株式会社 プロセス管理装置、方法及びプログラム
JP2019207547A (ja) * 2018-05-29 2019-12-05 日本電信電話株式会社 機能解析装置、機能解析方法および機能解析プログラム
WO2019230597A1 (ja) * 2018-05-29 2019-12-05 日本電信電話株式会社 機能解析装置、機能解析方法および機能解析プログラム

Also Published As

Publication number Publication date
JP4867864B2 (ja) 2012-02-01

Similar Documents

Publication Publication Date Title
US9047399B2 (en) Generating visualization from running executable code
CN108762743B (zh) 一种数据表操作代码生成方法及装置
CN110928772A (zh) 一种测试方法及装置
JPWO2012014284A1 (ja) テストシナリオ生成方法、テストシナリオ生成システム、及び、テストシナリオ生成プログラム
JP2005196291A (ja) ユーザインタフェースアプリケーション開発プログラム、および開発装置
JP2015043198A (ja) 解析システム、解析方法および解析プログラム
US20080177525A1 (en) Integrated debugger simulator
JP4867864B2 (ja) 性能データ収集・表示システム、性能データ表示装置、そのプログラム
CN112748927A (zh) 一种项目接口解析方法及相关装置
CN113449028A (zh) 一种数据提取方法、装置、电子设备及存储介质
CN109240700B (zh) 关键代码定位方法与系统
CN117076338A (zh) 基于kprobe的linux内核动态调试方法及系统
US8412744B2 (en) Visualization of runtime analysis across dynamic boundaries
CN111949267B (zh) 一种ui前端生成方法及装置
CN109062785B (zh) 接口参数约束代码定位方法与系统
CN109062784B (zh) 接口参数约束代码入口定位方法与系统
JP5790411B2 (ja) 並列の分散環境において対話的クライアント‐サーバー・アプリケーションの効率的な部分的クロールを行う技法
JP3942098B2 (ja) 情報処理システム、情報登録用情報処理装置、情報検索用情報処理装置、情報登録用情報処理方法、情報検索用情報処理方法、プログラム、及び記録媒体
JP2009064125A (ja) サーバ装置、そのプログラム
JP5702265B2 (ja) プログラム自動生成装置およびプログラム自動生成方法
JP2013037580A (ja) 情報処理装置
JP2011164785A (ja) 動作検証装置、動作検証方法および動作検証プログラム
JP7697660B2 (ja) 入力情報ファイル生成装置、入力情報ファイルの生産方法、プログラム及び記録媒体
von Laszewski et al. Grid Workflow-An Integrated Approach
JP2005228326A (ja) データ処理システム、アプリケーションプログラムのカスタマイズパラメータを表示する方法およびコンピュータプログラム製品

Legal Events

Date Code Title Description
A625 Written request for application examination (by other person)

Free format text: JAPANESE INTERMEDIATE CODE: A625

Effective date: 20100415

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20110422

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110630

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110726

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110926

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111018

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111031

R150 Certificate of patent or registration of utility model

Ref document number: 4867864

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141125

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250