Sun Java System Web Server 7.0 パフォーマンスのチューニング、サイジング、およびスケーリング

Java Web アプリケーションのパフォーマンスチューニング

この節には、Java Web アプリケーションのパフォーマンス改善に役立つ情報が含まれています。この節では、次の内容について説明します。

さらに次の各節も参照し、Java Web アプリケーションに関するその他のチューニング情報を確認してください。

プリコンパイルされた JSP の使用

JSP のコンパイルは、比較的長い時間のかかる、リソース集約型のプロセスです。Web Server はデフォルトで、JSP が変更されたかどうかを定期的にチェックし、それらを動的に再読み込みします。これにより、サーバーを再起動することなしに変更を配備できます。sun-web.xml 内の jsp-config 要素の reload-interval プロパティーは、サーバーによる JSP の変更有無のチェック頻度を制御します。ただし、このチェックを行うと、パフォーマンスが若干低下します。

サーバーがある .jsp ファイル内で変更を検出すると、その JSP だけの再コンパイルと再読み込みが行われます。Web アプリケーション全体の再読み込みは行われません。

JSP が変更されない場合には、それらの JSP をプリコンパイルすることで、パフォーマンスを改善できます。

管理コンソールまたは CLI のいずれかを使って Web アプリケーションを追加するときに、JSP をプリコンパイルするオプションを選択します。JSP のプリコンパイルを有効にすると、Web アプリケーション内に存在するすべての JSP がプリコンパイルされ、それらの対応するサーブレットクラスが、その Web アプリケーションの WEB-INF/lib または WEB-INF/classes ディレクトリ内にバンドルされます。ある JSP へのアクセスが発生すると、その JSP がコンパイルされるのではなく、代わりにそのプリコンパイルされたサーブレットが使用されます。JSP の詳細については、『Sun Java System Web Server 7.0 Developer’s Guide to Java Web Applications』を参照してください。また、「クラス再読み込みの設定」も参照してください。

サーブレット/JSP キャッシュの使用

同じサーブレット/JSP の再実行に長時間を費やしている場合には、その結果をキャッシュに書き込んでおき、次回実行時にキャッシュからその結果を取り出して返すことができます。たとえば、これは、サイトを訪れたすべてのユーザーが実行する共通クエリーなどで役立ちます。クエリーの結果は日々変わる可能性があるので動的でなければいけませんが、そのロジックをユーザーごとに実行する必要はありません。

キャッシュを有効にするには、アプリケーションの sun-web.xml ファイル内のキャッシュパラメータを構成します。詳細については、『Sun Java System Web Server 7.0 Developer’s Guide to Java Web Applications』「Caching Servlet Results」を参照してください。

Java セキュリティーマネージャーの設定

Web Server は Java セキュリティーマネージャーをサポートします。セキュリティーマネージャーを使って実行することの最大の欠点は、パフォーマンスに悪影響を及ぼす点です。Java セキュリティーマネージャーは、製品のインストール時にデフォルトで無効になります。セキュリティーマネージャーを使わずに実行すれば、アプリケーションの種類によっては、パフォーマンスが大幅に改善される可能性があります。実行時にセキュリティーマネージャーを使用するかどうかは、アプリケーションや配備のニーズに基づいて判断するようにしてください。詳細については、『Sun Java System Web Server 7.0 Developer’s Guide to Java Web Applications』を参照してください。

クラス再読み込みの設定

サーブレットコンテナの動的再読み込み間隔と、sun-web.xml 内の class-loader 要素の dynamic-reload-interval によって、サーバーがサーブレットクラスの変更有無をチェックする頻度が決まります。動的再読み込みが有効になっていて、かつある .class ファイルの変更をサーバーが検出した場合、その Web アプリケーション全体の再読み込みが行われます。

動的再読み込み間隔を設定するには、構成の「Java」タブ ⇒「サーブレットコンテナ」サブタブを開くか、wadm set-servelt-container-props コマンドを使用します。変更がスケジュールに従って行われるような本稼働環境では、この値を 0 に設定することで、サーバーが常に更新チェックを行うのを防ぎます。デフォルト値は 0 (つまりクラスの再読み込みが無効) です。sun-web.xml 内の要素の詳細については、『Sun Java System Web Server 7.0 Developer’s Guide to Java Web Applications 』を参照してください。

クラスパス内でのディレクトリの回避

特定のアプリケーション (特に Java セキュリティーマネージャーが有効になっている場合) では、クラスパス内に不要なディレクトリが存在しないようにすることで、パフォーマンスを改善できます。そうするには、構成の「Java」タブ ⇒「一般」サブタブにある「サーバークラスパス」、「クラスパスのプレフィックス」、および「クラスパスのサフィックス」フィールドを変更するか、コマンド wadm set-jvm-prop を使用します。さらに、Web アプリケーションの .class ファイルをそのまま WEB-INF/classes 内にパッケージ化する代わりに、それらの .class ファイルを .jar アーカイブとして WEB-INF/lib 内にパッケージ化し、WEB-INF/classes ディレクトリが .war アーカイブに含まれていないことを確認します。

Web アプリケーションのセッション設定の構成

セッションの寿命が比較的短い場合、sun-web.xml 内の session-properties 要素の下にある timeOutSeconds プロパティーの値をデフォルト値の 10 分から減らすことで、セッションタイムアウトを減らしてみてください。

セッションの寿命が比較的長い場合、reapIntervalSeconds プロパティーの値をデフォルト値の毎分 1 回から増やすことで、セッションリーパーの実行頻度を減らしてみることができます。

これらの設定やセッションマネージャーの詳細については、『Sun Java System Web Server 7.0 Developer’s Guide to Java Web Applications』を参照してください。

マルチプロセスモードで、sun-web.xmlpersistence-types1ws60 または mmap のいずれかに構成されている場合、セッションマネージャーはクロスプロセスロックを使ってセッションデータの整合性を維持します。これらを次の説明に従って設定すれば、パフォーマンスを改善できます。


注 –

マルチプロセスモードは非推奨であり、下位互換性を維持するためだけに含まれています。


maxLocks のチューニング (UNIX/Linux)

maxLocks プロパティーに指定された数の意味は、maxSessions の値を maxLocks で割ってみれば理解できます。たとえば、maxSessions = 1000 の場合に maxLocks = 10 と設定すると、約 100 個のセッション (1000/10) が同じロック上で競合することになります。maxLocks を増やすと、同じロック上で競合するセッションの数が減るので、パフォーマンスが改善し、待ち時間が短縮される可能性があります。ただし、ロックの数を増やすとオープン状態のファイル記述子の数も増えます。そのため、ロックの数を増やさなければ受信接続要求に割り当てられるはずだった利用可能な記述子の数が、減ることになります。

これらの設定の詳細については、『Sun Java System Web Server 7.0 Developer’s Guide to Java Web Applications』の第 6 章「Session Managers」を参照してください。

MMapSessionManager のチューニング (UNIX/Linux)

次の例では、manager-properties プロパティーを使って persistence-type="mmap" と構成する場合に、プロセスサイズにどのような影響があるかについて説明します。詳細については、『Sun Java System Web Server 7.0 Developer’s Guide to Java Web Applications』「MMap Session Manager (UNIX Only)」を参照してください。

maxSessions = 1000
maxValuesPerSession = 10
maxValueSize = 4096

この例の場合、サイズ 1000 X 10 X 4096 バイト、つまり約 40M バイトのメモリーマップファイルが作成されます。これはメモリーマップファイルなので、起動時のプロセスサイズが 40M バイトだけ増えます。これらのパラメータに設定する値が大きいほど、プロセスサイズの増加量も増えます。