※このエントリーは、developerWorks : AIX and UNIXの「Advanced performance tuning concepts」を翻訳したエントリーのPart 3です。

【訳注】 「パフォーマンスチューニングの応用概念 Part 2」の続きのエントリーです。

ガーベジ・コレクションの情報収集

ガーベジ・コレクションがアプリケーションにどの程度影響を与えているかを理解するための第一歩は、いつ、どのくらいの頻度でガーベジ・コレクションが実行されているかを知るための情報を集めることです。JVMで冗長ガーベジ・コレクション・ログ出力を有効化することで、ガーベジ・コレクションのログ出力が開始されます。IBM WebSphere Application Serverでは、管理コンソールから[アプリケーション・サーバー]→[サーバー名]→[プロセス定義]→[Java仮想マシン]と移動し、統合管理コンソールの[冗長ガーベッジ・コレクション]の箇所を選択します。

あるいは、JVMを「-verbose:gc」パラメータで開始することでも可能です(どちらにせよ、これも統合管理コンソールでやるんですが)。どちらにせよ、JVMの出力にガーベジ・コレクションの情報が含まれるようになります。

冗長ガーベジ・コレクション・ログ出力の残念な点としては、ベンダー間でファイルフォーマットが違うことです。さらには、同じベンダーでもバージョンによって異なっていることさえあります。例えば、IBMのJava Runtime Environment (JRE) 6.0では、冗長XMLファイルフォーマットです。サン・マイクロシステムズのHotSpot JVMでは、簡易一行フォーマットを用い、追加情報が必要な場合は追加コマンドラインパラメータが必要になります。

ガーベジ・コレクション・データの理解

通常の負荷でアプリケーションを実行した場合の、ガーベジ・コレクションの情報をログ出力するようになりました。それでは、ガーベジ・コレクションのログを確認してみましょう。ヒープサイズが初期の割り当て時から大きくなり、最終的には一定値に落ち着く様子が確認出来ると思います。この値を初期のヒープサイズに利用することが可能です。これにより、初期状態から安定状態になるまでヒープサイズを増やす際の処理の遅れを回避することが出来ます。

ガーベジ・コレクションのログでは、いつコレクションが実行され、どのくらいの時間を費やしたかを確認することが出来ます。もし、ガーベジ・コレクションの実行に長い時間がかかっているのでしたら、JVMが異なるガーベジ・コレクション・アルゴリズムを使うようにチューニングすることが出来ます(アルゴリズムについては、JVMのバージョンやベンダーによって異なります)。このタイムスタンプから、ガーベジ・コレクションに費やしている時間のパーセントが計算出来、JVM設定の比較に利用することが出来ます。

ガーベジ・コレクションプロセスが定期的に拡張と圧縮を繰り返しているのであれば、JVMが拡張と圧縮の判定をするための比率を変更するが出来ます。これは、MinHeadFreeとMaxHeapFreeという値として知られています。

JVMが進化するほど、ガーベジ・コレクションのパフォーマンスは改善する傾向にあります。お手元のJVMのマニュアルがチューニングパラメータの最高の情報源となります。

IBMでは、UNIXサーバー上のWebSphere Application Serverのチューニングの際にチェックすべき項目の推奨があります。

最初に、お使いのサーバーにCPU、ディスク、メモリー、ネットワークの十分なリソースがあることを確認して下さい。これは全ての基礎となります。

次に、アプリケーションのガーベジ・コレクションの必要条件を理解し、それに従いJVMをチューニングして下さい。ここで、一つ前のステップに立ち返り、アプリケーションが必要とするだけの十分なメモリーがあるかを確認する必要が出てきます。

アプリケーションサーバーのキューが、アプリケーションが処理出来るリクエスト分だけであるかを確認しましょう。ウェブサーバーに入ってきたリクエストが、アプリケーションに受け渡される際、キューを通過します。ここでアプリケーションへのコネクションが多数発生していた場合、パフォーマンスの低下が発生してしまいます。ウェブサーバーに過剰なコネクションが張られた場合でも、WebSphere Application Serverまでは到達しないようにすることが出来ます。

最後に、使用されているキャッシュが多数存在しており、データベースへの定型句からEJBテクノロジーとスレッドキャッシュまでが挙げられます。新しいエントリーのために定期的にキャッシュがパージされているならば、それを増やしてみましょう。

まとめ

コンピューターのリソースは、CPU、メモリ、ディスク、ネットワークに分けることが出来ます。あなたのチューニングの挑戦は、これらのリソースを計測し、リソースのネックが生じないようにアプリケーションやアプリーケーションサーバー、サーバーを調整することに注力すべきです。

JVMは独自にヒープを管理し、ガーベジ・コレクションとして知られるプロセスを通じてそれを掃除します。この分野のチューニングでは、ヒープがアプリケーション側の要求に応じて増加することを確認し、重いガーベジ・コレクションが発生しないようにガーベジ・コレクションのパラメータをチューニングすることが必要になります。

ガーベジ・コレクションのチューニングの最適なツールは、冗長ガーベジ・コレクション・トレースの有効化です。これを有効化することで、ガーベジ・コレクションの活動状態がログされます。このログから、どのくらいの頻度でコレクション・サイクルが実行され、なぜコレクションが実行されたかを突き止めることが出来ます。

AIXパフォーマンス・チューニング (Redbooks (5)) AIXパフォーマンス・チューニング (Redbooks (5))
日本アイビーエム

アスキー 2004-01

Amazonで詳しく見る by G-Tools