本文へジャンプ

System i スペシャリストが教える V5 ちょっと、イイ話

第7回:WebSphere Application Server for iSeriesにおけるJSP初回起動時のパフォーマンス向上の方法

WebSphere Application Server for iSeriesの特徴

WebSphere Application Server(以下WAS)は、基本的にはどのサーバー・プラットフォームに対応した製品も同一の機能を提供しています。(WAS V5 Express for iSeriesだけは、Windows版と基本設計から異なる製品であるため例外となっています。)従って、基本的にはWASレベルでは、特定のサーバー・プラットフォームに限った有効なチューニング方法は無い、といえます。iSeriesの場合、WASはAIX版をベースにしていますので、基本的な機能はWAS for AIXと同等です。

一方、WASの動作を支えるJVM(Java Virtual Machine)に関しては、各サーバー・プラットフォーム(OS)によって実装方法はかなり異なる、という事がいえます。iSeries(OS/400)のJVMに関して言えば、他のOS上で動作するJVMのほとんどがOSの上位レイヤーとして実装されるのに対し、OS/400ではマイクロコード(Linuxのカーネルなどに相当)上に実装されている点が大きな特徴です。マイクロコードはOS/400の下位レイヤーとして位置づけられていますので、一般的な実装方法よりJVMの実行速度を上げる事が出来るのが特長です。

WAS for iSeriesを使用する場合のJSPパフォーマンス・アップのための機能

例えばWebFacing Toolを使用するケースなど、大量のJSPをアプリケーションで使用する場合があります。JSPを大量に使用する場合、JSPの初回起動時のロード時間が問題になることがあります。

WASではJSPの事前コンパイル機能(JSP Batch Compiler)が提供されていて、初回起動時のコンパイル時間を短縮することが可能になっています。

iSeries上でWASを稼動させる場合には、JSPの初回起動時のパフォーマンスを改善するために、先述のJSP Batch Compilerに加えて、以下の機能も利用できます。

  1. JSP自動一括コンパイル
  2. バイトコード・キャッシング

この2つの機能はJSP Pre-touchメカニズムと呼ばれ、iSeries上でWASを稼動する場合にのみ使用可能な、OS/400におけるJVMの拡張機能です。iSeries上のWASでこれらの機能を有効に設定することにより、JSP起動時の処理時間を簡単に改善する事が可能です。JSP Pre-tocuhメカニズムは、JSP Batch CompilerよりもJSPパフォーマンス改善に対する効果は大きいと言われています。

JSP Pre-touchメカニズム

JSP Pre-touchメカニズムは、WAS for iSeries V3.5.6以降(WAS V4、V5も含む)で使用できます。またJSPのバージョンはJSP 1.1がサポート対象です。

JSPの実行手順に従ってJSP Pre-touchメカニズムを解説すると、以下のようになります。

ステップ1.JSPのコンパイル → JSP自動一括コンパイル
通常、JSPの初回実行時には、JSPに含まれるクラスファイルのコンパイルが発生します。このためJSPの初回実行時は処理時間が長くなってしまいます。(2回目以降の実行の際には、初回にコンパイルされたクラスファイルをロードするだけですので、処理は高速になります。)

WAS for iSeriesでは、WASのアプリケーション・サーバー起動時にJSPのクラスファイルを自動的にコンパイルするように指定する機能があります。この機能をオンに設定しておけば、アプリケーション・サーバー起動時に自動的にJSPのクラスファイルをコンパイルさせる事が可能となります。この際にユーザーが何らかの操作をその都度行なう必要はありません。

注意点としては、アプリケーション・サーバー起動時にJSPコンパイルのためにCPUの負荷が高くなることと、アプリケーション・サーバー起動完了までの所要時間が長くなることです。

ステップ2.JSPのバイトコード・ベリファイ → バイトコード・キャッシング
このステップは通常、JSPの初回実行時に実行されます。JSPを最初に実行する際には、システム・クラスローダーがJSPのバイトコード・ベリファイを実行します。バイトコード・キャッシングを使用可能にすると、ベリファイ実行時にJSPクラスファイルの情報を内部的なjarファイルにキャッシュします。JSPの初回実行時にはこのキャッシュを利用する事により、処理を高速化する事ができます。

バイトコード・キャッシングはWAS for iSeries V4以降、OS/400 V5R1以降で使用する事が出来ます。(OS/400 V5R1ではPTF 5722JV1 SI02683の適用が必要)

ステップ3.JSPクラスファイルのロード → JSP自動一括コンパイル
WASアプリケーションが起動完了し、クライアントからJSP実行のリクエストがあると、JSPのクラスファイルがロードされてから処理が実行されます。JSP自動一括コンパイルを使用可能に設定しておくと、WASアプリケーション・サーバー起動時にJSPクラスファイルのロードも行なう事ができます。この結果、JSP初回実行時のパフォーマンスが向上します。