(57)【特許請求の範囲】
【請求項１】
アプリケーションを実行制御するプロセスの起動時に、当該プロセスで使用可能な第１のメモリ容量を取得する第１の取得部と、
第１のリクエストに対応する第１のアプリケーションの実行制御時に前記プロセスが使用する第２のメモリ容量を取得する第２の取得部と、
前記第１のリクエストを受信した後に受信する第２のリクエストに対応する第２のアプリケーションの実行制御時に前記プロセスが使用する第３のメモリ容量を取得する第３の取得部と、
前記第２のアプリケーションの実行により生成されるスレッド数を取得する第４の取得部と、
前記第２のメモリ容量および前記第３のメモリ容量を用いて一リクエスト当たりのメモリ容量を算出する第１の算出部と、
前記取得された前記スレッド数および前記一リクエスト当たりのメモリ容量を用いて一スレッド当たりのメモリ容量を算出する第２の算出部と、
前記第１のメモリ容量、前記第２のメモリ容量および前記一スレッド当たりのメモリ容量を用いて前記プロセスにおける前記スレッド数の上限値を算出して設定する上限値設定部と、
を備えることを特徴とするスレッド数制限装置。
【請求項２】
前記上限値設定部によって設定された前記スレッド数の上限値に従ってスレッド数を制限するスレッド数上限制御部をさらに備えることを特徴とする請求項１記載のスレッド数制限装置。
【請求項３】
前記プロセスの起動後、所定のサンプリング間隔ごとに、処理待ち状態のリクエスト数、および稼働状態のスレッド数を収集する収集部と、
前記プロセスの起動後、所定時間ごとに、前記収集部によって収集された前記処理待ち状態のリクエスト数および前記稼働状態のスレッド数を用いて時系列のリクエスト数データを生成する生成部と、
前記生成された前記時系列のリクエスト数データを用いて前記プロセスにおける前記スレッド数の下限値を算出して設定する下限値設定部と、
をさらに備えることを特徴とする請求項１または２記載のスレッド数制限装置。
【請求項４】
前記下限値設定部によって設定された前記スレッド数の下限値に従ってスレッド数を制限するスレッド数下限制御部をさらに備えることを特徴とする請求項３記載のスレッド数制限装置。
【請求項５】
前記第１のリクエストおよび前記第２のリクエストを送信する送信部をさらに備えることを特徴とする請求項１〜４のいずれか１項に記載のスレッド数制限装置。
【請求項６】
アプリケーションを実行制御するプロセスの起動時に、当該プロセスで使用可能な第１のメモリ容量を取得するステップと、
第１のリクエストに対応する第１のアプリケーションの実行制御時に前記プロセスが使用する第２のメモリ容量を取得するステップと、
前記第１のリクエストを受信した後に受信する第２のリクエストに対応する第２のアプリケーションの実行制御時に前記プロセスが使用する第３のメモリ容量を取得するステップと、
前記第２のアプリケーションの実行により生成されるスレッド数を取得するステップと、
前記第２のメモリ容量および前記第３のメモリ容量を用いて一リクエスト当たりのメモリ容量を算出するステップと、
前記取得された前記スレッド数および前記一リクエスト当たりのメモリ容量を用いて一スレッド当たりのメモリ容量を算出するステップと、
前記第１のメモリ容量、前記第２のメモリ容量および前記一スレッド当たりのメモリ容量を用いて前記プロセスにおける前記スレッド数の上限値を算出して設定するステップと、
を含むことを特徴とするスレッド数制限方法。
【請求項７】
請求項６に記載の各ステップをコンピュータに実行させるためのスレッド数制限プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スレッド数制限装置、スレッド数制限方法およびスレッド数制限プログラムに関する。
【背景技術】
【０００２】
コンピュータ処理を効率的に実行するための技術としてマルチスレッドがある。マルチスレッドは、一つのプログラムで複数のスレッドを生成し、複数のスレッドで並行してプログラムを処理する手法である。このようなマルチスレッド機能を有するプロセスは、スレッドを複数生成することで処理効率を向上させることができるが、必要以上にスレッドを生成するとメモリ容量が不足するなど処理効率が低下する要因となる。下記特許文献１には、プロセスにおける処理待ちのリクエスト数が増加しているときにはスレッド数を増加させ、処理待ちのリクエスト数が減少しているときにはスレッド数を減少させるシステムが開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平３−４００３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、プロセスを実行する際にプロセスに割り当てられるメモリ容量は、そのときのリソースの状況（例えば、他のプロセスの実行状況等）に応じて変動する。プロセスで使用可能なメモリ容量が変動すれば、作成可能なスレッド数や、処理速度も変動する。したがって、上記特許文献１のように、単にプロセスにおける処理待ちのリクエスト数に応じてスレッド数を増減させるだけでは、プロセスごとの処理を最適に制御しているとはいえない。
【０００５】
本発明は、上述した課題を解決するためになされたものであり、リソースの状況に応じてプロセスごとの処理を効率良く向上させることができるスレッド数制限装置、スレッド数制限方法およびスレッド数制限プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明のスレッド数制限装置は、アプリケーションを実行制御するプロセスの起動時に、当該プロセスで使用可能な第１のメモリ容量を取得する第１の取得部と、第１のリクエストに対応する第１のアプリケーションの実行制御時に前記プロセスが使用する第２のメモリ容量を取得する第２の取得部と、前記第１のリクエストを受信した後に受信する第２のリクエストに対応する第２のアプリケーションの実行制御時に前記プロセスが使用する第３のメモリ容量を取得する第３の取得部と、前記第２のアプリケーションの実行により生成されるスレッド数を取得する第４の取得部と、前記第２のメモリ容量および前記第３のメモリ容量を用いて一リクエスト当たりのメモリ容量を算出する第１の算出部と、前記取得された前記スレッド数および前記一リクエスト当たりのメモリ容量を用いて一スレッド当たりのメモリ容量を算出する第２の算出部と、前記第１のメモリ容量、前記第２のメモリ容量および前記一スレッド当たりのメモリ容量を用いて前記プロセスにおける前記スレッド数の上限値を算出して設定する上限値設定部と、を備える。
【０００７】
本発明のスレッド数制限方法は、アプリケーションを実行制御するプロセスの起動時に、当該プロセスで使用可能な第１のメモリ容量を取得するステップと、第１のリクエストに対応する第１のアプリケーションの実行制御時に前記プロセスが使用する第２のメモリ容量を取得するステップと、前記第１のリクエストを受信した後に受信する第２のリクエストに対応する第２のアプリケーションの実行制御時に前記プロセスが使用する第３のメモリ容量を取得するステップと、前記第２のアプリケーションの実行により生成されるスレッド数を取得するステップと、前記第２のメモリ容量および前記第３のメモリ容量を用いて一リクエスト当たりのメモリ容量を算出するステップと、前記取得された前記スレッド数および前記一リクエスト当たりのメモリ容量を用いて一スレッド当たりのメモリ容量を算出するステップと、前記第１のメモリ容量、前記第２のメモリ容量および前記一スレッド当たりのメモリ容量を用いて前記プロセスにおける前記スレッド数の上限値を算出して設定するステップと、を含む。
【０００８】
本発明のスレッド数制限プログラムは、上記スレッド数制限方法に含まれる各ステップをコンピュータに実行させる。
【発明の効果】
【０００９】
本発明によれば、リソースの状況に応じてプロセスごとの処理を効率良く向上させることができる。
【図面の簡単な説明】
【００１０】
【図１】実施形態におけるスレッド数制限装置の機能構成を例示するブロック図である。
【図２】スレッド数の上限値を設定する際の処理手順を例示するフローチャートである。
【図３】スレッド数の下限値を設定する際の処理手順を例示するフローチャートである。
【図４】従来のコンピュータ装置でのスレッド数の推移状態を例示する図である。
【図５】実施形態のスレッド数制限装置でのスレッド数の推移状態を例示する図である。
【図６】従来のコンピュータ装置および実施形態のスレッド数制限装置における過剰スレッド数および不足スレッド数を例示する図である。
【発明を実施するための形態】
【００１１】
以下、添付図面を参照して、本発明に係るスレッド数制限装置、スレッド数制限方法およびスレッド数制限プログラムの好適な実施形態について説明する。ここで、スレッド数制限装置は、マルチスレッドプログラムを実行可能な装置である。マルチスレッドプログラムとは、マルチスレッドで処理を実行するように記述されたプログラムをいう。
【００１２】
図１を参照して、実施形態におけるスレッド数制限装置の機能構成について説明する。スレッド数制限装置１は、リクエスト送信部１１と、スレッド制御部１２と、メモリ容量監視部１３と、スレッド数監視部１４と、キュー監視部１５と、制限値設定部１６と、を有する。
【００１３】
ここで、スレッド数制限装置１は、物理的には、例えば、ＣＰＵ（Central Processing Unit）と、記憶装置と、入出力インターフェースとを含んで構成される。これらの要素は、互いにバスを介して接続されている。記憶装置には、例えば、ＣＰＵで処理されるプログラムやデータを記憶するＲＯＭ（Read Only Memory）やＨＤＤ（Hard Disk Drive）、主として制御処理のための各種作業領域として使用されるＲＡＭ（Random Access Memory；メモリ）等が含まれる。ＣＰＵは、ＲＯＭに記憶されたプログラムを実行し、入出力インターフェースを介して受信される各種のメッセージ等に従ってＲＡＭに展開された各種のデータを処理する。これにより、以下に詳述するスレッド数制限装置１の各部の機能を実現することができる。
【００１４】
リクエスト送信部１１は、自装置１宛てのリクエストを発行して送信する。リクエストには、アプリケーションの実行要求が含まれる。リクエスト送信部１１は、プロセス起動直後の１件目のリクエストとして、初期起動用のアプリケーションの実行を要求するリクエストを発行する。リクエスト送信部１１は、プロセス起動直後の２件目のリクエストとして、マルチスレッドプログラムの実行を要求するリクエストを発行する。プロセスは、プログラムを実行することで生成され、プログラムに含まれるアプリケーションを実行制御する。
【００１５】
リクエスト送信部１１を備えることで、プロセスを起動してから、クライアントからのリクエストを処理するまでの間に、自ら発行したリクエストに基づいて、後述するスレッド数の上限値を設定することが可能となる。
【００１６】
スレッド制御部１２は、リクエストに応じてマルチスレッドプログラムを実行し、プロセス内にスレッドを生成することやスレッドを削除することによってスレッド数を制御する。スレッド制御部１２は、後述するスレッド数の上限値や下限値に従ってプロセス内のスレッド数を制限する。
【００１７】
メモリ容量監視部１３は、プロセスの起動時に、起動するプロセスで使用可能なメモリ容量を取得して監視データファイルに記憶する。メモリ容量監視部１３は、リクエストに対応するアプリケーションの実行時に、このアプリケーションの実行時にプロセスが使用するメモリ容量を取得し、監視データファイルに記憶する。
【００１８】
スレッド数監視部１４は、リクエストに対応するアプリケーションの実行時に、このアプリケーションの実行によってプロセス内に生成されるスレッド数を取得し、監視データファイルに記憶する。
【００１９】
スレッド数監視部１４は、プロセスの起動後、所定のサンプリング間隔ごとに、プロセス内に生成されている稼働状態のスレッド数を収集し、時系列の稼働状態スレッド数データとして監視データファイルに蓄積する。なお、上記所定のサンプリング間隔は、リクエスト数の増減に応じてスレッド数の下限値の設定を変動させるために適切となる間隔を実験等により求め、任意に設定することができる。また、上記所定のサンプリング間隔を、リクエストを送信するクライアント端末から設定できるようにしてもよい。
【００２０】
キュー監視部１５は、プロセスの起動後、上記所定のサンプリング間隔ごとに、処理待ち状態のリクエスト数を収集し、時系列の処理待ち状態リクエスト数データとして監視データファイルに蓄積する。
【００２１】
制限値設定部１６は、スレッド数の上限値および下限値をそれぞれ算出し、制限値パラメタファイルの上限値パラメタおよび下限値パラメタにそれぞれ設定する。
【００２２】
制限値設定部１６は、例えば、以下の手順にしたがって、スレッド数の上限値を算出して上限値パラメタに設定する。
【００２３】
最初に、制限値設定部１６は、メモリ容量監視部１３によって取得されたメモリ容量を用い、一リクエスト当たりのメモリ容量を算出する。一リクエスト当たりのメモリ容量は、例えば、下記式１を用いて算出することができる。
【００２４】
ＭＲ ＝ Ｍ２ − Ｍ１  …  式１
【００２５】
上記式１のＭＲは一リクエスト当たりのメモリ容量であり、Ｍ２は２件目のリクエストに対応するアプリケーションの実行時にプロセスが使用するメモリ容量であり、Ｍ１は１件目のリクエストに対応するアプリケーションの実行時にプロセスが使用するメモリ容量である。
【００２６】
続いて、制限値設定部１６は、スレッド数監視部１４によって取得されたスレッド数および一リクエスト当たりのメモリ容量ＭＲを用い、一スレッド当たりのメモリ容量を算出する。一スレッド当たりのメモリ容量は、例えば、下記式２を用いて算出することができる。なお、スレッド数とリクエスト数とは比例関係にあり、スレッド数はリクエスト数の整数倍になる。
【００２７】
ＭＴ ＝ ＭＲ／Ｔ  …  式２
【００２８】
上記式２のＭＴは一スレッド当たりのメモリ容量であり、ＭＲは一リクエスト当たりのメモリ容量であり、Ｔは２件目のリクエストに対応するアプリケーションの実行によって生成されるスレッド数である。
【００２９】
続いて、制限値設定部１６は、メモリ容量監視部１３によって取得されたメモリ容量および一スレッド当たりのメモリ容量ＭＴを用い、プロセスにおけるスレッド数の上限値を算出する。スレッド数の上限値は、例えば、下記式３を用いて算出することができる。
【００３０】
Ｔｍａｘ ＝ ｛（Ｍｍａｘ − Ｍ１）／ＭＴ｝ ＋ １  …  式３
【００３１】
上記式３のＴｍａｘはスレッド数の上限値であり、Ｍｍａｘはプロセスで使用可能なメモリ容量である。Ｍ１は１件目のリクエストに対応するアプリケーションの実行時にプロセスが使用するメモリ容量であり、ＭＴは一スレッド当たりのメモリ容量である。なお、上記式３で１を加算しているのは、ＭｍａｘからＭ１を差し引いたメモリ容量に基づいてスレッド数の上限値Ｔｍａｘを算出しているため、Ｍ１分のメモリ容量に生成可能な一スレッド分を加算したものである。
【００３２】
続いて、制限値設定部１６は、算出したスレッド数の上限値Ｔｍａｘを、制限値パラメタファイルの上限値パラメタに設定する。
【００３３】
制限値設定部１６は、例えば、以下の手順にしたがって、スレッド数の下限値を算出して下限値パラメタに設定する。
【００３４】
最初に、制限値設定部１６は、プロセスが起動した後、所定時間が経過するごとに、直近の所定時間の間に、キュー監視部１５によって収集された時系列の処理待ち状態リクエスト数データおよびスレッド数監視部１４によって収集された時系列の稼働状態スレッド数データを用いて、時系列のスレッド数データを生成する。
【００３５】
上記所定時間は、リクエスト数の増減に応じてスレッド数の下限値の設定を変動させるために適切となる時間を実験等により求め、任意に設定することができる。ただし、所定時間が短すぎると突発的なリクエスト数の変動に左右され易くなり、所定時間が長すぎるとリクエスト数の変動が平均化されてしまい、リクエスト数の増減に応じたスレッド数の下限値を設定することが難しくなる。この所定時間と上述した所定のサンプリング間隔とを調節することで、リクエスト数の増減をスレッド数の下限値に反映させる度合を調整することが可能となる。
【００３６】
ここで、上記時系列のスレッド数データは、例えば、処理待ち状態リクエスト数データをスレッド数データに換算し、換算後のスレッド数データと、稼働状態スレッド数データとを、同じサンプリング時刻ごとに加算していくことで生成することができる。
【００３７】
続いて、制限値設定部１６は、生成した時系列のスレッド数データを用い、プロセスにおけるスレッド数の下限値を算出する。スレッド数の下限値は、例えば、下記式４を用いて算出することができる。
【００３８】
Ｔｍｉｎ ＝ （Ｗ１＊Ｘ１ ＋ … ＋ Ｗｎ＊Ｘｎ）／（Ｗ１ ＋ … ＋ Ｗｎ）  …  式４
【００３９】
上記式４は、加重移動平均を算出する式である。上記式４のＴｍｉｎはスレッド数の下限値であり、Ｘ１〜Ｘｎは時系列のスレッド数データであり、Ｗ１〜Ｗｎはスレッド数データＸ１〜Ｘｎに対してそれぞれ付加する重みである。重みＷ１〜Ｗｎは、スレッド数データＸ１〜Ｘｎのサンプリング時刻が現在に近いほど大きくなる。これにより、現在の状況に応じた下限値を算出することが可能となる。
【００４０】
続いて、制限値設定部１６は、算出したスレッド数の下限値Ｔｍｉｎが、上限値パラメタに設定されているスレッド数の上限値Ｔｍａｘよりも大きい場合には、算出したスレッド数の下限値Ｔｍｉｎに、上限値パラメタに設定されているスレッド数の上限値Ｔｍａｘをセットする。
【００４１】
続いて、制限値設定部１６は、算出したスレッド数の下限値Ｔｍｉｎまたは上限値Ｔｍａｘをセットした下限値Ｔｍｉｎを、制限値パラメタファイルの下限値パラメタに設定する。
【００４２】
次に、図面を参照して本実施形態におけるスレッド数制限装置の動作について説明する。図２を参照して、スレッド数の上限値を設定する際の動作について説明する。図２は、スレッド数の上限値を設定する際の処理手順を例示するフローチャートである。
【００４３】
最初に、プロセスが起動する（ステップＳ１０１）と、メモリ容量監視部１３は、その起動したプロセスで使用可能なメモリ容量Ｍｍａｘを取得する（ステップＳ１０２）。
【００４４】
続いて、リクエスト送信部１１は、自装置１宛ての１件目のリクエストを発行して送信する（ステップＳ１０３）。スレッド数制限装置１は、１件目のリクエストを受信し、１件目のリクエストに対応する初期起動用のアプリケーションを実行する。これにより、初期起動時のオブジェクトが生成される一方、スレッドは生成されない。
【００４５】
続いて、メモリ容量監視部１３は、初期起動用のアプリケーションの実行時にプロセスが使用するメモリ容量Ｍ１を取得する（ステップＳ１０４）。
【００４６】
続いて、リクエスト送信部１１は、自装置１宛ての２件目のリクエストを発行して送信する（ステップＳ１０５）。スレッド数制限装置１は、２件目のリクエストを受信し、２件目のリクエストに対応するアプリケーションとしてマルチスレッドプログラムを実行する。これにより、スレッドが生成される。
【００４７】
続いて、メモリ容量監視部１３は、２件目のリクエストに対応するマルチスレッドプログラムの実行時にプロセスが使用するメモリ容量Ｍ２を取得し（ステップＳ１０６）、スレッド数監視部１４は、２件目のリクエストに対応するマルチスレッドプログラムの実行によって生成されるスレッド数Ｔを取得する（ステップＳ１０７）。
【００４８】
続いて、制限値設定部１６は、上記ステップＳ１０４で取得したメモリ容量Ｍ１および上記ステップＳ１０６で取得したメモリ容量Ｍ２を上記式１に代入して、一リクエスト当たりのメモリ容量ＭＲを算出する（ステップＳ１０８）。
【００４９】
続いて、制限値設定部１６は、上記ステップＳ１０７で取得したスレッド数Ｔおよび上記ステップＳ１０８で算出した一リクエスト当たりのメモリ容量ＭＲを上記式２に代入して、一スレッド当たりのメモリ容量ＭＴを算出する（ステップＳ１０９）。
【００５０】
続いて、制限値設定部１６は、上記ステップＳ１０２で取得したメモリ容量Ｍｍａｘ、上記ステップＳ１０４で取得したメモリ容量Ｍ１および上記ステップＳ１０８で算出した一スレッド当たりのメモリ容量ＭＴを上記式３に代入して、プロセスにおけるスレッド数の上限値Ｔｍａｘを算出する（ステップＳ１１０）。
【００５１】
続いて、制限値設定部１６は、上記ステップＳ１１０で算出したスレッド数の上限値Ｔｍａｘを上限値パラメタに設定する（ステップＳ１１１）。
【００５２】
図３を参照して、スレッド数の下限値を設定する際の動作について説明する。図３は、スレッド数の下限値を設定する際の処理手順を例示するフローチャートである。
【００５３】
最初に、プロセスを起動してから所定時間が経過したか否かを判定する（ステップＳ２０１）。この判定がＹＥＳである場合（ステップＳ２０１；ＹＥＳ）に、制限値設定部１６は、キュー監視部１５によって収集された時系列の処理待ち状態リクエスト数データを取得し（ステップＳ２０２）、スレッド数監視部１４によって収集された時系列の稼働状態スレッド数データを取得する（ステップＳ２０３）。
【００５４】
続いて、制限値設定部１６は、上記ステップＳ２０２で取得した処理待ち状態リクエスト数データおよび上記ステップＳ２０３で取得した稼働状態スレッド数データを用いて、時系列のスレッド数データＸ１〜Ｘｎを生成する（ステップＳ２０４）。
【００５５】
続いて、制限値設定部１６は、上記ステップＳ２０４で生成した時系列のスレッド数データＸ１〜Ｘｎを、上記式４に代入して、プロセスにおけるスレッド数の下限値Ｔｍｉｎを算出する（ステップＳ２０５）。
【００５６】
続いて、制限値設定部１６は、上記ステップＳ２０５で算出したスレッド数の下限値Ｔｍｉｎが、上限値パラメタに設定されているスレッド数の上限値Ｔｍａｘよりも大きいか否かを判定する（ステップＳ２０６）。この判定がＮＯである場合（ステップＳ２０６；ＮＯ）には、後述するステップＳ２０８に処理を移行する。
【００５７】
一方、上記ステップＳ２０６の判定でスレッド数の下限値Ｔｍｉｎがスレッド数の上限値Ｔｍａｘよりも大きいと判定した場合（ステップＳ２０６；ＹＥＳ）に、制限値設定部１６は、上記ステップＳ２０５で算出したスレッド数の下限値Ｔｍｉｎに、上限値パラメタに設定されているスレッド数の上限値Ｔｍａｘをセットする（ステップＳ２０７）。
【００５８】
続いて、制限値設定部１６は、上記ステップＳ２０５で算出したスレッド数の下限値Ｔｍｉｎまたは上記ステップＳ２０７で上限値Ｔｍａｘをセットしたスレッド数の下限値Ｔｍｉｎを下限値パラメタに設定する（ステップＳ２０８）。
【００５９】
上述してきたように、本実施形態におけるスレッド数制限装置１によれば、一リクエスト当たりのメモリ容量ＭＲに基づいて一スレッド当たりのメモリ容量ＭＴを算出し、一スレッド当たりのメモリ容量ＭＴおよびプロセスごとに使用可能なメモリ容量Ｍｍａｘに基づいてスレッド数の上限値Ｔｍａｘを算出することができ、この算出したスレッド数の上限値Ｔｍａｘを上限値パラメタに設定することができる。これにより、プロセスごとに稼働するスレッド数を、スレッド数の上限値Ｔｍａｘ以下となるように制限することができるため、メモリ容量の無駄な消費をプロセスごとに抑制することができ、リソースを有効に使用することが可能となる。
【００６０】
また、本実施形態におけるスレッド数制限装置１によれば、収集した時系列の処理待ち状態リクエスト数データおよび時系列の稼働状態スレッド数データに基づいて時系列のスレッド数データＸ１〜Ｘｎを生成し、時系列のスレッド数データＸ１〜Ｘｎに基づいてスレッド数の下限値Ｔｍｉｎを算出することができ、この算出したスレッド数の下限値Ｔｍｉｎを下限値パラメタに設定することができる。これにより、プロセスごとに稼働するスレッド数を、スレッド数の下限値Ｔｍｉｎ以上となるように制限することができるため、プロセスごとの処理状況に応じて必要最低限のスレッド数を確保することができ、処理時間を短縮することが可能となる。
【００６１】
ここで、図４〜図６を参照して、従来のスレッド数を固定するコンピュータ装置と本実施形態のスレッド数制限装置１との間の処理効率の差について具体的に説明する。図４および図５に示す稼働スレッド数の推移を示すデータは、６：００頃にリクエスト数がピークを迎える模擬データである。図４および図５に示す模擬データは、一リクエスト一スレッドで動作する場合のデータである。したがって、稼働スレッド数の推移はリクエスト数の推移と置き換えることができる。
【００６２】
図４は、従来のコンピュータ装置でのスレッド数の推移状態を示す図である。図４に示す従来のコンピュータ装置は、過去のスレッド数を平均した値である“５”に固定している。これに対してリクエスト数（模擬データのスレッド数）は、時間帯に応じて“０”〜“１５”の間で大きく変動する。
【００６３】
図５は、本実施形態のスレッド数制限装置１でのスレッド数の推移状態を示す図である。図５に示す本実施形態のスレッド数制限装置１は、上述したように、プロセスごとのリソース状況に応じてスレッド数の上限値を設定し、リクエスト数に応じてスレッド数の下限値を設定している。これにより、本実施形態のスレッド数制限装置１は、リクエスト数（模擬データのスレッド数）に追従してスレッド数を増減させている。
【００６４】
図６は、図４および図５に示す状態で処理を実行した結果、従来のコンピュータ装置と本実施形態のスレッド数制限装置１とでそれぞれ発生した過剰スレッド数および不足スレッド数を示す図である。図６に示すように、従来のコンピュータ装置では、過剰スレッド数および不足スレッド数が共に１２０強であるのに対し、本実施形態のスレッド数制限装置１では、過剰スレッド数が４０弱、不足スレッド数が７０強にそれぞれ低減している。過剰スレッド数を低減することでメモリ容量の無駄な使用を削減することができ、不足スレッド数を低減することでリクエストの処理時間を短縮することができる。つまり、本実施形態のスレッド数制限装置１は、従来のコンピュータ装置に比べ、プロセスごとの処理効率を向上させることができる。
【００６５】
なお、上述した実施形態は、単なる例示に過ぎず、実施形態に明示していない種々の変形や技術の適用を排除するものではない。すなわち、本発明は、その趣旨を逸脱しない範囲で様々な形態に変形して実施することができる。
【００６６】
例えば、上述した実施形態における制限値設定部１６は、スレッド数の下限値を算出する際に、時系列のスレッド数データを生成し、この時系列のスレッド数データに基づいてスレッド数の下限値を算出しているが、これに限定されない。例えば、時系列のリクエスト数データを生成し、この時系列のリクエスト数データに基づいて、スレッド数の下限値を算出することとしてもよい。この場合には、稼働状態スレッド数データをリクエスト数データに換算し、換算後のリクエスト数データと、処理待ち状態リクエスト数データとを、同じサンプリング時刻ごとに加算していくことで時系列のリクエスト数データを生成することができる。また、生成した時系列のリクエスト数データを、時系列のスレッド数データに換算し、換算後の時系列のスレッド数データを、上記式４に代入することで、スレッド数の下限値を算出することができる。
【符号の説明】
【００６７】
１…スレッド数制限装置、１１…リクエスト送信部、１２…スレッド制御部、１３…メモリ容量監視部、１４…スレッド数監視部、１５…キュー監視部、１６…制限値設定部。
【図１】
0005440937.tif 000002
【図２】
0005440937.tif 000003
【図３】
0005440937.tif 000004
【図４】
0005440937.tif 000005
【図５】
0005440937.tif 000006
【図６】
0005440937.tif 000007