(57)【要約】【課題】自動でＪＶＭのメモリ管理に関するパラメータの設定値をチューニングするチューニング方法を提供する。【解決手段】チューニング装置１０は、不要となったオブジェクトに割り当てられているメモリの解放をガベージコレクションにより実行する実行環境が出力するガベージコレクションの時間に関する情報に基づいて、前記実行環境のメモリに関するパラメータをチューニングする。【選択図】図２
2017224096.tif 000002
【特許請求の範囲】
【請求項１】
不要となったオブジェクトに割り当てられているメモリの解放をガベージコレクションにより実行する実行環境が出力するガベージコレクションの時間に関する情報に基づいて、前記実行環境のメモリに関するパラメータをチューニングすることを特徴とするチューニング方法。
【請求項２】
ガベージコレクションの時間に基づいて算出される評価値が極値に近づくように、山登り法にしたがって、前記実行環境のメモリに関するパラメータを変化させることを特徴とする請求項１に記載のチューニング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理技術に関し、特にチューニング方法に関する。
【背景技術】
【０００２】
Ｊａｖａ（登録商標）プログラムを実行する環境であるＪａｖａ仮想マシン（Ｊａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ、以下ＪＶＭという）がもつ特徴の一つとして、ガーベッジコレクション（以下、単にＧＣという。）がある。これは、実行中のプログラムによって利用されなくなったオブジェクトに割り当てられているメモリ領域を解放して再利用可能な状態に遷移させる機能であり、メモリ解放の命令をあらかじめプログラムに明示しなくともＪＶＭ側が自動的に処理するので、プログラマからメモリ管理の手間を省きユーザの負担を軽減できる。一方で、ＧＣの実行中はＪａｖａプログラムが停止するため、ＧＣはＪａｖａプログラムのスループット低下やレスポンスタイムの遅延といったパフォーマンスボトルネックの要因にもなりうる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２００４／０９９９８５号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＪＶＭには様々なパラメータが存在する。中でもメモリ管理に関するパラメータは、ＧＣの実行時間や頻度に影響を与えるパラメータであり、非常に重要である。
【０００５】
ＪＶＭのメモリ管理に関するパラメータの設定値は、プログラム仕様やアクセス数、ユーザからの非機能要件等を考慮した上で、システムの初期構築時の性能テスト結果に基づき決定される。本番稼働の開始後に、プログラム仕様やアクセス数等の変化により、パラメータの最適な設定値は変化する。しかしながら、一般に、その変化に応じてパラメータの設定値は変更されず、ＧＣの長時間化によるパフォーマンスボトルネックが発生してからパラメータの設定値を変更することが多い。
【０００６】
本発明はこうした課題に鑑みてなされたものであり、自動でＪＶＭのメモリ管理に関するパラメータの設定値をチューニングするチューニング方法の提供にある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明のある態様のチューニング方法は、不要となったオブジェクトに割り当てられているメモリの解放をガベージコレクションにより実行する実行環境が出力するガベージコレクションの時間に関する情報に基づいて、実行環境のメモリに関するパラメータをチューニングする。
【０００８】
なお、以上の構成要素の任意の組合せ、本発明の表現を、装置、システム、コンピュータプログラム、コンピュータプログラムを格納した記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【０００９】
本発明によれば、自動でＪＶＭのメモリ管理に関するパラメータの設定値をチューニングすることができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態の情報システムの構成を示す図である。
【図２】図１のチューニング装置の機能および構成を示すブロック図である。
【図３】図２の目的関数値保持部に保持されるデータのデータ構造を示す図である。
【図４】チューニング装置の動作を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明を好適な実施の形態をもとに図面を参照しながら説明する。各図面に示される同一または同等の構成要素、部材、処理には、同一の符号を付するものとし、適宜重複した説明は省略する。
【００１２】
図１は、実施の形態の情報システム１００を示す。情報システム１００は、チューニング装置１０と、対象システム１２と、を含む。対象システム１２は、各種の情報処理サービスを提供するシステムであり、ウェブアプリケーションサーバ１４と、データベースサーバ１６と、を備える。対象システム１２は、不図示の帳票サーバ等、種々のサーバや装置をさらに備えてもよい。
【００１３】
ウェブアプリケーションサーバ１４は、対象システム１２による各種の情報処理サービスをクライアント装置へ提供する。ウェブアプリケーションサーバ１４には、ＪＶＭが実装されており、Ｊａｖａプログラムが実行される。
【００１４】
チューニング装置１０は、ウェブアプリケーションサーバ１４に実装されているＪＶＭのメモリ管理に関するパラメータの設定値をチューニングする。チューニング装置１０は特に、ＧＣの時間に基づいて算出される評価値（目的関数値）が極値に近づくように、山登り法にしたがって、ＪＶＭのメモリ管理に関するパラメータを変化させ、それらをチューニングする。
【００１５】
図２は、チューニング装置１０の機能および構成を示すブロック図である。ここに示す各ブロックは、ハードウェア的には、コンピュータのＣＰＵ（central processing unit）をはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。
【００１６】
チューニング装置１０は、ログ取得部２０と、ＧＣ情報抽出部２２と、ＧＣ情報集計部２４と、評価値算出部２６と、評価部２８と、設定値変更部３０と、再起動部３２と、目的関数値保持部３４と、を含む。
【００１７】
ログ取得部２０は、ウェブアプリケーションサーバ１４に実装されているＪＶＭが出力したＧＣログを、ウェブアプリケーションサーバ１４から取得する。本実施の形態では、ログ取得部２０は、ＧＣログのファイルを丸ごと取得する。なお、ログ取得部２０は、ＧＣログのファイルから所定期間（例えば１日）のログだけを取得してもよい。
【００１８】
ＧＣ情報抽出部２２は、ログ取得部２０が取得したＧＣログのファイルから、所定期間（例えば１日）に実行された各ＧＣの時間等のデータ（後述するａ１〜ａ４の値の集計の基礎となるデータ）を抽出する。
【００１９】
ＧＣ情報集計部２４は、ＧＣ情報抽出部２２により抽出された情報を集計し、以下のａ１〜ａ４の値を特定する。
（ａ１）実行されたＧＣの合計時間
（ａ２）実行されたＧＣの時間のうちの最長時間
（ａ３）実行されたＧＣの平均時間
（ａ４）実行されたＧＣの回数
【００２０】
評価値算出部２６は、以下の式に基づき、目的関数値ｆを算出する。
ｆ＝ｗ１×ａ１＋ｗ２×ａ２＋ｗ３×ａ３＋ｗ４×ａ４＋Ｗ５×ｊ１＋ｗ６×Ｊ２
ｗ１〜ｗ６：対象システム１２ごとに決定される重み付け
ｊ１：Ｊａｖａヒープ最大サイズ
ｊ２：Ｊａｖａ  Ｐｅｒｍａｎｅｎｔ最大サイズ
すなわち、目的値関数ｆは、ＧＣの時間、回数、ＪＶＭのメモリ管理に関する（一部の）パラメータの設定値に基づいて算出される。評価値算出部２６により算出された目的関数値ｆは、目的関数値保持部３４に保持される。
【００２１】
ｗ１〜ｗ６の重み付けの値については、対象システム１２の要件に基づいて決定すればよい。例えば、対象システム１２がオンライントランザクション処理が主となるシステム等の場合、ＧＣの合計時間よりも１回のＧＣの時間を短くすることが求められる。ここで、本実施の形態では、目的関数値ｆは、ａ１〜ａ４やｊ１〜ｊ２を足し合わせているため、目的関数値ｆの最小値がその極値となる。この場合、ａ２に対応する重み付けｗ２を他の重み付けに比べて大きくすればよい。また例えば、対象システム１２がバッチ処理を実行するシステムの場合、１回のＧＣの時間よりもＧＣの合計時間を短くすることが求められる。この場合、ａ１に対応する重み付けｗ１を他の重み付けに比べて大きくすればよい。また例えば、ウェブアプリケーションサーバ１４のメモリのうちＪＶＭに割り当てられるメモリのサイズが比較的小さい場合、ｊ１、ｊ２に対応する重み付けｗ５、ｗ６を他の重み付けに比べて大きくすればよい。
【００２２】
評価部２８は、後述のように変更される変更後のパラメータの設定値の組み合わせと、変更前のパラメータの設定値の組み合わせのうち、より適した設定値の組み合わせがどちらであるかを評価する。具体的には、評価部２８は、目的関数値保持部３４を参照して、変更前のパラメータの設定値の組み合わせで対象システム１２が所定期間（例えば１日）稼働したときに出力されたＧＣログに基づく目的関数値ｆｂと、変更後のパラメータの設定値の組み合わせで対象システム１２が所定期間（例えば１日）稼働したときに出力されたログに基づく目的関数値ｆａのうち、より小さい目的関数値ｆに対応するパラメータの設定値の組み合わせがより適したパラメータの設定値の組み合わせであると評価する。したがって、評価部２８は、目的関数値ｆｂが目的関数値ｆａよりも小さい場合、目的関数値ｆｂに対応するパラメータの設定値の組み合わせすなわち変更前のパラメータの設定値の組み合わせがより適していると評価する。一方、評価部２８は、目的関数値ｆａが目的関数値ｆｂよりも小さい場合、目的関数値ｆａに対応するパラメータの設定値の組み合わせすなわち変更後のパラメータの設定値の組み合わせがより適していると評価する。
【００２３】
設定値変更部３０は、ウェブアプリケーションサーバ１４のＪＶＭのメモリ管理に関するパラメータの設定値を変更する。設定値変更部３０は、具体的には、以下の６つのパラメータの設定値を変更する。
-Xms：Ｊａｖａヒープ初期サイズ（Ｊａｖａヒープ最大サイズと同値にする）
-Xmx：Ｊａｖａヒープ最大サイズ
-Xmn(-XX:NewSize)：Ｎｅｗ領域初期サイズ（Ｎｅｗ領域最大サイズと同値にする）
-XX:MaxNewSize：Ｎｅｗ領域最大サイズ
-XX:PermSize：Ｐｅｒｍａｎｅｎｔ領域初期サイズ（Ｐｅｒｍａｎｅｎｔ領域最大サイズと同値にする）
-XX:MaxPermSize：Ｐｅｒｍａｎｅｎｔ領域最大サイズ
【００２４】
設定値変更部３０は、これら６つのＪＶＭのパラメータの設定値のそれぞれについて、評価部２８がより適していると評価した設定値を基準とする所定の範囲（例えば±５％の範囲）内のランダムな値に変更する。６つのパラメータのうちの１つを例に説明すると、設定値変更部３０は、例えば、より適していると評価されたJavaヒープ最大サイズ（-Xmx）の設定値が１０２４ＭＢの場合、９７２ＭＢ〜１０７５ＭＢ（１０２４ＭＢの±５％）の範囲のランダム（乱数）な値を取得し、取得した値をJavaヒープ最大サイズの設定値とする。
【００２５】
なお、上述の範囲を、パラメータの設定値のチューニングが進むにつれて変化させてもよい。例えば、設定値変更部３０は、対象システム１２のサービス開始時は第１の範囲（例えば±５％）内のランダムな値に変更し、直近１０回の目的関数値の標準偏差が所定の値以下になったら、第１の範囲よりも小さい第２の範囲（例えば±３％）内のランダムな値に変更してもよい。
【００２６】
再起動部３２は、ウェブアプリケーションサーバ１４のＪＶＭを再起動させる。これにより、設定値変更部３０によって変更されたＪＶＭのパラメータの設定値が反映される。
【００２７】
図３は、図２の目的関数値保持部３４に保持されるデータのデータ構造を示す。図３に示すように、目的関数値保持部３４は、評価値算出部２６により算出された目的関数値ｆと、その目的関数値ｆに対応する各パラメータの設定値と、を対応付けて保持する。
【００２８】
以上のように構成されたチューニング装置１０の動作を説明する。
図４は、チューニング装置１０の動作を示すフローチャートである。図４に示す処理は、一定間隔、たとえば１日ごとに繰り返し実行されるループ処理である。ここでは、対象システム１２は、ＡＭ３：００からＡＭ６：００はサービス提供時間外であり、毎日この時間帯に図４の処理が１回実行されるものとして説明する。
【００２９】
ログ取得部２０は、ウェブアプリケーションサーバ１４からＧＣログのファイルを取得する（Ｓ１０）。ＧＣ情報抽出部２２は、ＧＣログのファイルから、前日のＡＭ６：００からＡＭ３：００（すなわち直近のサービス提供時間）に実行された各ＧＣの時間を抽出する（Ｓ１２）。ＧＣ情報集計部２４は、ＧＣ情報抽出部２２により抽出された情報から、前日のＡＭ６：００からＡＭ３：００に実行されたＧＣについて、上述のａ１〜ａ４の値を特定する（Ｓ１４）。評価値算出部２６は、ＧＣ情報集計部２４により特定されたａ１〜ａ４に基づいて、目的関数値ｆを算出する（Ｓ１６）。
【００３０】
評価部２８は、前回（１日前）当該フローチャートの処理を実行したときに設定された変更後の（すなわち現在の）パラメータの設定値と、変更前の（すなわち前回の）パラメータの設定値のうち、より適したパラメータの設定値がどちらであるかを評価する（Ｓ１８）。詳しくは、評価部２８は、今回、Ｓ１６において算出された目的関数値ｆａと、前回（１日前）、当該フローチャートの処理が実行されたときにＳ１６において算出された目的関数値ｆｂのうち、より小さい目的関数値に対応するパラメータの設定値がより適したパラメータの設定値であると評価する。評価部２８は、目的関数値ｆａがより小さい場合、現在のパラメータの設定値がより適していると評価し、目的関数値ｆｂがより小さい場合、変更前のパラメータの設定値がより適していると評価する。
【００３１】
設定値変更部３０は、Ｓ１８においてより適していると評価されたパラメータの設定値を基準とする所定の範囲内のランダムな値に、ウェブアプリケーションサーバ１４のＪＶＭのパラメータの設定値を変更する（Ｓ２０）。再起動部３２は、ウェブアプリケーションサーバ１４のＪＶＭを再起動させ、変更したパラメータの設定値を反映させる（Ｓ２２）。そして、対象システム１２は、ＡＭ６：００からＡＭ３：００までサービスを提供する。
【００３２】
なお、前回の目的関数値が目的関数値保持部３４に保持されていない場合、例えば初めて図４のループ処理を実行した場合は、Ｓ１８をスキップし、Ｓ２０ではＳ１６で算出した目的関数値ｆを基準にパラメータの設定値を変更する。
【００３３】
以上の処理が１日ごとに繰り返し実行されることにより、次第に最適な設定値にチューニングされていく。特に、プログラム仕様やアクセス数等の変化によりパラメータの最適な設定値が変わった場合でも、次第に最適な設定値にチューニングされていく。
【００３４】
以上説明した実施の形態に係るチューニング装置１０によると、ＪＶＭのメモリ管理に関するパラメータの設定値が、自動でチューニングされる。したがって、ソフトウェア仕様やアクセス数等の変化により、パラメータの最適な設定値が変化した場合にも、その変化に応じてパラメータの設定値がチューニングされる。特に、実際に実行されたＧＣの時間に関する情報に基づいてパラメータの設定値がチューニングされる。これにより、ＧＣの長時間化によるパフォーマンスボトルネックが発生するのを抑止できる。
【００３５】
また実施の形態に係るチューニング装置１０では、ＧＣの時間に関する情報に加えて、ＪＶＭのメモリ管理に関するパラメータの設定値に基づいて目的関数値ｆが算出される。したがって、ＧＣの時間を短くすることだけが考慮された設定値ではなく、ＪＶＭが必要とするメモリサイズが大きくなりすぎないよう考慮された設定値にチューニングされる。
【００３６】
（変形例１）
実施の形態では、対象システム１２の外部の装置であるチューニング装置１０が対象システム１２のウェブアプリケーションサーバ１４に実装されたＪＶＭをチューニングする場合について説明したが、これに限られない。対象システムが、図２に示すチューニング装置１０の各ブロックの機能を有していてもよい。例えば、チューニングされるべきＪＶＭが実装されているサーバ（装置）自身が図２の各ブロックの機能を有していてもよい。
【００３７】
（変形例２）
実施の形態では、目的値関数ｆは、ＧＣの時間、回数、ＪＶＭのメモリ管理に関する（一部の）パラメータの設定値に基づいて算出される場合について説明したが、これに限られない。目的関数値ｆは、少なくともＧＣの時間に基づいて算出されればよい。すなわち、目的値関数ｆは、上述のａ１〜ａ３の少なくとも１つに基づいて算出されればよい。
【００３８】
また、目的関数値ｆは、ａ１〜ａ４の要素やｊ１〜ｊ２の要素を足し合わせたものでなく、掛け合わせたものであってもよい。
【００３９】
また、目的関数値ｆは、ａ〜ａ４の要素やｊ１〜ｊ２の要素をすべて引いたものであってもよい。この場合、目的関数ｆの最小値がその極値となるため、評価部２８は、より大きい（すなわち絶対値がより小さい）目的関数値ｆに対応するパラメータの設定値の組み合わせがより適したパラメータの設定値の組み合わせであると評価する。
【００４０】
また、目的関数値ｆは、ａ１〜ａ４の各要素の逆数やｊ１〜ｊ２の各要素の逆数を、足したり、または掛け合わせたり、または引いたものであってもよい。この場合も、目的関数ｆの最大値がその極値となるため、評価部２８は、より大きい目的関数値ｆに対応するパラメータの設定値の組み合わせがより適したパラメータの設定値の組み合わせであると評価する。
【符号の説明】
【００４１】
１０  チューニング装置、  １２  対象システム、  ２２  ＧＣ情報抽出部、  ２４  ＧＣ情報集計部、  ２６  評価値算出部、  ２８  評価部、  ３０  設定値変更部。
【図１】
2017224096.tif 000003
【図２】
2017224096.tif 000004
【図３】
2017224096.tif 000005
【図４】
2017224096.tif 000006