(57)【特許請求の範囲】
【請求項１】
ＨＴＴＰクライアントソフトウェアからＨＴＴＰに則ったリクエストを受けて処理を実行し、要求されたデータを含むリプライをＨＴＴＰクライアントソフトウェアに返すＨＴＴＰサーバソフトウェアであって、前記処理を実行する間に該ＨＴＴＰサーバソフトウェア自体に含まれない、ソフトウェア開発者が作成した外部の機能を少なくとも２回呼び出す仕組みを備えたＨＴＴＰサーバソフトウェアの性能データを収集する方法であって、
前記外部の機能を実現するために、ＨＴＴＰサーバソフトウェアから呼び出される度にその時点の時刻のデータを取得し、該取得した複数の時刻データ中、時刻的に隣接した２つの時刻データの差を算出する処理時間計算部と、前記時刻データの差をＨＴＴＰサーバソフトウェアでの特定の処理に要した処理時間データとして蓄積する処理時間データ格納部とが設けられたＨＴＴＰサーバ性能データ収集システムにおける、前記処理時間計算部は、
ＨＴＴＰサーバソフトウェアから呼び出された時に渡された入力引数あるいは入出力引数に処理ＩＤ及び時刻データのいずれも含まれていなければ、その出力変数あるいは入出力変数にその時点の時刻データもしくはその時点の時刻データに対応付けてテーブルに記録した処理ＩＤを含めてＨＴＴＰサーバソフトウェアへ渡し、
また、前記処理時間計算部は、ＨＴＴＰサーバソフトウェアから呼び出された時に渡された入力引数あるいは入出力引数に処理ＩＤが含まれていれば、当該処理ＩＤに対応する時刻データを前記テーブルから調べ出し、該時刻データとその時点の時刻データとの差を前記ＨＴＴＰサーバソフトウェアでの特定の処理に要した処理時間データとし、テーブルから前記処理ＩＤとこれに対応付けられた時刻データのデータを消去するとともにその時点の時刻データを前記処理ＩＤに対応付けてテーブルに記録し、さらに当該処理ＩＤを出力変数あるいは入出力変数に含めてＨＴＴＰサーバソフトウェアへ渡し、
また、前記処理時間計算部は、ＨＴＴＰサーバソフトウェアから呼び出された時に渡された入力引数あるいは入出力引数に時刻データが含まれていれば、当該時刻データとその時点の時刻データとの差を前記ＨＴＴＰサーバソフトウェアでの特定の処理に要した処理時間データとし、さらにその時点の時刻データを出力変数あるいは入出力変数に含めてＨＴＴＰサーバソフトウェアへ渡す
ことを特徴とするＨＴＴＰサーバ性能データ収集方法。
【請求項２】
ＨＴＴＰクライアントソフトウェアからＨＴＴＰに則ったリクエストを受けて処理を実行し、要求されたデータを含むリプライをＨＴＴＰクライアントソフトウェアに返すＨＴＴＰサーバソフトウェアであって、前記処理を実行する間に該ＨＴＴＰサーバソフトウェア自体に含まれない、ソフトウェア開発者が作成した外部の機能を少なくとも２回呼び出す仕組みを備えたＨＴＴＰサーバソフトウェアの性能データを収集するシステムにおいて、
前記外部の機能を実現するために、ＨＴＴＰサーバソフトウェアから呼び出される度にその時点の時刻のデータを取得し、該取得した複数の時刻データ中、時刻的に隣接した２つの時刻データの差を算出する処理時間計算部を設けるとともに、
前記時刻データの差をＨＴＴＰサーバソフトウェアでの特定の処理に要した処理時間データとして蓄積する処理時間データ格納部を設け、
前記処理時間計算部は、
ＨＴＴＰサーバソフトウェアから呼び出された時に渡された入力引数あるいは入出力引数に処理ＩＤ及び時刻データのいずれも含まれていなければ、その出力変数あるいは入出力変数にその時点の時刻データもしくはその時点の時刻データに対応付けてテーブルに記録した処理ＩＤを含めてＨＴＴＰサーバソフトウェアへ渡し、
また、ＨＴＴＰサーバソフトウェアから呼び出された時に渡された入力引数あるいは入出力引数に処理ＩＤが含まれていれば、当該処理ＩＤに対応する時刻データを前記テーブルから調べ出し、該時刻データとその時点の時刻データとの差を前記ＨＴＴＰサーバソフトウェアでの特定の処理に要した処理時間データとし、テーブルから前記処理ＩＤとこれに対応付けられた時刻データのデータを消去するとともにその時点の時刻データを前記処理ＩＤに対応付けてテーブルに記録し、さらに当該処理ＩＤを出力変数あるいは入出力変数に含めてＨＴＴＰサーバソフトウェアへ渡し、
また、ＨＴＴＰサーバソフトウェアから呼び出された時に渡された入力引数あるいは入出力引数に時刻データが含まれていれば、当該時刻データとその時点の時刻データとの差を前記ＨＴＴＰサーバソフトウェアでの特定の処理に要した処理時間データとし、さらにその時点の時刻データを出力変数あるいは入出力変数に含めてＨＴＴＰサーバソフトウェアへ渡すように構成されている
ことを特徴とするＨＴＴＰサーバ性能データ収集システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）技術に関わり、特にＨＴＴＰサーバソフトウェアの性能データを収集する技術に関する。
【０００２】
【従来の技術】
近年、インターネット上での電子商取引サービスや情報配信サービス等の各種の情報通信サービス、イントラネットでの社内システム等の分野を中心として、ＨＴＴＰ（ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）（例えば、ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ，ｈｔｔｐ：／／ｗｗｗ．ｗ３．ｏｒｇ／Ｐｒｏｔｏｃｏｌｓ／参照）に則ったＨＴＴＰリクエストを受けて処理を実行し、要求されたデータを含むＨＴＴＰリプライを返すＨＴＴＰサーバソフトウェア（以下、単にＨＴＴＰサーバ）を導入して、情報提供やビジネストランザクション処理を行うことが一般化している。
【０００３】
図１はＨＴＴＰサーバにおける基本的な動作を示すもので、ＷｅｂブラウザやＪａｖａアプリケーション等のＨＴＴＰクライアントソフトウェア（以下、単にＨＴＴＰクライアント）１からＨＴＴＰリクエスト２を受けたＨＴＴＰサーバ３は、ＨＴＴＰリクエストヘッダ解析、ユーザＩＤの検査、アクセス権確認、ハンドラ（ＣＧＩやＳｅｒｖｌｅｔの起動等）、ログ記録等の処理を順次実行し、要求されたデータを含むＨＴＴＰリプライ４をＨＴＴＰクライアント１へ返す。
【０００４】
図１に示すように、ＨＴＴＰリクエストヘッダ解析、ユーザＩＤの検査、アクセス権確認、ハンドラ、ログ記録等のそれぞれの処理は、ＨＴＴＰサーバ３内の処理部（処理ソフトウェア）５−１，５−２，……５−ｎで実行される。ほとんどのＨＴＴＰサーバでは、１つもしくは２つ以上のＨＴＴＰクライアントから同時に複数のＨＴＴＰリクエストを受け付けた時、プロセスやスレッドの新規起動、スレッドプーリング等の方法を用いることで、それらの複数のＨＴＴＰリクエストに応じた同一あるいは異なる内容の処理を複数並行して実行することが可能である。
【０００５】
ＨＴＴＰサーバの中には、処理を実行する間に、該ＨＴＴＰサーバ自体には含まれない、ソフトウェア開発者が作成した機能（関数）６−１，６−２，……６−ｎを少なくとも２回、ここではｎ回呼び出す（７−１，７−２，……７−ｎ）仕組みを備えているものがある。
【０００６】
例えば、Ａｐａｃｈｅ（Ａｐａｃｈｅ、Ａｐａｃｈｅ  Ｓｏｆｔｗａｒｅ  Ｆｏｕｎｄａｔｉｏｎ．，ｈｔｔｐ：／／ｈｔｔｄ．ａｐａｃｈｅ．ｏｒｇ参照）のＨＴＴＰサーバでは、ソフトウェア開発者が作成した機能を拡張モジュール等の形でＨＴＴＰサーバに予め登録しておくことにより、ＨＴＴＰサーバがＨＴＴＰリクエストを受けた後にＨＴＴＰヘッダ解析、ユーザＩＤの検査、アクセス権確認、ハンドラ、ログ記録等の処理を順次実行する段階で、ソフトウェア開発者が作成した機能を呼び出して実行することが可能となっている。この各段階の処理で呼び出される機能は、同一でも、個々に異なっていても良い。
【０００７】
このＨＴＴＰサーバが、ソフトウェア開発者が作成した機能を呼び出すことを実現する仕組みは、ＨＴＴＰサーバが処理を実行する間に、ソフトウェア開発者の意図する任意の処理を実行させることを目的に設けられている。
【０００８】
なお、通常、前述したＨＴＴＰクライアント１はユーザ端末等のクライアントコンピュータ上で動作し、ＨＴＴＰサーバ３及び機能６−１〜６−ｎはネットワーク内のサーバコンピュータ上で動作するが、これに限定されるものではない。
【０００９】
【発明が解決しようとする課題】
ＨＴＴＰサーバがＨＴＴＰリクエストを受けて、例えばＨＴＴＰヘッダ解析、ユーザＩＤの検査、アクセス権確認、ハンドラ、ログ記録等の処理を順次実行する時に、それらのうちの任意の一つ以上の処理の実行に要した時間のデータを収集して蓄積することができれば、ＨＴＴＰサーバの運用管理者は、ＨＴＴＰサーバのクラスタリングやマシンの更改等の必要性を判断して、ＨＴＴＰサーバが異常を来さないよう対処手段をとることができる。
【００１０】
従って、ＨＴＴＰサーバの運用管理者がＨＴＴＰサーバの実行する処理の部分の処理時間を知ることができるよう、その処理時間データを収集して蓄積する仕組みが望まれている。
【００１１】
本発明の目的は、ＨＴＴＰサーバがＨＴＴＰヘッダ解析、ユーザＩＤの検査、アクセス権確認、ハンドラ、ログ記録等の処理を順次実行する時に、それらの一つ以上の処理の処理時間を知ることができるよう、その処理時間データを収集して蓄積する機構を実現することにある。
【００１２】
【課題を解決するための手段】
図２は本発明の実施の形態の一例を示すシステム構成図であって、本発明のシステムは、処理時間計算部１１と、処理時間データ格納部１２とからなる。なお、処理時間計算部１１はＨＴＴＰサーバソフトウェア自体に含まれない、ソフトウェア開発者が作成した外部の機能として、例えばネットワーク内のサーバコンピュータ上に設けられ、また、処理時間データ格納部１２もネットワーク内のサーバコンピュータ上に設けられるが、これに限定されるものではない。
【００１３】
（１）処理時間計算部１１
処理時間計算部１１は、ＨＴＴＰサーバ３がＨＴＴＰリクエスト２を受け、ＨＴＴＰサーバ３内で処理部５−１〜５−ｎによりＨＴＴＰヘッダ解析、ユーザＩＤの検査、アクセス権確認、ハンドラ、ログ記録等の処理が順次実行される間に、外部の機能としてＨＴＴＰサーバ３から少なくとも２回、ここではｎ回呼び出される（７−１〜７−ｎ）。
【００１４】
処理時間計算部１１は、ＨＴＴＰサーバ３から呼び出される度に、当時点での時刻を取得する。処理時間計算部１１がＨＴＴＰサーバ３から少なくとも２回呼び出された結果として取得された少なくとも２つの時刻データの中で、処理時間計算部１１は、時刻的に隣接する２つの時刻の差をＨＴＴＰサーバ３での特定の処理に要した処理時間として算出する。また、算出された処理時間データは、処理時間データ格納部１２に送られる。
【００１５】
ここで、ＨＴＴＰサーバ３が処理を複数並行して実行する場合、ＨＴＴＰサーバ３から呼び出された処理時間計算部１１が時刻を取得する時、その時刻がＨＴＴＰサーバ３が実行しているどの処理に関わるものなのかを識別できるようにする必要がある。このため、処理時間計算部１１は、必要に応じて、ＨＴＴＰサーバ３が実行する個々の処理を識別するための処理ＩＤを生成し、取得した時刻データにその処理ＩＤを対応付ける形で、自らの保持する処理ＩＤ−時刻対応テーブル１３に保持する。
【００１６】
（２）処理時間データ格納部
処理時間データ格納部１２は、処理時間計算部１１から、ＨＴＴＰサーバ３での特定の処理に要した処理時間データを受信し、これを蓄積する。
【００１７】
以上の構成により、［００１１］で述べた目的を実現する。
【００１８】
【発明の実施の形態】
図３及び図４は本発明の実施の形態の一例を示す処理のフローチャートである。以下、図２、図３及び図４を用いて本発明の実施の形態について説明する。
【００１９】
ＨＴＴＰサーバ３を動作させるにあたり、まず、ＨＴＴＰサーバ３があるＨＴＴＰリクエスト２を受けて処理を実行する時にソフトウェア開発者が作成した機能を少なくとも２回呼び出すよう、予めＨＴＴＰサーバ３を設定しておく。その後、ＨＴＴＰクライアント１からのＨＴＴＰリクエスト２を受信して処理できるようにＨＴＴＰサーバ３を起動しておく。
【００２０】
ＨＴＴＰサーバ３がＨＴＴＰリクエスト２を受けた（ｓ１）後、ＨＴＴＰサーバ３に含まれる処理部５−１〜５−ｎは各々、ＨＴＴＰヘッダ解析、ユーザＩＤの検査、アクセス権確認、ハンドラ、ログ記録等のいずれかの処理を実行する。また、個々の処理部５−１〜５−ｎはその実行の間に、処理時間計算部１１を外部の機能として呼び出す（７−１〜７−ｎ）（ｓ２）。
【００２１】
処理時間計算部１１がＨＴＴＰサーバ３から呼び出された時、処理時間計算部１１は、まず、その時点での時刻データ（時刻データＡ）を取得する（ｓ３）。
【００２２】
次に、処理時間計算部１１は、ＨＴＴＰサーバ３からの呼び出し時に渡された入力引数あるいは入出力引数に時刻データもしくは処理ＩＤデータが含まれているかどうかを確認する（ｓ４，ｓ５）。この入力引数あるいは入出力引数に時刻データもしくは処理ＩＤが含まれているかどうかにより、処理時間計算部１１は、以下の（ａ）（ｂ）（ｃ）のいずれかを実行する。
【００２３】
（ａ）入力引数あるいは入出力引数に時刻データも処理ＩＤデータも含まれていない場合
処理時間計算部１１は、自身がＨＴＴＰサーバ３の実行する個々の処理を識別するために処理ＩＤデータを用いるかどうか（ｓ６）により、以下の（ａ−１）（ａ−２）のいずれかを実行する。
【００２４】
（ａ−１）処理ＩＤデータを用いない場合
ＨＴＴＰサーバ３から呼び出された時の出力変数あるいは入出力変数に時刻データＡを書き込み、出力変数あるいは入出力変数に含めた形で時刻データＡをＨＴＴＰサーバ３へ渡す（ｓ７）。
【００２５】
（ａ−２）処理ＩＤデータを用いる場合
ＨＴＴＰサーバ３が実行する個々の処理を識別するための処理ＩＤを生成し、時刻データＡとその処理ＩＤの対応付けのデータを処理ＩＤ−時刻対応テーブル１３に記録する（ｓ８）。さらに、必要に応じて、ＨＴＴＰサーバ３から呼び出された時の出力変数あるいは入出力変数にその処理ＩＤを書き込み、出力変数あるいは入出力変数に含めた形でその処理ＩＤをＨＴＴＰ３サーバへ渡す（ｓ８）。
【００２６】
（ｂ）入力引数あるいは入出力引数に処理ＩＤデータが含まれている場合（処理ＩＤデータを用いる場合）
処理時間計算部１１は、処理ＩＤ−時刻対応テーブル１３から、入力引数あるいは入出力引数に含まれる処理ＩＤデータに対応する時刻データ（時刻データＢ）を調べ出し、時刻データＡと時刻データＢの時刻差を、それをＨＴＴＰサーバ３での特定の処理に要した処理時間のデータとして算出する。その後、処理時間計算部１１は、処理時間データ格納部１２を呼び出して（１４）その算出した処理時間データを処理時間データ格納部１２へ送り（ｓ９）、処理時間データ格納部１２では受け取った処理時間データを蓄積する（ｓ１０）。
【００２７】
この時、処理時間計算部１１は、処理ＩＤ−時刻対応テーブル１３に記録されている時刻データＢとその処理ＩＤの対応付けのデータを消去し、新たに、時刻データＡとその処理ＩＤを対応付けのデータを処理ＩＤ−時刻対応テーブル１３に記録する。さらに、処理時間計算部１１は、必要に応じて、ＨＴＴＰサーバ３から呼び出された時の出力変数あるいは入出力変数にその処理ＩＤを書き込み、出力変数あるいは入出力変数に含めた形でその処理ＩＤをＨＴＴＰサーバ３へ渡す（ｓ９）。
【００２８】
（ｃ）その入力引数あるいは入出力引数に時刻データが含まれている場合（処理ＩＤデータを用いない場合）
処理時間計算部１１は、入力引数あるいは入出力引数に含まれる時刻データ（時刻データＣ）を調べ出し、時刻データＡと時刻データＣの時刻差を、それをＨＴＴＰサーバ３での特定の処理に要した処理時間のデータとして算出する。その後、処理時間計算部１１は、処理時間データ格納部１２を呼び出して（１４）その算出された処理時間データを処理時間データ格納部１２へ送り（ｓ１１）、処理時間データ格納部１２では受け取った処理時間データを蓄積する（ｓ１２）。
【００２９】
その後、処理時間計算部１１は、ＨＴＴＰサーバ３から呼び出された時の出力変数あるいは入出力変数に時刻データＡを書き込み、出力変数あるいは入出力変数に含めた形で時刻データＡをＨＴＴＰサーバ３へ渡す（ｓ１３）。
【００３０】
以上、処理時間計算部１１がＨＴＴＰサーバ３から呼び出される度に、上記ｓ２〜ｓ１３の処理を実行する。
【００３１】
【発明の効果】
以上説明したように、本発明によれば、ＨＴＴＰサーバが１つもしくは２つ以上のＨＴＴＰクライアントから同時に複数のＨＴＴＰリクエストを受け付け、それらの個々のＨＴＴＰリクエストに対応して、ＨＴＴＰヘッダ解析、ユーザＩＤの検査、アクセス権確認、ハンドラ、ログ記録等の処理を順次実行する時に、それら個々の処理毎の処理時間データを収集して蓄積することが可能となる。
【図面の簡単な説明】
【図１】ＨＴＴＰサーバにおける基本的な動作を示す構成図
【図２】本発明の実施の形態の一例を示すシステム構成図
【図３】本発明の実施の形態の一例を示す処理のフローチャート
【図４】本発明の実施の形態の一例を示す処理のフローチャート
【符号の説明】
１：ＨＴＴＰクライアント、２：ＨＴＴＰリクエスト、３：ＨＴＴＰサーバ、４：ＨＴＴＰリプライ、５−１〜５−ｎ：処理部、６−１〜６−ｎ：ソフトウェア開発者が作成した機能、７−１〜７−ｎ：外部の機能の呼び出し、１１：処理時間計算部、１２：処理時間データ格納部、１３：処理ＩＤ−時刻対応テーブル、１４：処理時間データを渡すための呼び出し。
【図１】
0003590357.tif 000002
【図２】
0003590357.tif 000003
【図３】
0003590357.tif 000004
【図４】
0003590357.tif 000005