JP2009064125A - サーバ装置、そのプログラム - Google Patents

サーバ装置、そのプログラム Download PDF

Info

Publication number
JP2009064125A
JP2009064125A JP2007229710A JP2007229710A JP2009064125A JP 2009064125 A JP2009064125 A JP 2009064125A JP 2007229710 A JP2007229710 A JP 2007229710A JP 2007229710 A JP2007229710 A JP 2007229710A JP 2009064125 A JP2009064125 A JP 2009064125A
Authority
JP
Japan
Prior art keywords
request
performance data
session
arbitrary
function
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
Application number
JP2007229710A
Other languages
English (en)
Inventor
Kazuto Hiuga
一人 日向
Junichi Iijima
淳一 飯島
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 JP2007229710A priority Critical patent/JP2009064125A/ja
Publication of JP2009064125A publication Critical patent/JP2009064125A/ja
Pending legal-status Critical Current

Links

Abstract

【課題】性能データ収集処理の追加を容易に行うことができ、更にクライアントやリクエスト固有の問題があった場合に特定が容易となる。
【解決手段】第1の性能データ収集プログラム16は所定のログ出力を行うと共に、セッションID、リクエストIDをスレッド固有変数領域31に格納する。第2の性能データ収集プログラム17は、アプリケーションプログラム(Javaクラス12)からの呼び出しに応じて、スレッド固有変数領域31から取得したセッションID、リクエストIDに対応付けて関数の性能データをログ出力する。第2の性能データ収集プログラム17と上記呼び出し処理を有するアプリケーションプログラム(Javaクラス12)は、アスペクトコンパイルにより生成される。
【選択図】図5

Description

本発明は、クライアントとサーバからなるシステムにおいて、クライアントからの要求に応じてサーバ上で実行されるアプリケーションプログラムの、関数単位の性能データ収集方式に関する。
クライアントとサーバからなるシステムにおいて、サーバ上で動作するアプリケーションプログラムの応答が遅いなど性能に問題がある場合に、アプリケーションプログラムの性能(例えば、どの関数の処理に時間がかかっているのか等)を調べる方法としては、アプリケーションプログラムのソースプログラムに性能データ(上記関数の処理時間等)を収集する仕組みを組み込む方法が一般的であった。
図17に、従来のシステム構成及び性能データ収集方式を示す。
図17において、クライアント100は、例えば一般ユーザが所有するパソコン等の汎用コンピュータであり、一般的なOS102環境上でブラウザ等のクライアントプログラム101を実行することにより、不図示のLAN、インターネット等のネットワークを介してWeb/Apサーバ70にアクセスして任意の処理を要求する。
Web/Apサーバ70は、Webサーバ/Ap(アプリケーション)サーバであり、各種アプリケーションプログラムを実装し、クライアント100からの要求(例えば任意のURLのホームページへのアクセス)に応じたアプリケーション実行を行い、例えばクライアント100側のディスプレイにホームページの表示等を行わせる。
この各種アプリケーションは、JSP/Servlet71、Javaクラス72より成る。尚、これら各種アプリケーションは、図示の通り、一般的なJava実行環境上(OS75、JavaVM(Java仮想マシン)74、Servletコンテナ73)で実行されることになる。また、JSPは、Java Server Pagesの略である。
各種アプリケーションは、概略的には、JSP/Servlet71が基本動作を行い、JSP/Servlet71が必要なJavaクラス72を随時呼び出し、呼び出されたJavaクラス72のメソッド(関数)の処理が実行される。
上記JSP/Servlet71、Javaクラス72より成る各種アプリケーションのうち任意のアプリケーション(特にJavaクラス72の各メソッド(関数))について、その性能データ(例えば各関数の処理時間等)収集を行いたい場合、開発用PC(パソコン)80上で、まず、当該性能データ収集対象のアプリケーションのソースコードファイルを開いて、オペレータ等が手作業で、このソースプログラムに性能データ収集処理を追加・記述する(図17上に示す(1))。続いて、この新たなソースコード81(性能データ収集処理が追加記述されたソースコード)をコンパイルして実行モジュール82(性能データ収集機能付き)を生成する(図17上に示す(2))。
そして、Web/APサーバ70において、上記性能データ収集対象のアプリケーション(実行モジュール)を、上記性能データ収集機能付きの実行モジュール82に入れ替える(図17上に示す(3))。その後は、実行モジュール82を実行することで、性能データ(各関数の処理時間等)収集処理も行われることになる。
尚、よく知られているように、Javaにおけるメソッドは“関数”に相当するもので
あり、上記の通り関数と呼ぶ場合もある。また、概略的にはJavaクラス72をメソッド(関数)と見做してもよい。
また、特許文献1、特許文献2、特許文献3等に記載の従来技術がある。
特許文献1に記載の従来技術では、プログラム走行時間データとプロセッサ使用時間データとを、測定対象プログラムの1回の走行で求めることにより、データ作成効率の向上を図るものである。
特許文献2に記載の従来技術は、既存のアプリケーションプログラムに対して性能プロファイリングを目的としたアプリケーションプログラムの修正、再コンパイル及び再起動を行うことなく、性能プロファイリングを実施する為に、情報処理装置内の命令プロセッサに組み込まれているハードウェアモニタを備えることを特徴としている。ハードウェアモニタは、指定されたCPU内部でのイベントを検出してカウントし、カウント値が閾値を超えた場合に割り込みを発生する機能を備える。そして、この割り込みに応じて、割り込み発生時点で実行していた関数名等が求められる。
特許文献3に記載の従来技術は、複数のトランザクションを並行処理する際のボトルネックについて、その発生箇所の特定を可能にするボトルネック検出システム等を提供することを目的としている。その為に、まず、OS kernel内にはカーネル・プローブ、ソフトウェア部品内にはアプリケーション・プローブが内蔵されている。カーネル・プローブは、CPU使用開始/終了処理を行う部分に設置されている。アプリケーション・プローブは、各ソフトウェア部品が実行するトランザクション処理の開始部分と終了部分に設置されている。そして、トレーサが、これら各プローブから、ソフトウェア実行状況に関する情報を受け取って記録する。
特開平8−153026号公報 特開2005−215816号公報 特開2006−227999号公報
上述した図17に示す従来技術では、以下の課題が発生していた。
(1)各アプリケーションプログラムのソースコードにそれぞれ手作業で性能データ収集のための仕組みを組み込み、実行モジュールを生成し、実行モジュールを入れ替える必要があるため、作業効率が悪い。何らかの問題が生じてから上記実行モジュール生成・入れ替え作業開始すると、実際に性能データが収集できる状態になるまで時間が掛かり、これより収集したデータに基づいて原因を特定できるまでの時間も掛かることになる。
(2)アプリケーションプログラム毎に処理時間収集のための仕組みを組み込む必要がある為、その分の作業工数が余計に掛かる。特に、性能データ収集対象となるアプリケーションが多い場合には、非常に時間が掛かることになり、手間が掛かる。
(3)異なるクライアント(ブラウザ)や、複数のリクエストから同じ関数が呼ばれたときに、リクエストに対応した関数の処理時間が把握できないため、クライアントやリクエスト固有の問題があった場合に特定が困難であった。
本発明の課題は、任意のJavaアプリケーションに関する性能データ収集処理の追加を容易に行うことができ、更にクライアント/リクエスト毎の性能データ収集が行えることでクライアントやリクエスト固有の問題があった場合に特定が容易となるサーバ装置、そのプログラム等を提供することである。
本発明のサーバ装置は、任意のクライアントからの任意のリクエストに応じた処理を実行するサーバ装置であって、任意のクライアントから任意のリクエストを受け付ける毎に、このリクエストに応じたセッションID、リクエストIDを所定の記憶領域に記憶すると共に、該セッションIDとリクエストIDとに対応付けて所定のログ情報を記録する第1の性能データ収集手段と、前記リクエストに応じて所定の1以上の関数の処理を実行するアプリケーション実行手段と、前記アプリケーション実行手段による前記各関数の処理実行時に、前記所定の記憶領域から前記セッションID、リクエストIDを取得して、該セッションIDとリクエストIDとに対応付けて前記各関数の処理実行に係る所定の性能データを記録する第2の性能データ収集手段とを有する。
上記サーバ装置では、上記任意のクライアントからの任意のリクエストに応じたセッションIDとリクエストIDとに対応付けて、各関数の性能データ等が記録される。よって、この記録を参照/分析すれば、各セッション・リクエスト毎の関数の性能データ(処理時間等)が把握できるようになる。例えば同じ関数であっても、特定のセッション・リクエストに対応するものの性能データのみが悪ければ、この特定のセッション・リクエストに固有の何らかの問題があることが推測できる。
また、上記サーバ装置において、例えば、前記第2の性能データ収集手段と前記アプリケーション実行手段を実現させるプログラムは、所定のログ出力処理と任意の各ログ出力対象/ログ出力箇所とが記述されたアスペクトソースファイルと、前記関数の処理に係るアプリケーションプログラムとをアスペクトコンパイルすることで生成される。
各アプリケーションプログラム毎に、逐一、必要な箇所にログ出力処理を追加するような手間が掛かることは必要なく、1つのアスペクトソースファイルを作成すれば済む。
また、上記サーバ装置において、例えば、任意のデータ収集オン/オフ情報を設定させて記憶する第1の設定・記憶手段を更に有し、前記第1又は第2の性能データ収集手段は、該データ収集オン/オフ情報を参照して、オフ設定である場合には前記ログ情報又は前記性能データの記録処理は実行しないようにすることもできる。
あるいは、例えば、前記アスペクトソースファイルには各レベル値に応じた複数種類のログ出力条件が記述され、任意のレベル値を設定させて記憶する第2の設定・記憶手段を更に有し、前記第2の性能データ収集手段は、該記憶されているレベル値に応じたログ出力条件に基づいて前記性能データの記録処理を実行するようにすることもできる。
あるいは、上記サーバ装置と同様の処理を実現する他の形態のサーバ装置として、例えば、任意のクライアントからの任意のリクエストに応じた処理を実行するサーバ装置であって、任意のクライアントから任意のリクエストを受け付ける毎に、このリクエストに応じたセッションID、リクエストIDを所定の記憶領域に記憶すると共に、該セッションIDとリクエストIDとに対応付けて所定のログ情報を記録する第1の性能データ収集手段と、前記リクエストに応じて所定の1以上の関数の処理を実行すると共に、前記所定の記憶領域に記憶されている前記セッションIDとリクエストIDを取得し、該各関数の処理の実行に伴い所定の各タイミングで、該セッションIDとリクエストIDとに対応付けて前記各関数の処理実行に係る所定の性能データを記録するアプリケーション実行・性能データ収集手段とを有するものであってもよい。
本発明のサーバ装置、そのプログラム等によれば、任意のJavaアプリケーションに関する性能データ収集処理の追加を容易に行うことができ、更にクライアント/リクエスト毎の性能データ収集が行えることでクライアントやリクエスト固有の問題があった場合に、
原因の特定が容易となる。
以下、図面を参照して本発明の実施の形態について説明する。
図1に、本例のクライアントとサーバからなるシステムのシステム構成図を示す。
図1において、クライアント100は、上記従来のクライアント100と同じであってよく(ブラウザ搭載の一般ユーザのパソコン等)、同一符号を付し、説明は省略する。
図示のWeb/Apサーバ10は、上記従来のWeb/Apサーバ70と同様に、一般的なJava実行環境上(OS15、JavaVM(Java仮想マシン)14、Servletコンテナ13)で、各種アプリケーションが実行されることになる。各種アプリケーションプログラムは、JSP/Servlet11、Javaクラス12等より成る。従来で説明したように、JSP/Servlet11が各Javaクラス12を呼び出すものであり、各Javaクラス12は1以上のメソッド(関数)を実行するものであり、概略的にはJavaクラス12をメソッド(関数)と見做してもよい。
そして、本例の構成では、Web/Apサーバ10は、更に、第1の性能データ収集プログラム16と第2の性能データ収集プログラム17を有する。
尚、第1の性能データ収集プログラム16と第2の性能データ収集プログラム17(その他、JSP/Servlet11、Javaクラス12等の他の各種プログラムも)は、例えば後述する図16に示す記憶部205等に格納されており、これをCPU201が読み出し・実行することにより、所定の機能・動作を実現するものであり、以下、特に逐一断らないが、当然、以下の説明における各種プログラムに係る機能・動作の説明は、これら各種プログラムがCPU201等の演算プロセッサにより実行されることにより実現される機能・動作を説明しているものである。
第1の性能データ収集プログラム(Servletフィルタ)16は、Javaのサーバアプリケーション形態の一つであるServletフィルタプログラムであり、Servlet やJSPの実行環境であるServletコンテナ13上で動作する。本プログラムは、アプリケーションプログラムとは別物であり、アプリケーションプログラムの実行環境に配備して利用する。
そして、第1の性能データ収集プログラム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クラス72(但し、処理時間収集処理無しのバージョン)に相当する。
(3)アスペクトプログラム(.classファイル)23;
アスペクトソースファイル21をアスペクトコンパイルした結果生成される、上記第2の性能データ収集プログラム(Javaクラス)17である。アスペクトソースファイル21内で定義された各ログ出力対象関数内の各ログ出力箇所でアプリケーションプログラム(.classファイル)24が呼び出しを行うことで、ログ出力処理を行う。つまり、アスペクトプログラム(.classファイル)23自体は、基本的に、上記所定のログ出力処理を行うだけである。
所定のログ出力処理とは、後述する図5のログファイル41へのログデータ出力処理であり、このログデータ(性能データ)の具体例は例えば図8に示してある。
(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に、上記図8に示すテーブル50(性能データ50)の具体例を示す。
図示の通り、ログファイル41には、任意の同一のセッションID及びリクエストIDの組み合わせ毎に、この同一のセッションID及びリクエストIDによるURL57(ここでは省略して示す)へのアクセスに応じて実行された、すなわち任意のクライアント(ブラウザ)からの任意のリクエストに応じて実行された一連の関数処理等のログデータ(性能データ50)が、書き込まれた順番通りに(ログ出力処理実行順に)格納されている。
また、同図の例では、実行メソッド情報58として、α、βが格納されており、これはメソッド名(関数名)α、βの2つの関数が、セッションID=‘1122’及びリクエストID=‘3’によるURL57(ここでは省略して示す)へのアクセスに応じて実行されたことを意味する。そして、各関数α、βの実行開始時、終了時等にそれぞれログ出力されており、これに応じて各関数毎に、開始/終了56が「開始」、「終了」の2つのレコードが記録されている。
また、図示の一連のレコードの最初と最後のレコードには、実行メソッド情報58(関数名)が記録されていないが、これは、上記第1の性能データ収集プログラム(Servletフィルタ)16による上記HTTPリクエスト受付時及び応答時のログ出力処理によって記録されたレコードであることを意味する。この第1の性能データ収集プログラム(Servletフィルタ)16による上記HTTPリクエストの受付及び応答に係る処理を「リクエスト受付・応答処理」と呼ぶものとする。従って、この一例では、ログファイル41には、任意の同一のセッションID及びリクエストIDの組み合わせ毎に、「リクエスト受付・応答処理」に係るレコードと、各関数実行(開始/終了)に係るレコードとが記録され
ることになる(例えば、ログ記録処理の際に、セッションID及びリクエストIDをキーにしてログファイル41を検索して、該当するレコード群の最後に新たなレコードを追加すればよい)。
尚、図9では、日付時刻情報(年月日時分秒.ミリ秒51)は、年月日時は省略し、分秒.ミリ秒のみ示してある。また、上記の通りURL57の具体例は省略してある。
上述した本システムのサーバ10等によれば、アプリケーションプログラムの各ソースコード毎に逐一、処理時間収集のための仕組みを組み込んだり、モジュールを入れ替える必要がなくなり、任意のJavaアプリケーションに関する性能データ収集処理の追加を容易に行うことができる。
更に、複数のクライアント、リクエストから同じ関数が呼ばれた場合であっても、クライアント、リクエストに対応した関数の処理時間を収集することができる。あるいは、各クライアント・リクエスト毎の処理全体に掛かった時間等も分かる。これより、後に収集したデータを解析することで、例えば、各クライアント・リクエスト毎の処理全体の時間や、各クライアント・リクエスト毎の各関数毎の処理時間等が分かる。これより、例えば同一の関数における各リクエストごとの処理時間を比較することで、特に処理時間が掛かっているものがあれば、そのクライアント・リクエスト固有の問題があること等が推測できる。
以下、上述した実施例の変形例として、変形例1、変形例2について説明するが、これら変形例は上述した実施例をベースとするものであるので、基本的に、上述した実施例との違いについてのみ説明する。
ここで、変形例1の説明において、上述した実施例との違いについて分かり易くする為に、まず、上述した実施例の動作を概略的に示す図面として図10、図11を示すものとし、以下、図10、図11について簡単に説明するものとする。
上記の通り、図10は上述した実施例のWeb/Apサーバ10の動作を概略的に示す図であり、図11はそのフローチャート図である。
図10に示す動作は、既に説明してある通りであり、任意のクライアント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に格納したセッション情報を消去する。
図11は、図10に対応する概略的な処理フローチャート図である。よって、必ずしも
実際の動作と一致するものではないが(実際の動作は図5、図6、図7等で既に説明してある)、以下、簡単に説明するものとする。
図11において、任意のリクエストを受信すると(ステップS31)、生成されるセッションID、リクエストIDを上記スレッド固有変数領域31に格納し、当該リクエストに応じた関数(Javaクラス12)が実行される毎に(ステップS33)、上記の例では関数処理開始時(ステップS34,YES)及び終了時(ステップS36,YES)にそれぞれ、上記各種情報(セッションID、リクエストID、日付時刻情報等)を取得して(ステップS35,S37)、ログファイル41に書き込む(ステップS39)。
以下、上記図10、図11の動作を比較の為に参照しつつ、まず、変形例1について説明する。
変形例1については、図12、図13を参照して説明する。
変形例1では、予め又は運用中の任意のときに、ユーザ(運用管理者等)が例えば不図示のオン/オフ設定用のソフトウェアを用いて、例えば不図示のオン/オフ設定画面上で所望のオン/オフ設定を行う。このオン/オフ設定情報は、上記オン/オフ設定用ソフトウェアによって、例えば主記憶装置30上の所定の記憶領域に記憶される。
そして、上記設定されたオン/オフ情報を参照して、図12、図13の処理を実行する。
以下、図12、図13について説明するが、既に述べている通り、上記図10、図11と比較して異なる点についてのみ説明する。
図12に示す通り、図示のステップS51,S52の処理が追加されている点が図10の処理とは異なるので、この点についてのみ説明する。すなわち、第1の性能データ収集プログラム(Servletフィルタ)16は、任意のクライアント100のブラウザからの任意のHTTPリクエストを受け取ると、まず、上記所定の記憶領域に記憶されている性能データ収集のオン/オフ設定を参照して、オン設定である場合には(ステップS51,YES)上述したセッション情報格納やログファイル41への出力処理を実行し、オフ設定である場合には(ステップS51,NO)これら処理は実行しない。これはリクエスト受信時だけでなくレスポンス時も同じである。
第2の性能データ収集プログラム(Javaクラス)17も同様に、(図12には特に示さないが)Javaクラス12からの呼び出しがあると、まず、上記設定されている性能データ収集のオン/オフ設定を参照して、オン設定である場合にのみ(ステップS52,YES)上述したログファイル41への出力処理を実行する。
尚、上記オン/オフ設定情報が記憶される所定の記憶領域は、例えば、後述する変形例2におけるレベル情報と同様、例えば後述する図14に示すクラス変数領域61等であってもよい。この場合には、後述する図14の場合と同様、第1の性能データ収集プログラム(Servletフィルタ)16は、クラス変数領域61に記憶されているオン/オフ設定情報を参照するだけでなく、このオン/オフ設定情報をスレッド固有変数領域62に格納することで、第2の性能データ収集プログラム(Javaクラス)17がこの変数領域62のオン/オフ設定情報を参照するようにしてもよい。勿論、この様な例に限るものではなく、第1の性能データ収集プログラム(Servletフィルタ)16及び第2の性能データ収集プログラム(Javaクラス)17が、オン/オフ設定情報を参照可能とするものであれば何でもよい。
また、図13において、図11と同一の処理ステップについては同一のステップ番号を
付してある。よって、図示の通り、ステップS31の処理の後にステップS61,S62が追加されている点を除いては図11の処理と同じであり、ステップS61、S62の処理についてのみ説明する。すなわち、ステップS61は上記性能データ収集のオン/オフ設定を参照・取得する処理であり、オン設定の場合には(ステップS62,YES)図11と同様にステップS32以降の処理を実行し、オフ設定の場合には(ステップS62,NO)これら処理は行わずにそのまま本処理を終了する。
上記図1〜図11で説明した実施例では、性能データ収集プログラムを組み込むことは容易に行えるようになるが、一旦組み込んだ後は常に性能データ収集が行われることになる。よって、当然、ログ出力処理が追加される分、サーバの負荷が増大することになる。
上記実施例による性能データ収集プログラムを組み込みは、アプリケーションプログラムの検証(デバッグ)時に行うものとし、運用前には元も戻すことで、運用中にはログ出力が行われないようにすることも考えられるが、運用中にも例えば処理時間の劣化が見られるような場合等、必要に応じて性能データ収集を行いたい場合もある。しかしながら、その為に運用中に常に性能データ収集プログラムを組み込んだ状態とすることは、上記の通りサーバの負荷が大きい。この為、必要になったときにその都度、性能データ収集プログラムを組み込み、必要が無くなったら元に戻すことも考えられるが、この様に必要になる都度組み込み作業を行うのでは、手間が掛かることになり、作業効率が悪化する。
上述した変形例1では、この様な問題を解決することができ、必要なときにだけ性能データ収集が行われるようにでき、オペレータ等は単にオン/オフ設定を行うだけで済み、手間が掛からなくなる。
次に、以下、変形例2について説明する。
図14は、変形例2におけるWeb/Apサーバ10の動作を示す図である。
以下、図5に示す動作とは異なる点についてのみ説明する。
図14に示すWeb/Apサーバ10では、主記憶装置30上の第1の性能データ収集プログラム16(Servletフィルタ)のクラス変数領域61に、レベル情報が記憶される。
このクラス変数領域61に記憶されるレベル情報は、例えば後述する図15に示す“レベル1”、“レベル2”等である。その意味で、図では“レベル情報”と記しているが、実際のレベル情報のレベル値といえる情報であるので、以下、“レベル値”と呼ぶものとし、実際のレベル情報とは区別するものとする。尚、実際のレベル情報は、後述するように(例えば図15参照)、予め各レベル値毎のレベル情報が、アスペクトソースファイル中に記述されている。
尚、初期レベル値は、第1の性能データ収集プログラム16(Servletフィルタ)のソースファイル内で定義されており、運用中には、上記変形例1と同様に、ユーザが、不図示のレベル設定用のJavaプログラムによって、クラス変数領域61に格納されているレベル値を変更することが可能である。
第1の性能データ収集プログラム16(Servletフィルタ)は、上記ログ出力処理(セッションID等の各種情報をログファイル41に書き込む処理)を実行すると共に、クラス変数領域61からレベル値を取得して、これをセッションID、リクエストIDと共にスレッド固有変数領域62に格納する。
そして、上述したようにJavaクラス12の呼出し処理により呼び出された第2の性
能データ収集プログラム(Javaクラス)17は、スレッド固有変数領域62を参照することで上記の通りセッションID、リクエストIDを取得すると共に、本変形例2においては上記レベル値を取得する。そして、取得したレベル値のレベル情報に応じたログ出力処理を行う(換言すれば、呼び出されてもログ出力処理を行わない場合がある)。
ここで、図15に、レベル情報の一例を示す。
上記の通り、レベル情報は、各レベル値毎に規定されているものであり、簡単の為、図示の例ではレベル1、レベル2の2つのレベル値の各レベル情報を示す。
本変形例2では、図15に示すように、各レベル値毎のレベル情報(ログ出力対象、ログ出力箇所等)が、アスペクトプログラムのソースファイルに記述されており(ユーザ等が任意に記述する)、アスペクトコンパイルを行うことでアスペクトプログラム(第2の性能データ収集プログラム17)にこれらのレベル情報が埋め込まれる。これらは、所謂アスペクト指向技術の一例であるAspectJにおけるポイントカット及びアドバイスとして定義されるものである。
図示の例では、上記の通り、レベル情報は、性能データ収集対象とする関数、及びログ出力箇所(関数実行前、実行後など)を指定するものであり、ログ出力対象とログ出力箇所とからなる。そして、レベル1ではログ出力対象は「jp.co.fesys.*」、ログ出力箇所は「関数実行前、実行後」となっている。これは、ログ出力対象がパッケージ“jp.co.fesys”に含まれる全てのクラス・関数であることを意味し、ログ出力箇所はこれら各クラス・関数の実行前、実行後であることを意味する。
また、図15に示すレベル2では、ログ出力対象は「com.abc.*」、ログ出力箇所は「関数呼出し時」である。これは、全てのパッケージ・クラスに含まれる全ての関数呼び出し時にログ出力を行うことを規定しているものである。
例えば、Javaの場合、非常に多くのパッケージやクラスが集まって1つのアプリケーションとして動作するものである。つまり、よく知られているように、一つの「Javaアプリケーションプログラム」は一つ以上の「パッケージ」から構成され、一つの「パッケージ」は一つ以上の「クラス」から構成され、一つの「クラス」は、複数の「属性(変数)」と、複数の「メソッド(関数)」で構成されている。このなかで性能データログ出力対象とするパッケージ、クラス名を指定し、更にログ出力箇所を指定するものである。
第2の性能データ収集プログラム(Javaクラス)17は、スレッド固有変数領域62に格納されたレベル値を参照して、このレベル値のレベル情報の条件を適用して、ログ出力処理を行うことになる。
例えばスレッド固有変数領域62に格納された(つまり設定された)レベル値が、レベル1であった場合には、第2の性能データ収集プログラム(Javaクラス)17は、例えば、呼び出し元のクラス・関数が、パッケージ“jp.co.fesys”に含まれるクラス・関数では無い場合には、ログ出力処理を行わないことになる。
この様に、変形例2では、ログ出力処理の条件を変更するときに、逐一、アスペクトコンパイルする必要なく、レベル値の設定を変更するだけで済むようになる。
図16に、上記Web/Apサーバ10等のコンピュータのハードウェア構成図を示す。
図16に示すコンピュータ200は、CPU201、メモリ202、入力部203、出
力部204、記憶部205、記録媒体駆動部206、及びネットワーク接続部207を有し、これらがバス208に接続された構成となっている。
CPU201は、当該コンピュータ200全体を制御する中央処理装置である。また、CPU201には、例えば、上記主記憶装置30が内臓されていてもよい。
メモリ202は、プログラム実行、データ更新等の際に、記憶部205(あるいは可搬型記録媒体209)に記憶されているプログラムあるいはデータを一時的に格納するRAM等のメモリである。CPU201は、メモリ202に読み出したプログラム/データを用いて、各種処理を実行する。
出力部204は、例えばディスプレイ等であり、入力部203は、例えば、キーボード、マウス等である。
ネットワーク接続部207は、例えば不図示のネットワークに接続して、他の情報処理装置(クライアント100等)との通信(コマンド/データ送受信等)を行う為の構成である。
記憶部205は、例えばハードディスク等であり、例えば第1、第2の性能データ収集プログラム16,17や、アプリケーションプログラム(JSP/Servlet11、Javaクラス12等)が格納されている。その他、OS15やJavaVM14、アスペクトコンパイラ20等を実現するプログラム等、本例のWeb/Apサーバ10の各種機能を実現させる為に必要となる各種プログラムが格納されている。
また、記憶部205には、図8に示すログデータ等が格納されてもよい。
CPU201は、上記記憶部205に格納されている各種プログラムを読み出し・実行することにより、上述したWeb/Apサーバ10の各種機能・処理(特に図2、図5〜図7、図10〜図14に示す処理)を実現する。
また、記憶部205は、上記補助記憶装置40に相当するものであってもよく、この場合にはログファイル41も記憶されることになる。
あるいは、上記記憶部205に格納される各種プログラム/データは、可搬型記録媒体209に記憶されているものであってもよい。この場合、可搬型記録媒体209に記憶されているプログラム/データは、記録媒体駆動部206によって読み出される。可搬型記録媒体209とは、例えば、FD(フレキシブル・ディスク)209a、CD−ROM209b、その他、DVD、光磁気ディスク等である。
あるいは、また、上記プログラム/データは、ネットワーク接続部207により接続しているネットワークを介して、他の装置内に記憶されているものをダウンロードするものであってもよい。あるいは、更に、インターネットを介して、外部の他の装置内に記憶されているものをダウンロードするものであってもよい。
また、本発明は、上記本発明の各種処理をコンピュータ上で実現するプログラムを記録した可搬型記憶媒体として構成できるだけでなく、当該プログラム自体として構成することもできる。
本例のクライアントとサーバからなるシステムのシステム構成図である。 第2の性能データ収集プログラム等の生成処理を説明する為の図である。 図2と図1を対応付けて示す図である。 (a)、(b)はアスペクトコンパイル結果のアプリケーション(Javaクラス)の一例である。 本例のシステム全体の動作を示す図である。 第1の性能データ収集プログラムの処理フローチャート図である。 第2の性能データ収集プログラムの処理フローチャート図である。 ログファイルの格納データ形式の一例を示す図である。 図8に示すデータ(性能データ)の具体例を示す図である。 本実施例のWeb/Apサーバの動作を概略的に示す図である。 図10に対応する概略的なフローチャート図である。 変形例1のWeb/Apサーバの動作を概略的に示す図である。 図12に対応する概略的なフローチャート図である。 変形例2におけるWeb/Apサーバの動作を示す図である。 レベル情報の一例を示す図である。 コンピュータ・ハードウェア構成図である。 従来のシステム構成及び性能データ収集方式を示す図である。
符号の説明
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 実行メソッド情報
61 クラス変数領域
62 スレッド固有の変数領域
200 コンピュータ
201 CPU
202 メモリ
203 入力部
204 出力部
205 記憶部
206 記録媒体駆動部
207 ネットワーク接続部
208 バス
209 可搬型記録媒体
209a FD(フレキシブル・ディスク)
209b CD−ROM

Claims (9)

  1. 任意のクライアントからの任意のリクエストに応じた処理を実行するサーバ装置であって、
    任意のクライアントから任意のリクエストを受け付ける毎に、このリクエストに応じたセッションID、リクエストIDを所定の記憶領域に記憶すると共に、該セッションIDとリクエストIDとに対応付けて所定のログ情報を記録する第1の性能データ収集手段と、
    前記リクエストに応じて所定の1以上の関数の処理を実行するアプリケーション実行手段と、
    前記アプリケーション実行手段による前記各関数の処理実行時に、前記所定の記憶領域から前記セッションID、リクエストIDを取得して、該セッションIDとリクエストIDとに対応付けて前記各関数の処理実行に係る所定の性能データを記録する第2の性能データ収集手段と、
    を有することを特徴とするサーバ装置。
  2. 前記第2の性能データ収集手段と前記アプリケーション実行手段を実現させるプログラムは、所定のログ出力処理と任意の各ログ出力対象/ログ出力箇所とが記述されたアスペクトソースファイルと、前記関数の処理に係るアプリケーションプログラムとをアスペクトコンパイルすることで生成されることを特徴とする請求項1記載のサーバ装置。
  3. 任意のデータ収集オン/オフ情報を設定させて記憶する第1の設定・記憶手段を更に有し、
    前記第1又は第2の性能データ収集手段は、該データ収集オン/オフ情報を参照して、オフ設定である場合には前記ログ情報又は前記性能データの記録処理は実行しないことを特徴とする請求項1又は2記載のサーバ装置。
  4. 前記アスペクトソースファイルには各レベル値に応じた複数種類のログ出力条件が記述され、
    任意のレベル値を設定させて記憶する第2の設定・記憶手段を更に有し、
    前記第2の性能データ収集手段は、該記憶されているレベル値に応じたログ出力条件に基づいて前記性能データの記録処理を実行することを特徴とする請求項2記載のサーバ装置。
  5. 任意のクライアントからの任意のリクエストに応じた処理を実行するサーバ装置であって、
    任意のクライアントから任意のリクエストを受け付ける毎に、このリクエストに応じたセッションID、リクエストIDを所定の記憶領域に記憶すると共に、該セッションIDとリクエストIDとに対応付けて所定のログ情報を記録する第1の性能データ収集手段と、
    前記リクエストに応じて所定の1以上の関数の処理を実行すると共に、前記所定の記憶領域に記憶されている前記セッションIDとリクエストIDを取得し、該各関数の処理の実行に伴い所定の各タイミングで、該セッションIDとリクエストIDとに対応付けて前記各関数の処理実行に係る所定の性能データを記録するアプリケーション実行・性能データ収集手段と、
    を有することを特徴とするサーバ装置。
  6. 前記アプリケーション実行・ログ記録手段を実現させるプログラムは、所定のログ出力処理と任意の各ログ出力対象/ログ出力箇所とが記述されたアスペクトソースファイルと、前記関数の処理に係るアプリケーションプログラムとをアスペクトコンパイルすること
    で、該アプリケーションプログラム中の前記各ログ出力対象/ログ出力箇所に該当する箇所に前記所定のログ出力処理が埋め込まれることで生成されることを特徴とする請求項5記載のサーバ装置。
  7. 前記各関数の処理実行に係る所定の性能データは、該各関数の関数名、処理開始/終了日時であることを特徴とする請求項1〜6の何れかに記載のサーバ装置。
  8. 任意のクライアントからの任意のリクエストに応じた処理を実行するサーバ装置のコンピュータを、
    任意のクライアントから任意のリクエストを受け付ける毎に、このリクエストに応じたセッションID、リクエストIDを所定の記憶領域に記憶すると共に、該セッションIDとリクエストIDとに対応付けて所定のログ情報を記録する第1の性能データ収集手段と、
    前記リクエストに応じて所定の1以上の関数の処理を実行すると共に、該各関数の処理の実行に伴い所定のタイミングで第2の性能データ収集手段を呼び出すアプリケーション実行手段と、
    前記アプリケーション実行手段からの前記呼び出しに応じて、前記所定の記憶領域から前記セッションID、リクエストIDを取得して、該セッションIDとリクエストIDとに対応付けて前記各関数の処理実行に係る所定の性能データを記録する第2の性能データ収集手段、
    として機能させる為のプログラム。
  9. 任意のクライアントからの任意のリクエストに応じた処理を実行するサーバ装置のコンピュータを、
    任意のクライアントから任意のリクエストを受け付ける毎に、このリクエストに応じたセッションID、リクエストIDを所定の記憶領域に記憶すると共に、該セッションIDとリクエストIDとに対応付けて所定のログ情報を記録する第1の性能データ収集手段と、
    前記リクエストに応じて所定の1以上の関数の処理を実行すると共に、前記所定の記憶領域に記憶されている前記セッションIDとリクエストIDを取得し、該各関数の処理の実行に伴い所定の各タイミングで、該セッションIDとリクエストIDとに対応付けて前記各関数の処理実行に係る所定の性能データを記録するアプリケーション実行・性能データ収集手段、
    として機能させる為のプログラム。
JP2007229710A 2007-09-05 2007-09-05 サーバ装置、そのプログラム Pending JP2009064125A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007229710A JP2009064125A (ja) 2007-09-05 2007-09-05 サーバ装置、そのプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007229710A JP2009064125A (ja) 2007-09-05 2007-09-05 サーバ装置、そのプログラム

Publications (1)

Publication Number Publication Date
JP2009064125A true JP2009064125A (ja) 2009-03-26

Family

ID=40558677

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007229710A Pending JP2009064125A (ja) 2007-09-05 2007-09-05 サーバ装置、そのプログラム

Country Status (1)

Country Link
JP (1) JP2009064125A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014081811A (ja) * 2012-10-17 2014-05-08 Hitachi Solutions Ltd ログ管理システム、および、ログ管理方法
CN108063685A (zh) * 2017-12-06 2018-05-22 迈普通信技术股份有限公司 日志分析方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07129438A (ja) * 1993-11-02 1995-05-19 Nec Corp 情報処理性能測定方法
JP2001306364A (ja) * 2000-04-18 2001-11-02 Ntt Comware Corp トランザクション処理システムおよびその記録媒体
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
JPH07129438A (ja) * 1993-11-02 1995-05-19 Nec Corp 情報処理性能測定方法
JP2001306364A (ja) * 2000-04-18 2001-11-02 Ntt Comware Corp トランザクション処理システムおよびその記録媒体
WO2005048118A1 (ja) * 2003-11-17 2005-05-26 Kenji Katsui オンライン手続きにおける計測方法、評価方法及びアンケート実施方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014081811A (ja) * 2012-10-17 2014-05-08 Hitachi Solutions Ltd ログ管理システム、および、ログ管理方法
CN108063685A (zh) * 2017-12-06 2018-05-22 迈普通信技术股份有限公司 日志分析方法及装置
CN108063685B (zh) * 2017-12-06 2021-06-18 迈普通信技术股份有限公司 日志分析方法及装置

Similar Documents

Publication Publication Date Title
EP2442230B1 (en) Two pass automated application instrumentation
US9632769B2 (en) Software build optimization
Oaks Java Performance: The Definitive Guide: Getting the Most Out of Your Code
US7877734B2 (en) Selective profiling of program code executing in a runtime environment
US9411616B2 (en) Classloader/instrumentation approach for invoking non-bound libraries
JP4681491B2 (ja) プロファイリングプログラムおよびプロファイリング方法
US7665098B2 (en) System and method for monitoring interactions between application programs and data stores
JP2010079508A (ja) プロファイリング方法およびプロファイリングプログラム
JP2006185211A (ja) プログラム解析装置、テスト実行装置、その解析方法及びプログラム
Eichelberger et al. Flexible resource monitoring of Java programs
US20150006961A1 (en) Capturing trace information using annotated trace output
JP2004164554A (ja) プログラム実行監視装置および方法
US20040168157A1 (en) System and method for creating a process invocation tree
JP4867864B2 (ja) 性能データ収集・表示システム、性能データ表示装置、そのプログラム
Dupriez et al. Sindarin: A versatile scripting api for the pharo debugger
JP2009237610A (ja) コード変換装置及びコード変換方法
JP2009064125A (ja) サーバ装置、そのプログラム
US8261245B2 (en) Method and system for associating profiler data with a reference clock
Ruprecht et al. Automatic feature selection in large-scale system-software product lines
JP6717140B2 (ja) 解析プログラム、解析方法、及び解析装置
Nagarajan et al. A system for debugging via online tracing and dynamic slicing
JP2022150518A (ja) テスト処理プログラム、テスト処理方法および情報処理装置
JP2007323299A (ja) レビュー実施順序決定装置、レビュー実施順序決定プログラム、レビュー実施順序決定プログラムが格納された記録媒体およびレビュー実施順序決定方法
JP2008123438A (ja) コンピュータシステム、プログラム情報収集方法、およびコンピュータプログラム
JP2003015914A (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: 20110720

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110726

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20111122