(57)【要約】【課題】世代ＧＣを持つサーバ・システムにおいて、そのシステムでの寿命分布を求めるとともに、常駐オブジェクト量を見積もり、ヒープ使用量とＧＣの発生をシミュレーションして、ＧＣ率と最大ＧＣ時間を予測すること。【解決手段】新世代ＧＣ時ヒープ使用量計測手段１によりヒープ使用量を計測して割り付け量、回収量４を求め、既存の分布関数をオブジェクトの寿命分布モデルとして、モデル作成手段２により割り付け量と回収量の関係のモデルを作成する。このモデルに計測された割り付け量／回収量を当てはめ、オブジェクト寿命分布５を得る。また、この寿命分布５から定常状態における短寿命オブジェクトの量を見積もる。さらに、ＧＣ発生時刻、ＧＣ所要時間を計測し、平均割り付け速度、平均回収速度を求めヒープ使用量およびＧＣの発生をシミュレーションする。これによりＧＣ率および最大ＧＣ時間を予測することができる。【選択図】　　　　　図１
2004133752.tif 000002
【特許請求の範囲】
【請求項１】
世代ＧＣを有するサーバ・システムであって、
新世代ＧＣ前後の最も新しい世領域におけるヒープ使用量を計測する手段と、
割り付け量／回収量モデルを作成する手段と、
取得されたヒープ使用量を、上記割り付け量／回収量モデルにあてはめ、そのシステムの定常状態におけるオブジェクトの寿命分布を求める手段を備えた
ことを特徴とするサーバ・システム。
【請求項２】
前記定常状態におけるオブジェクトの寿命分布から、そのシステムの定常状態における短寿命オブジェクトの量を推定する手段と、
フルＧＣ後のヒープ使用量を計測する手段と、
上記短寿命オブジェクトの量とフルＧＣ後のヒープ使用量から、そのシステムに常駐するオブジェクトの総量を求める手段を備えた
ことを特徴とする請求項１のサーバ・システム
【請求項３】
ＧＣ発生時刻を計測する手段と、ＧＣ所要時間を計測する手段と、
前記フルＧＣ後のヒープ使用量と、上記ＧＣ発生時刻およびＧＣ所要時間から、平均割り付け速度と、平均回収速度を計算する手段と、
前記定常状態におけるオブジェクトの寿命分布と、常駐するオブジェクトの総量と、上記平均割り付け速度と、平均回収速度から、ヒープ使用量およびＧＣの発生をシミュレーションする手段とを備えた
ことを特徴とする請求項２のサーバ・システム。
【請求項４】
上記シミュレーション手段を用いて、与えられた領域サイズをもとに、ヒープ使用量およびＧＣの発生を時系列的にシミュレーションすることで、ＧＣ率、および、最大ＧＣ時間を予測する手段を備えた
ことを特徴とする請求項３のサーバ・システム。
【請求項５】
新世代ＧＣ前後の最も新しい世領域におけるヒープ使用量を計測する処理と、
割り付け量／回収量モデルを作成する処理と、
取得されたヒープ使用量を、上記割り付け量／回収量モデルにあてはめ、そのシステムの定常状態におけるオブジェクトの寿命分布を求める処理をコンピュータに実行させる
ことを特徴とする世代ＧＣを有するサーバ・システムにおけるＧＣ解析プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、世代ＧＣを持つサーバ・システムに関し、特に、新世代ＧＣ前後のヒープ使用量を計測して、そのシステムでのオブジェクトの寿命分布を求め、これに基づき、常駐オブジェクト量を見積もることができ、さらに、実際のシステムでＧＣが発生した時刻とＧＣの所要時間を計測して、上記寿命分布と常駐オブジェクトの量から、ＧＣ率と最大ＧＣ時間を予測することができる世代ＧＣを持つサーバ・システムに関するものである。
【０００２】
【従来の技術】
近年、サーバ・システムにおいてＪａｖａ（Ｊａｖａはサンマイクロシステムズ社の登録商標）システムが用いられる事例が増えている。
Ｊａｖａシステムの核であるＪＶＭ（Ｊａｖａ仮想マシン）のメモリ管理はＧＣ（ガーベジ・コレクタ、実際はメモリ・アロケータも兼ねる）によって動的に行われている。
すなわちアプリケーション・プログラムの実行においてオブジェクトの生成が必要になると、ＧＣがオブジェクトに必要なメモリ領域をヒープ〔ＧＣにより動的にオブジェクトがアロケート（割り付け）される有限のメモリ領域〕の中に割り付け、ヒープが満杯になるとＧＣを行って、不要になったメモリ領域を回収し、新たに生成されるオブジェクトのために領域を空ける。
このようにしてアプリケーションの実行中にメモリの再利用をすることができる。
なお、ＧＣを行う（ガーベジ・コレクションを行う）とは、どこからも参照されなくなった、すなわち不要になったオブジェクトが割り付けられた領域を再利用するために回収することであり、「ＧＣを行う」とは、「回収する」と概ね同じ意味である。
【０００３】
ＧＣシステムを含むサーバ・システムでは、サーバのスループット（単位時間あたりに処理できるトランザクションの量）やレスポンスタイム（クライアントからリクエストがあった時の応答時間）がＧＣの挙動に左右されるという問題がある。
ＧＣ率（システム全体の時間に占めるＧＣを行っている時間の割合）が高いとスループットが低下し、最大ＧＣ時間（最も長いＧＣに要する時間）が大きいと最大レスポンスタイムが長くなる。
そこでＧＣ率を下げ、最大ＧＣ時間を短くすることが望まれている。
世代ＧＣは、割り付けられた直後に不要になるオブジェクトが大概のアプリケーションにおいて多いということを利用してＧＣの効率を向上させる方式であり、すでに世代ＧＣを実装したＪＶＭが広く使用されている（例えば非特許文献１参照）。
ここで、世代ＧＣとは、ヒープを新世代領域と旧世代領域に分け、新規に割り付けられるオブジェクト（新しいオブジェクト）を新世代領域に割り付け、新世代領域があふれたら、あふれたオブジェクトを旧世代領域に移動する方式のＧＣである。この世代ＧＣでは、新世代領域がいっぱいになれば新世代ＧＣ（新世代領域にある不要オブジェクトだけを回収する処理）を起こし、旧世代領域もいっぱいになればフルＧＣ（旧世代領域にある不要オブジェクトも回収する処理）を起こす。世代は２個以上ある構成もある。
【０００４】
世代ＧＣでは新世代領域と旧世代領域を調節することでＧＣ率や最大ＧＣ時間を調節することができる。世代ＧＣでは定常状態（サーバ系Ｊａｖａシステムの初期化が終了してサービスを受け付けトランザクションを行っている状態）における短寿命オブジェクト（定常状態でトランザクションに消費されるオブジェクト）が新世代領域の中で回収され、旧世代領域に流れ込まない時に最も効率が良くなる。
一方、新世代領域を必要以上に大きく取ると、最大ＧＣ時間が長くなる。そこで新世代領域のサイズを最適化する方法が望まれている。
新世代領域のサイズを最適化するための一つの方法として、オブジェクトの寿命分布より回収率を予測するという方法が考えられる。
【０００５】
オブジェクトの寿命分布はサーバ・システムに依存するので、サーバ・システムごとに求めなければならない。オブジェクトの寿命とは、「そのオブジェクトが割り付けられてから、他から参照されなくなった時まで」のことであるが、他から参照されなくなった時というのは検出困難であり、オブジェクトがＧＣされた時に初めて検出可能になる。
実験では、例えば、オブジェクト一個が割り付けられるごとにＧＣを起動する、というような方法が行われている。しかしこの方法はコスト（計算量）がかかりすぎて商業的には現実的でない。そのため低コストでオブジェクトの寿命分布を求める方法が望まれている。
なお、世代ＧＣにおいて、オブジェクトの寿命をモデル化できることを示唆した文献は知られており（非特許文献２）、この文献には、いくつかのアプリケーションにおけるオブジェクトの寿命がガンマ分布で表すことができることが示唆されている。しかし、具体的なモデル化の手法は示されていない。
【０００６】
【非特許文献１】
Ｓａｎ　Ｍｉｃｒｏｓｙｓｔｅｍｓ，ｉｎｃ．，”Ｔｕｎｉｎｇ　Ｇａｒｂａｇｅ　Ｃｏｌｌｅｃｔｉｏｎ　ｗｉｔｈ　ｔｈｅ　１．３．１　Ｊａｖａ　ＴＭ　Ｖｉｒｔｕａｌ　Ｍａｃｈｉｎｅ”，１９９９、〔平成１４年８　月２６日検索〕、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｊａｖａ．ｓｕｎ．ｃｏｍ／ｄｏｃｓ／ｈｏｔｓｐｏｔ／ｇｃ／ｉｎｄｅｘ．ｈｔｍｌ＞
【非特許文献２】
Ｄａｒｋｏ　Ｓｔｅｆａｎｏｖｉｃ，Ｄｅｐａｒｔｍｅｎｔ　ｏｆ　Ｅｌｅｃｔｒｉｃａｌ　Ｅｎｇｉｎｅｅｒｉｎｇ，Ｐｒｉｎｃｅｔｏｎ　Ｕｎｉｖｅｒｓｉｔｙ，Ｋａｔｈｒｙｎ　Ｓ．ＭｃＫｉｎｌｅｙ　Ｊ．Ｅｌｉｏｔ　Ｂ．Ｍｏｓｓ　，Ｄｅｐａｒｔｍｅｎｔ　ｏｆ　Ｃｏｍｐｕｔｅｒ　Ｓｃｉｅｎｃｅ　Ｕｎｉｖｅｒｓｉｔｙ　ｏｆ　Ｍａｓｓａｃｈｕｓｅｔｔｓ　，”Ｏｎ　Ｍｏｄｅｌｓ　ｆｏｒ　Ｏｂｊｅｃｔ　Ｌｉｆｅｔｉｍｅ　Ｄｉｓｔｒｉｂｕｔｉｏｎｓ”，ＩＳＳＭＭ’００，２０００，インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｃｉｔｅｓｅｅｒ．ｎｊ．ｎｅｃ．ｃｏｍ／３３５４２５．ｈｔｍｌ＞
【０００７】
【発明が解決しようとする課題】
本発明は上記事情に鑑みなされたものであって、本発明の第１の目的は、世代ＧＣを持つサーバ・システムにおいて、新世代ＧＣ前後のヒープ使用量を計測して、そのシステムでの割り付け量／回収量の関係を求め、寿命分布モデルより作成した割り付け量／回収量のモデルにあてはめることによって、そのシステムでの寿命分布を低コスト（計算量）で求めることである。
本発明の第２の目的は、上記オブジェクトの寿命分布より予測した定常状態における短寿命オブジェクトの量と、フルＧＣ後のヒープ使用量より、常駐オブジェクト量を見積もることである。
本発明の第３の目的は、実際のシステムでＧＣが発生した時刻とＧＣの所要時間を計測し、ＧＣ前後のヒープ使用量より平均割り付け速度、平均回収速度を求め、上記寿命分布と与えられたヒープ・サイズより、ヒープ使用量とＧＣの発生をシミュレーションすることにより、ＧＣ率と最大ＧＣ時間を予測することである。
【０００８】
【課題を解決するための手段】
本発明は、世代ＧＣを持つサーバ・システムにおいて、図１に示すように、新世代ＧＣ前後の最も新しい世代におけるヒープ使用量を計測する新世代ＧＣ時ヒープ使用量計測手段１と、割り付け量／回収量モデルを作成するモデル作成手段２と、取得されたヒープ使用量を割り付け量／回収量モデルにあてはめるモデルあてはめ手段３から構成される。
ＧＣ前後のヒープ使用量を計測する新世代ＧＣ時ヒープ使用量計測手段１は、ＪＶＭに既存の機能を利用するか、ＪＶＭにヒープ使用量の表示機能を付け加えることで構成する。
まず、最も新しい世代のサイズを変えてアプリケーションを実行し、ヒープ使用量を計測する手段１により、その時のＧＣ前後のヒープ使用量を計測し、そのシステムにおける割り付け量／回収量の関係を求める。
次に、モデル作成手段２により既存の分布関数などをオブジェクトの寿命分布モデルとして、割り付け量／回収量の関係のモデルを作成する。
次に、モデルあてはめ手段３により、実際の割り付け量／回収量を作成されたモデルにあてはめる。ここでは、パラメータを変化させ、割り付け量／回収量モデルを何通りか作成して実際の割り付け量／回収量との適合度を求め、最も適合度の高いモデルを求める。
そのモデルの元になったオブジェクト寿命分布モデルがこのシステムのオブジェクト寿命分布と推定される。
このようにして本発明によれば、新世代ＧＣ前後の最も新しい世代におけるヒープ使用量より、そのシステムのオブジェクト寿命分布４を求めることができる。
【０００９】
また、本発明は、前述の図１の構成において、フルＧＣ後のヒープ使用量を計測する手段を設け、上記寿命分布より定常状態における短寿命オブジェクトの量を見積もることができる。
そして、計測されたフルＧＣ後のヒープ使用量と見積もられた短寿命オブジェクトの量の差がシステムに常駐するオブジェクトの量と推定される。
このようにして、本発明によれば、オブジェクトの寿命分布とフルＧＣ後のヒープ使用量より、定常状態での常駐オブジェクトの量を見積もることができる。さらに、本発明においては、前述の図１の構成において、ＧＣ発生時刻を計測する手段と、ＧＣ所要時間を計測する手段と、平均割り付け速度を計算する手段と、平均回収速度を計算する手段と、ヒープ使用量およびＧＣの発生をシミュレーションする手段を有することもできる。
ＧＣ発生時刻およびＧＣ所要時間を計測する手段は、ＪＶＭに既存の機能を利用したり、ＪＶＭをこれらを表示させるように変更するなどして構成する。
前述のＧＣ前後の使用量とＧＣ発生時刻、および、ＧＣ所要時間より、平均割り付け速度、および、平均回収速度を求める。
そして、ヒープの各世代のサイズを任意に決め、上記平均割り付け速度、平均回収速度、寿命分布、常駐オブジェクト量、をもとに、ヒープ使用量、および、ＧＣ発生をシミュレーションする。
このＧＣの発生のシミュレーションでは回収量とＧＣ所要時間をシミュレーションする。これにより、ＧＣ率、および、最大ＧＣ時間を予測することができる。
このようにして本発明によれば、平均割り付け速度、平均回収速度、寿命分布、常駐オブジェクト量にもとづき、ヒープ使用量、および、ＧＣの発生をシミュレーションすることで、ＧＣ率、および、最大ＧＣ時間を予測することができる。
【００１０】
【発明の実施の形態】
以下、本発明の実施の形態について説明する。
図１は本発明の第１の実施例を示す図である。
本発明の第１の実施例は、世代ＧＣを持つサーバ・システムにおいて、新世代ＧＣ前後の最も新しい世代におけるヒープ使用量を計測する新世代ＧＣ時ヒープ使用量計測手段１と、割り付け量／回収量モデルを作成するモデル作成手段２と、計測されたヒープ使用量を割り付け量／回収量モデルにあてはめるモデルあてはめ手段３を備える。
図１において、上記新世代ＧＣ時ヒープ使用量計測手段１によりヒープ使用量を計測し、割り付け量、回収データ４を得て、そのシステムにおける割り付け量と回収量の関係を求める。また、標準ガンマ分布関数などの既存の分布関数をオブジェクトの寿命分布モデルとして、モデル作成手段２により割り付け量と回収量の関係のモデルを作成する。
そして、モデルあてはめ手段３により、作成された割り付け量と回収量の関係のモデルに、計測された割り付け量／回収量を当てはめ、オブジェクト寿命分布５を得る。
このオブジェクト寿命分布５から、定常状態におけるオブジェクトの寿命分布を求めることができ、また、これに基づき新世代領域のサイズを見積もることができる。
【００１１】
以下、本実施例の上記各手段における処理について説明する。
（１）　ヒープ使用量の計測
新世代ＧＣ前後のヒープ使用量は、たとえば、ＪＶＭのＧＣ部でＧＣ時にそれらの値をファイルに書き出すように変更を加えることで計測できる。
サンマイクロシステムズ社のＪＶＭでは起動時オプション−ｖｅｒｂｏｓｅ：ｇｃ　を指定すると、新世代ＧＣおよびフルＧＣに分けてＧＣ前後のヒープ使用量を標準出力に表示する機能があるので、これを利用できる。
最も新しい世代の領域におけるＧＣ前ヒープ使用量は前回のＧＣ以降に割り付けられたオブジェクトの総量であり、（ＧＣ前使用量−ＧＣ後使用量）は前回のＧＣ以降に割り付けられたオブジェクトの中の回収量（不要になった量）である。
前述のサン製ＪＶＭの−ｖｅｒｂｏｓｅ：ｇｃ　オプションで出力されるヒープ使用量は旧世代を含むすべての領域における使用量の総和なので、以下のようになる。
・前回のＧＣ以降に割り付けられた量（Ａ）＝（今回のＧＣ前使用量−前回のＧＣ後使用量）
・前回のＧＣ以降に割り付けられた中の回収量（Ｂ）＝（ＧＣ前使用量−ＧＣ後使用量）
【００１２】
図２にサンマイクロ製ＪＶＭの−ｖｅｒｂｏｓｅ：ｇｃ　オプションで取得したヒープ使用量の変化の模式図と（Ａ）、（Ｂ）の関係を示す。
同図において、（Ａ）は前回のＧＣ以降に割り付けられたオブジェクトの総量であり、（Ｂ）は割り付けられた後に回収されたオブジェクトの総量であり、同図の横軸は、総割り付け量（バイト）示し、縦軸は、ヒープ使用量（バイト）を示す。
定常状態における割り付け量、回収量の値を計測するには、サーバ・アプリケーションで初期化が終わったことを示すメッセージを表示させ、それ以降のＧＣについて割り付け量、回収量を計測すればよい。定常状態でない時にはオブジェクトの回収率が異なる可能性がある（実際その場合の方が多い）ので、推定の元になるデータとして不適切である。
定常状態では、サーバへの負荷がほぼ一定ならば、割り付け量と回収量の比はいつも一定範囲内にある。また、同じシステム、同じアプリ、同じ負荷の時、新世代領域のサイズが同じであれば、違う試行でも大体同じ値になる。
【００１３】
定常状態において新世代領域に割り付けられるオブジェクトはほとんどトランザクションに使用されるオブジェクトであり、トランザクションが終われば回収されるので、新世代領域のサイズがこのアプリケーションおよびサーバへの負荷に対して十分大きければ、それ以上新世代領域を大きくしても回収率はあまり変わらない。
一方、新世代のサイズが不十分だと、新世代ＧＣが起きた時にも使用中のオブジェクトが多く残っているので、新世代での回収率が低くなる。
そこで、本実施例では、割り付け量に対する回収量の変化を求めるため、新世代のサイズを変化させて、ＧＣ前後のヒープ使用量を計測し、割り付け量、回収量を計算する。計測された割り付け量、回収量の例を図３に示す。
新世代領域のサイズは、例えばサン社製ＪＶＭ（バージョン１．３以降）では起動時オプションの−ＸＸ：ＮｅｗＳｉｚｅ　または−ＸＸ：ＮｅｗＲａｔｉｏで指定できる。
実際には何回か起きたＧＣにおいてヒープ使用量を計測し、平均する。
【００１４】
（２）　割り付け量／回収量モデルの作成
次に、割り付け量に対する回収量のモデルを作成する。定常状態で、トランザクションで消費されるオブジェクトは、大半が割り付けられて少し経ってから不要になると言われ、その寿命分布は、前記したようにΓ（ガンマ）分布に従うという観察がある（前記非特許文献１参照）。
そこで、以下ではΓ分布にもとづいてモデルを作成する例を述べる。元となる確率密度関数は他の関数でも良い。
図４に標準ガンマ分布の確率密度分布ｆ（ｘ）　を、図５に累積密度分布Ｆ１　（ｘ）　を示す。これらをそれぞれ寿命分布のモデル、死亡率のモデルとする。
すなわち、寿命は「あるバイトが割り付けられ、以降に何バイトか割り付けられた後で先に割り付けられたバイトが不要になるか」で表す。実際には割り付けはオブジェクト単位で行われるが、モデル化のためバイト単位で扱う。
実際のバイト数はシステム固有の係数ｋで割りモデルに適用する。すなわち、図４の横軸は、割り付けられたバイト数をｋで割った値であり、縦軸は、時間０で割り付けられたバイトが、不要になる確率を示す。なお、モデルを作成する段階ではｋは未知である。
また、図５は、図４を積分して死亡率を求めたものであり、横軸は、図４と同様に割り付けバイト数をｋで割った値であり、縦軸は死亡率を表す。例えば、図５において、α＝２で、横軸が２の点では、時間０で割り付けられたバイトの内、約６割が不要になることを表す（すなわち、死亡率が約６割）。
【００１５】
すなわち、上記Ｆ１　（ｘ）　とは、あるバイトが割り付けられた後、ｘバイト（ｘはｋで割った後の値、以下同じ）割り付けられた時にそのバイトが不要になっていて回収されうる確率である。
これより、ある時点からａバイト割り付けられた時における割り付けられたうちの不要になったバイト数（累計）をｂとするとｂは以下の式となる。
Ｆ１　（ａ）＋　Ｆ１　（ａ−１）＋　…　＋Ｆ１　（０）＝ｂ
となる。
上記式において、ａを変えながらｂの値を求め、これを割り付け量、回収量のモデル関数としＦ２　（ｘ）　と表すことにする。図６にＦ２　（ｘ）　を示す。図６の横軸は、割り付けたバイト数（ａをｋで割った値）、縦軸は不要になったバイト数（ｋで割った値）である。
【００１６】
（３）　割り付け量／回収量モデルへの当てはめ
次に前述の方法で計測した割り付け量、回収量を以下のようにして、モデルにあてはめる。
（ｉ）　Γ（α）　にもとづくＦ１　（ｘ；α）　から得たＦ２　（ｘ；α）　を、αをだいたい０．１〜４の間で変化させて何通りか作成する。
（ｉｉ）次に計測した割り付け量、回収量のデータがＦ２　（ｘ；α）　に最もマッチするｋを求める。具体的にはｋを変化させて１／ｋ倍したデータと、Ｆ２　（ｘ；α）　との適合度を求め、最も適当度の高いｋを求める。
適合度は、たとえば、１／ｋ倍して割り付け量を横軸、回収量を縦軸としてプロットされた各点からモデル関数までの距離の平均を用いる。
（ｉｉｉ）　こうしてαを変化させて作成した各Ｆ２　（ｘ；α）　につき、最も適合度の高いｋとその時の適合度ｔを求める。
（ｉｖ）次に各Ｆ２　（ｘ；α）　における適合度ｔを比較する。この時ｔが各点からモデル関数までの距離の平均ならば、ｔをｋ倍して正規化する。そして最も適合度の高いＦ２　（ｘ；α）　を求める。
【００１７】
図７に上記処理のフローチャートを示す。
先ずα＝０を初期値に設定し、Ｆ２　（ｘ，α）を作成する（図７のステップＳ１，Ｓ２）。ｋ＝初期値とし、計測した割り付け量、回収量のデータを１／ｋ倍する（ステップＳ３，４）。
次に、計測した割り付け量、回収量のデータとＦ２　（ｘ；α）　との適合度ｔを計算し（ステップＳ５）、この適合度ｔと、前回の処理で保存されたｔと比較し（ステップＳ６）、適合度ｔが最高であるかを判断する（ステップＳ７）。そうでなければ、ステップＳ８でｔとｋを保存し、ｋを変化させてステップＳ４に戻る。適合度ｔが最高であれば、ステップＳ９でｔα＝ｔ，ｋα＝ｋとして、適合度ｔαを、前回の処理で保存されているｔαと比較する（ステップＳ１０）。
そして、適合度ｔαが最高であるかを判断し（ステップＳ１１）、そうでなければ、ステップＳ１２で、ｔα，ｋαを保存し、αを変化させる。
適合度ｔαが最高であれば、αとｋをその値に決定し（ステップＳ１３）、処理を終了する。
【００１８】
図８に実測値をモデルにあてはめた例を示す。図８の横軸は割り付けバイト数（ｋで割った値）、縦軸は回収量であり、この実測値はα＝０．５のモデルで、ｋ＝１２０００の時、最も適合度が高かった。
これで割り付け量、回収量のモデル関数として最適なＦ２　（ｘ；α）　と実際のバイト数をモデル上のバイト数に変換する係数ｋが求められた。
以上により、このシステムの定常状態におけるオブジェクトの寿命分布は、ｆ（ｘ；α）　（ただし、ｆ（ｘ；α）　はΓ（　α）　にもとづくΓ分布の確率密度関数、またｘは実際のバイト数をｋで割った値）、また、死亡率は、Ｆ１　（ｘ；α）　（ただしＦ１　（ｘ；α）　はΓ（　α）　にもとづくΓ分布の累積密度関数）となる。このモデルを元に、そのシステムに適する新世代領域のサイズを見積もることができる。例えば、新世代領域の中の９０％が不要になった時に新世代ＧＣが起きるような新世代領域サイズは、以下の式のｘをｋ倍したバイト数である。
Ｆ１　（ｘ）　　＝０．９
以上のように、本実施例によれば、割り付け量、回収量を計測することにより、そのシステムにおける定常状態におけるオブジェクトの寿命分布を求めることができ、また、これに基づき新世代領域のサイズを見積もることができる。
【００１９】
図９は本発明の第２の実施例を示す図である。
本実施例は、上記第１の実施例にさらに、そのシステムにおける定常状態における短寿命オブジェクトの量を推定する短寿命オブジェクト量推定手段６と、フルＧＣ前後のヒープ使用量を計測するフルＧＣヒープ使用量計測手段７を追加したものである。
図９において、第１の実施例で求めたオブジェクト寿命分布５から、短寿命オブジェクト量推定手段６により、短寿命オブジェクトの定常量を算出する。また、フルＧＣヒープ使用量計測手段７により、フルＧＣ前後のヒープ使用量を計測する。そして、短寿命オブジェクトの定常量とフルＧＣ前後のヒープ使用量から常駐オブジェクト量８を求める。
【００２０】
短寿命オブジェクトとは、定常状態におけるトランザクションに消費されるオブジェクトである。定常状態における短寿命オブジェクトの量は前記第１の実施例で得られた寿命分布モデルから求めることができる。
すなわち、ある瞬間の短寿命オブジェクトの量は、その瞬間に生き残っている短寿命オブジェクトの総和である。割り付けられた後にｕバイト経った（新たに割り付けられた）後のバイトの生存率は（１−死亡率）すなわち〔１−Ｆ１　（ｕ／ｋ）〕なので、ある瞬間に生き残っているバイトの総和ｃは、〔１−Ｆ１　（ｘ／ｋ）〕のゼロから∞までの総和であり、以下の（１）式で求めることができる。
【００２１】
【数１】
2004133752.tif 000003
【００２２】
フルＧＣ前後のヒープ使用量は、新世代ＧＣ前後のヒープ使用量同様、たとえばＪＶＭのＧＣ部でＧＣ時に値をファイルに書き出すように変更を加えることで計測できる。
また、サン社製ＪＶＭを使うならば−ｖｅｒｂｏｓｅ：ｇｃ　オプションでフルＧＣ前後のヒープ使用量を取得できる。
実際には何回か起きたフルＧＣにおいてヒープ使用量を計測し平均する。
フルＧＣ後のヒープ使用量をｄとすると、フルＧＣ後のヒープ使用量ｄは、（常駐するオブジェクト量ｅ）＋（定常状態での短寿命オブジェクト量ｃ）なので、常駐するオブジェクト量ｅは（ｄ−ｅ）と見積もることができる。
以上のように、本実施例によれば、第１の実施例で得られた寿命分布モデルを用いて、短寿命オブジェクトの量を見積もり、これに基づき、常駐するオブジェクト量ｅを見積もることができる。
【００２３】
図１０は本発明の第３の実施例を示す図である。
本発明の第３の実施例は、第２の実施例に、さらに、時刻を計測する時刻取得手段９と、ＧＣ所要時間を計測するＧＣ所要時間取得手段１０と、平均割り付け速度を計算する平均割り付け速度計算手段１１と、平均回収速度を計算する平均回収速度計算手段１２と、ヒープ使用量およびＧＣの発生をシミュレーションするシミュレーション手段１３を追加したものである。
図１０において、前記第２の実施例により求めた常駐オブジェクト量８を求める。また、時刻取得手段９により取得した計測開始・終了時刻と、新世代ＧＣ時ヒープ使用量取得手段１により得た割り付け量、回収量データ４と、フルＧＣ時ヒープ使用量取得手段７で求めたフルＧＣ前後のヒープ使用量から、平均割り付け速度計算手段１１により平均割り付け速度を求める。
ここで、平均割り付け速度は以下のように求められる。
総実行時間は、（総実行時間）＝（計測終了時刻）−（計測開始時刻）であり、平均割付速度は、（平均割付速度）＝（総割付量）／（総実行時間−総所要ＧＣ時間）となる。
さらに、ＧＣ所要時間取得手段１０で求めたＧＣ所要時間と、上記割り付け量、回収量データ４と、フルＧＣ前後のヒープ使用量から、平均回収速度計算手段１２により平均回収速度を求める。
ヒープ・シミュレーション手段１３は、オブジェクト寿命分布５と常駐オブジェクト量と平均割り付け速度と平均回収速度に基づき、ヒープ使用量およびＧＣの発生をシミュレーションする。このシミュレーションにより、最大ＧＣ時間を予想することができ、また、シミュレーション時間の中のＧＣ所要時間の和から、ＧＣ率を予測することができる。
【００２４】
以下、本実施例の上記各手段の処理について説明する。
（１）　平均回収速度の算出
回収速度（１回のＧＣにおける）は、（回収速度）＝（回収残り量）／（ＧＣ所要時間）であり、平均回収速度は、計測時間内に起きたＧＣにおける回収速度の平均である。但し、新世代ＧＣとフルＧＣは別々に平均する。
ここで、新世代ＧＣ時の回収残り量と、フルＧＣ時の回収残り量は、次のようになる。
・（新世代ＧＣ時の回収残り量）＝（割り付け量）−（回収量）
・（フルＧＣ時の回収残り量）＝（フルＧＣ後のヒープ使用量）
【００２５】
定常状態に達した後の複数回のＧＣについて以上を計算し、平均すれば、平均割り付け速度と平均回収速度を求めることができる。
一般に、オブジェクトの回収は新世代ＧＣとフルＧＣでアルゴリズムが異なるので、回収速度は新世代ＧＣとフルＧＣについて分けて平均する。
また、何段階か新世代領域を変更してヒープ使用量のデータを取り、最適モデルを作成しておく。
【００２６】
（２）　定常状態におけるヒープのシミュレーション
次に、任意のヒープ構成（新世代領域サイズ、旧世代領域サイズ）、寿命分布モデル、平均割り付け速度、平均回収速度（新世代ＧＣ、およびフルＧＣにおける）、常駐オブジェクト量、定常的な短命オブジェクト量より、定常状態におけるヒープのシミュレーションを行う。
新世代サイズをｓｎ　、旧世代サイズをｓｏ　、常駐オブジェクト量をｅ、定常的な短命オブジェクト量をｃ、割り付け速度をｖａ　、新世代ＧＣにおける回収速度をｖｎ　、フルＧＣにおける回収速度をｖｆ　、現在の新世代領域における使用量をｕｎ　、現在の旧世代領域における使用量をｕｏ　とする。
ヒープ使用量の初期値を（常駐オブジェクト量ｅ）＋（定常的な短命オブジェクト量ｃ）とする。単位時間ごとにｕｎ　をｖａ　ずつ増加させる。もしｕｎ　≧ｓｎ　になったら、新世代ＧＣの発生をシミュレーションする。
すなわち、割り付け量／回収量の関数Ｆ２　（ｘ）を用いると、ｕｎ　バイト割り付けられたときの回収量は、回収量＝ｋＦ２　（ｕｎ　／ｋ）と予想され、このＧＣでの回収量ｂは、回収量ｂ＝ｋＦ２　（ｕｎ　／ｋ）であるので、回収残り量ｎは、回収残り量ｎ＝ｕｎ　−ｋＦ２　（ｕｎ　／ｋ）となる。
また、このＧＣの所要時間は、所要時間ｔｎ　＝ｎ×ｖｎ　となり、ＧＣ後のｕｏ　はｕｏ　＋ｎ、ＧＣ後のｕｎ　は、ｕｎ　＝０となる。これを繰り返す。
【００２７】
もし、新世代ＧＣ後に、ｕｏ　≧ｓｏ　になったら、フルＧＣの発生をシミュレーションする。前記第２の実施例より定常的な短命オブジェクトの量ｃは前記（１）式で求めることができる。
従って、フルＧＣ発生後のヒープ使用量ｕｏ　’は常に（ｅ＋ｃ）と予想されるので、フルＧＣの所要時間は、所要時間＝（ｅ＋ｃ）×ｖｆ　と予想される。
このようにして、シミュレーションより、与えられた時間内でのＧＣの発生とその時のＧＣ所要時間が求められる。
【００２８】
図１１は、上記シミュレーションの処理を示すフローチャートである。
初期値として新世代領域の使用量ｕｎ　を０、旧世代領域の使用量ｕｏ　を（常駐オブジェクト量ｅ）＋（定常的な短命オブジェクト量ｃ）とする（ステップＳ１）。なお、ｅ＋ｃは、フルＧＣ後の平均ヒープ量としてとしてもよい。
ステップＳ２で、新世代領域の使用量ｕｎ　を、ｕｎ　＝ｕｎ　＋ｖａ　（ｖａ　は割り付け速度）とする。
そして、新世代領域の使用量ｕｎ　≧新世代領域サイズｓｎ　であるかを調べる。新世代領域の使用量ｕｎ　≧新世代領域サイズｓｎ　でなければ、ステップＳ２に戻り、単位時間毎に新世代領域の使用量ｕｎ　を割り付け速度ｖａ　だけ増加させる処理を繰り返す。
新世代領域の使用量ｕｎ　≧新世代領域サイズｓｎ　になると、新世代ＧＣの発生のシミュレーションを行う（ステップＳ４）。
すなわち、前記割り付け量／回収量の関数Ｆ２　（ｘ）を用い、回収量ｂをｂ＝ｋＦ２　（ｕｎ　／ｋ）で求め、回収のこり量ｎ＝ｕｎ　−ｂ、新世代ＧＣ所要時間ｔｎ　をｔｎ　＝ｎ×ｖｎ　（ｖｎ　は新世代ＧＣ回収速度）で求める。そして、ＧＣ後の旧世代領域の使用量ｕｏ　をｕｏ　＝ｕｏ　＋ｎとし、ＧＣ後の新世代領域の使用量ｕｎ　を０にする。
ステップＳ５で、ＧＣ後の旧世代領域の使用量ｕｏ　≧旧世代領域サイズｓｏ　であるかを調べ、ＧＣ後の旧世代領域の使用量ｕｏ　≧旧世代領域サイズｓｏ　でなければ、ステップＳ２に戻り、ＧＣ後の旧世代領域の使用量ｕｏ　≧旧世代領域サイズｓｏ　になるまで、上記処理を繰り返す。
【００２９】
ＧＣ後の旧世代領域の使用量ｕｏ　≧旧世代領域サイズｓｏ　になると、フルＧＣの発生をシミュレーションする（ステップＳ６）。
すなわち、定常的短寿命オブジェクト量ｃを、前記（１）式で求める。また、旧世代ＧＣ所要時間ｔｏ　をｔｏ　＝（ｅ＋ｃ）×ｖｆ　（ｅは常駐オブジェクト量、ｖｆ　はフルＧＣ回収速度）により求める。さらに、旧世代領域の使用量ｕｏ　をｕｏ　＝ｅ＋ｃとする。
ステップＳ７で、旧世代領域の使用量ｕｏ　≧旧世代領域サイズｓｏ　であるかを調べ、旧世代領域の使用量ｕｏ　≧旧世代領域サイズｓｏ　でなければ、ステップＳ２に戻り、上記処理を繰り返す。また、旧世代領域の使用量ｕｏ　≧旧世代領域サイズｓｏ　になると、ステップＳ８で、Ｏｕｔ　Ｏｆ　Ｍｅｍｏｔｙ　Ｅｒｒｏｒ　として処理を終了す
る。
【００３０】
なお、実際のＧＣでは新世代または旧世代領域がいっぱいになる前に、たとえば使用率が７０％を超えた所でＧＣが発生するように構成されているものもある。その場合には、たとえば新世代領域での使用率上限が７０％、旧世代領域での使用率上限を８０％ならば、ｕｎ　≧ｓｎ　×０．７の時に新世代ＧＣが、ｕｏ　≧ｓｏ　×０．８の時にフルＧＣが発生するようにシミュレーションする。
上記シミュレーションにおける最も長いＧＣ所要時間より、最大ＧＣ時間が予想でき、シミュレーション時間の中のＧＣ所要時間の和から、ＧＣ率が予想できる。
以上のように、本実施例においては、平均割り付け速度、平均回収速度、寿命分布、常駐オブジェクト量にもとづき、ヒープ使用量、および、ＧＣの発生をシミュレーションすることにより、ＧＣ率、および、最大ＧＣ時間を予測することができる。
【００３１】
（付記１）　世代ＧＣを有するサーバ・システムであって、
新世代ＧＣ前後の最も新しい世領域におけるヒープ使用量を計測する手段と、
割り付け量／回収量モデルを作成する手段と、
取得されたヒープ使用量を、上記割り付け量／回収量モデルにあてはめ、そのシステムの定常状態におけるオブジェクトの寿命分布を求める手段を備えた
ことを特徴とするサーバ・システム。
（付記２）　前記定常状態におけるオブジェクトの寿命分布から、そのシステムの定常状態における短寿命オブジェクトの量を推定する手段と、
フルＧＣ後のヒープ使用量を計測する手段と、
上記短寿命オブジェクトの量とフルＧＣ後のヒープ使用量から、そのシステムに常駐するオブジェクトの総量を求める手段を備えた
ことを特徴とする請求項１のサーバ・システム。
（付記３）　ＧＣ発生時刻を計測する手段と、ＧＣ所要時間を計測する手段と、前記フルＧＣ後のヒープ使用量と、上記ＧＣ発生時刻およびＧＣ所要時間から、平均割り付け速度と、平均回収速度を計算する手段と、
前記定常状態におけるオブジェクトの寿命分布と、常駐するオブジェクトの総量と、上記平均割り付け速度と、平均回収速度から、ヒープ使用量およびＧＣの発生をシミュレーションする手段とを備えた
ことを特徴とする請求項２のサーバ・システム。
（付記４）　上記シミュレーション手段を用いて、与えられた領域サイズをもとに、ヒープ使用量およびＧＣの発生を時系列的にシミュレーションすることで、ＧＣ率、および、最大ＧＣ時間を予測する手段を備えた
ことを特徴とする請求項３のサーバ・システム。
（付記５）　新世代ＧＣ前後の最も新しい世領域におけるヒープ使用量を計測する処理と、
割り付け量／回収量モデルを作成する処理と、
取得されたヒープ使用量を、上記割り付け量／回収量モデルにあてはめ、そのシステムの定常状態におけるオブジェクトの寿命分布を求める処理をコンピュータに実行させる
ことを特徴とする世代ＧＣを有するサーバ・システムにおけるＧＣ解析プログラム。
（付記６）　前記定常状態におけるオブジェクトの寿命分布から、そのシステムの定常状態における短寿命オブジェクトの量を推定する処理と、
フルＧＣ後のヒープ使用量を計測する処理と、
上記短寿命オブジェクトの量とフルＧＣ後のヒープ使用量から、そのシステムに常駐するオブジェクトの総量を求める処理と、
ＧＣ発生時刻を計測する処理と、ＧＣ所要時間を計測する処理と、
前記フルＧＣ後のヒープ使用量と、計測開始終了時刻およびＧＣ所要時間から、平均割り付け速度と、平均回収速度を計算する処理と、
前記定常状態におけるオブジェクトの寿命分布と、常駐するオブジェクトの総量と、上記平均割り付け速度と、平均回収速度から、ヒープ使用量およびＧＣの発生をシミュレーションする処理をコンピュータに実行させる
ことを特徴とする世代ＧＣを有するサーバ・システムにおけるＧＣ解析プログラム。
（付記７）　与えられた領域サイズをもとに、ヒープ使用量およびＧＣの発生を時系列的にシミュレーションし、ＧＣ率、および、最大ＧＣ時間を予測する処理をコンピュータに実行させる
ことを特徴とする世代ＧＣを有するサーバ・システムにおけるＧＣ解析プログラム。
【００３２】
【発明の効果】
以上説明したように、本発明においては以下の効果を得ることができる。
（１）世代ＧＣを有するサーバシステムにおいて、新世代ＧＣ前後のヒープ使用量を計測することで、低コストにそのシステムにおけるオブジェクトの寿命分布を求めることができる。これにより、そのシステムに適する新世代領域のサイズを見積もることができる。
（２）フルＧＣ前後のヒープ使用量を計測し、上記オブジェクトの寿命分布より、そのシステムにおける常駐オブジェクトの量を予測することができる。
（３）ＧＣ発生時刻とＧＣ所要時間および、上記寿命分布と常駐オブジェクト量に基づいてヒープの使用量とＧＣの発生をシミュレーションすることにより、ＧＣ率および最大ＧＣ時間を予測することが可能となる。
【図面の簡単な説明】
【図１】本発明の第１の実施例を示す図である。
【図２】ヒープ使用量の変化の模式図である。
【図３】計測された割り付け量、回収量の例を示す図である。
【図４】標準ガンマ分布の確率密度分布ｆ（ｘ）　を示す図である。
【図５】標準ガンマ分布の累積密度分布Ｆ１　（ｘ）　を示す図である。
【図６】モデル関数Ｆ２　（ｘ）　を示す図である。
【図７】モデルへのあてはめる手順を示すフローチャートである。
【図８】実測値をモデルにあてはめた例を示す図である。
【図９】本発明の第２の実施例を示す図である。
【図１０】本発明の第３の実施例を示す図である。
【図１１】シミュレーション手順を示すフローチャートである。
【符号の説明】
１　　新世代ＧＣ時ヒープ使用量計測手段
２　　モデル作成手段
３　　モデルあてはめ手段
４　　割り付け量、回収データ
５　　オブジェクト寿命分布
６　　短寿命オブジェクト量推定手段
７　　フルＧＣヒープ使用量計測手段
８　　常駐オブジェクト量
９　　ＧＣ発生時刻取得手段
１０　ＧＣ所要時間取得手段
１１　平均割り付け速度計算手段
１２　平均回収速度計算手段
１３　シミュレーション手段
【図１】
2004133752.tif 000004
【図２】
2004133752.tif 000005
【図３】
2004133752.tif 000006
【図４】
2004133752.tif 000007
【図５】
2004133752.tif 000008
【図６】
2004133752.tif 000009
【図７】
2004133752.tif 000010
【図８】
2004133752.tif 000011
【図９】
2004133752.tif 000012
【図１０】
2004133752.tif 000013
【図１１】
2004133752.tif 000014