Interstage Application Server チューニングガイド
目次 索引 前ページ次ページ

第3章 J2EEのチューニング

3.1 IJServerのチューニング

 IJServerをチューニングする時に考慮するポイントは以下です。ここに記述されたチューニングは、ServletコンテナとEJBコンテナの両方に有効です。

プロセス多重度

 1つのIJServerを、複数のプロセスで起動できます。これにより、負荷を分散できます。
 IJServerのプロセス多重度は、Interstage管理コンソールのワークユニット設定またはisj2eeadminコマンドで指定できます。詳細については、Interstage管理コンソールのヘルプを参照してください。isj2eeadminコマンドについては、“リファレンスマニュアル(コマンド編)”の“isj2eeadmin”を参照してください。

Java VMのヒープ領域サイズ

 Interstage管理コンソールまたはisj2eeadminコマンドを使用して、ワークユニット設定のJava VMオプションを指定することで、IJServerが動作するJava VMのパラメタを変更して動作させることができます。
 パラメタを変更して、Java VMヒープ領域サイズなどを変更できます。

 JDK 1.4の場合における最大ヒープ領域サイズの例を次に示します。
 最大ヒープ領域のサイズの省略値は、Java VMによって異なりますので、JDKのドキュメントを参照してください。java.lang.OutOfMemoryErrorが多発する場合には、本定義項目で、Java VMの最大ヒープ領域を増加させてください。


 Java VMの最大ヒープ領域を1024メガバイトとする場合の設定

-Xmx1024m

 なお、Interstageではヒープ領域の問題を警告メッセージで通知する、予兆監視機能を提供しています。
 警告メッセージが出力された場合、そのまま業務を継続すると、メモリ不足やレスポンス低下などの問題が発生する可能性があります。これらの問題を解決するために、警告メッセージに記載されている不足リソースの情報を元に、チューニングを実施してください。
 Java VMで問題となる異常の原因は、ヒープ領域またはPerm領域の不足です。これを回避するために、現在の上限値を20%増加させて運用を再開します。それでも警告が出力される場合は、上限値を更に20%増加させて、警告が出力されなくなるまで繰り返しチューニングを実施してください。チューニングを繰り返し行い、警告メッセージが出力されない状態にすることで、安定稼動するシステムを構築することができます。
 予兆監視機能については、“Interstage Application Server 運用ガイド”を参照してください。

ガーベジコレクション発生回数

 IJServerでは、JavaのRMI機能による自動ガーベジコレクションがデフォルトで1時間隔で動作します。
 RMI機能による自動ガーベジコレクションの発生間隔は、Interstage管理コンソール > “ワークユニット名” > [環境設定]タブ > [ワークユニット設定]のJava VMオプションに、“-Dsun.rmi.dgc.client.gcInterval=発生間隔”および“-Dsun.rmi.dgc.server.gcInterval=発生間隔”を指定してチューニングします。発生間隔には、ミリ秒単位で数値を指定してください。
 指定がない場合には、IJServerの起動時に“-Dsun.rmi.dgc.client.gcInterval=3600000”および“-Dsun.rmi.dgc.server.gcInterval=3600000”が自動的に設定されます。

 isj2eeadminコマンドを使用して、設定することもできます。isj2eeadminコマンドについては、“リファレンスマニュアル(コマンド編)”の“isj2eeadmin”を参照してください。

 なお、RMI機能による自動ガーベジコレクションの発生間隔をチューニングしても、ガーベジコレクション発生回数が削減されない場合、Java VMのヒープ領域サイズが不足している可能性がありますので、Java VMのヒープ領域サイズのチューニングを行うことで削減される場合があります。“Java VMのヒープ領域サイズ”を参照ください。

トランザクションアイソレーションレベル

 EJBアプリケーションからデータベースにアクセスする場合、EJBアプリケーションの実行多重度を上げるには、トランザクションアイソレーションレベル(以降、アイソレーションレベルと呼びます)を考慮する必要があります。アイソレーションレベルとは、データベースに対する排他整合性水準のことです。

 使用できるアイソレーションレベルを以下に示します。アイソレーションレベルの詳細は、使用するデータベースのマニュアルを参照してください。

 アイソレーションレベルの設定は、UserTransaction.begin()メソッドを発行してから、UserTransaction.commit()メソッドまたはUserTransaction.rollback()メソッドを発行するまでの間有効です。

◆設定方法

 アイソレーションレベルは、Interstage管理コンソールまたはisj2eeadminコマンドで設定します。設定方法の詳細については、Interstage管理コンソールのヘルプを参照してください。isj2eeadminコマンドについては、“リファレンスマニュアル(コマンド編)”の“isj2eeadmin”を参照してください。


【DBMSにOracleを使用している場合】

 「ORA-8177:このトランザクションのアクセスを逐次化できません。」というエラーは、トランザクションアイソレーションレベルにTransaction-serializableが設定されているにもかかわらず、複数のユーザが同時に同一の表を更新した場合など、トランザクションのシリアル化を保障できない場合に出力され、ユーザにその旨を伝えています。

 トランザクションアイソレーションレベルにTransaction-serializableを設定し、エラー「ORA-8177」が発生した場合は、アプリケーション側で単に「異常終了」と判断するのではなく、トランザクションのロールバック後に「リトライ」させるなどの対処が必要になります。
 なお、トランザクションアイソレーションレベルがTransaction-read-committed(Oracleのデフォルト)の場合は、「ORA-8177」エラーが発生することはありません。特にTransaction-serializableの設定が必須ではない場合、Transaction-read-committedを設定することにより、同時実行性が向上し、「ORA-8177」エラーも発生しなくなります。

JDBCのコネクション

 ここでは、JDBCのコネクションの以下について説明します。

 InterstageのJNDIサービスプロバイダから取得したJDBCデータソースを使用した場合、JDBCのコネクションはプーリングされて再利用されます。

コネクションプーリングの種別

 コネクションプーリングには、以下の2種類があります。

 それぞれの特徴は、以下のとおりです。

Interstageでコネクションプーリングする
Interstageでコネクションのプーリング制御を行うため、Interstage管理コンソールでコネクションプーリングの詳細設定ができます。プーリングされている情報を、Interstage管理コンソールのモニタ機能で参照できます。
JDBCドライバでコネクションプーリングする
JDBCドライバでコネクションのプーリング制御を行うため、使用する各JDBCドライバの機能を使用して、コネクションプーリングの設定を行います。設定方法の詳細は、JDBCドライバのマニュアルを参照してください。
JDBCドライバ側でプーリング制御を行うため、Interstage管理コンソールで参照可能なJDBCデータソースのモニタ情報は、「アプリケーションからのコネクション確立情報」のみです。詳細はInterstage管理コンソールのヘルプを参照してください。

 コネクションプーリングの機能概要については、“J2EEユーザーズガイド”の“JDBC(データベース)のコネクション”を参照してください。

 チューニング方法について説明します。

 以下に、各データベースとコネクションプーリングの対応について記載します。

DB種別

コネクションプーリング

Oracle

Interstageでコネクションプーリングを行います。

Symfoware

JDBCドライバでコネクションプーリングを行います。

SQL Server

Interstageでコネクションプーリングを行います。
Windows(R)でInterstage JDBC Driverを使用する場合は、JDBCドライバがコネクションプーリングを行います。



PostgreSQL

データソースの種類に“Interstageでコネクションプーリングを行う”を選択している場合に、Interstageでコネクションプーリングを行います。
“PostgreSQLでコネクションプーリングを行う”の場合は、JDBCドライバがコネクションプーリングを行います。

サポートしているデータベースは、使用しているプラットフォームによって異なります。
“使用上の注意”の“アプリケーション実行時に必要なソフトウェア”を参照してください。

コネクションプーリングのチューニングパラメタ

 以下に、Interstage管理コンソールまたはisj2eeadminコマンドを使用して設定可能なパラメタを示します。
 パラメタは、データソースごとにIJServerの環境設定で設定します。

パラメタ

説明

設定値

事前コネクト数 (注1) (注4)

運用で必要なコネクションを、起動時にあらかじめ取得することにより、初回疎通時から2回目以降と同等の処理速度が得られます。

最大値:2147483647
最小値:0
初期設定値:0

最大コネクション数 (注2)

最大コネクション数を抑止することにより、メモリ資源を抑止することが可能です。
最大コネクション数すべてをJ2EEアプリケーションが使用している状態で接続リクエストがあった場合、コンテナは“コネクションタイムアウト”における設定時間の期間内で、プールにコネクションが返却されるのを待ちます。プールにコネクションが返却された場合にはそのコネクションを使用し、返却されなかった場合にはSQLExceptionを返却します。

最大値:2147483647
最小値:1
初期設定値:64

コネクションタイムアウト (注2)

最大コネクション数分のコネクションすべてがJ2EEアプリケーションで使用中の状態で、コネクションの接続要求が来た場合に、プールにコネクションが返却されるのを待つ時間を指定します。
時間が超過してもコネクションが返却されなかった場合は、SQLExceptionが返却されます。0を指定した場合は、タイムアウト監視を行いません。

最大値:2147483647
最小値:0
初期設定値:5
(単位:秒)

アイドルタイムアウト (注2)

使用されていないコネクションをタイムアウトで破棄することにより、無駄なメモリ資源を解放することができます。
ただし、事前コネクトで接続されたコネクションはアイドルタイムアウトの対象となりません。

最大値:2147483647
最小値:0
初期設定値:600
(単位:秒)

異常時の再接続 (注2)

JDBCコネクションの自動再接続機能(注3)を使用するかどうかを指定します。
自動再接続機能を使用する場合、プーリングされているJDBCのコネクションが使用可能なコネクションであるかを判定し、使用できないコネクションの場合には自動的にDBMSに再接続します。

する/しない(デフォルト)

インターバル時間 (注2)

JDBCコネクションの自動再接続機能(注3)において、プーリングされているJDBCのコネクションが使用できない場合、またはDBMSへの接続に失敗した場合、再度接続を行うまでのインターバル時間を指定します。
異常時の再接続を[する]にした場合のみ、指定した値が有効になります。

最大値:2147483647
最小値:1
初期設定値:10
(単位:秒)

リトライ回数 (注2)

JDBCコネクションの自動再接続機能(注3)において、プーリングされているJDBCのコネクションが使用できない場合、またはDBMSへの接続に失敗した場合、再度接続を試みる回数を指定します。
異常時の再接続を[する]にした場合のみ、指定した値が有効になります。

最大値:2147483647
最小値:1
初期設定値:10
(単位:回数)

 注1)
 CMP2.0のEJBアプリケーションを配備したIJServerを起動する場合、起動時にDBMSの識別子長の最大値をチェックします。このため、事前コネクト機能を使用しない場合にも1コネクションだけDBMSへ接続します。
 Interstageでコネクションをプーリングする場合には、起動処理完了後にコネクションが切断されます。
 注2)
 以下の機能は、Oracle、Microsoft(R) JDBCドライバを使用したSQL ServerまたはPostgreSQL(Windows (R)、Linuxシステムのみ)のデータソースを使用する場合に有効です。
 以下に、使用するデータベースで.bindingsファイルを作成しない場合の登録情報を示します。

.bindingsファイルを作成しない場合

Oracle

SQL Server

PostgreSQL

OracleConnectionPoolDataSourceまたはOracleXADataSourceを、File SystemService Provider(※)に登録

SQLServerDataSourceを、File SystemService Provider(※)に登録

org.postgresql.jdbc2.optional.ConnectionPool(JDBC2.0の場合)またはorg.postgresql.jdbc3.Jdbc3ConnectionPool(JDBC3.0の場合)を、File SystemService Provider(※)に登録

(※) File System Service Providerは、米国Sun Microsystems.Inc.が提供するJNDIのサービスプロバイダです。
 注3)
 JDBCコネクションの自動再接続機能は、DBMSの種別がOracle、Microsoft(R) JDBCドライバを使用したSQL ServerまたはPostgreSQLのデータソースを使用する場合に有効です。設定は、Interstage管理コンソールの[ワークユニット] > “ワークユニット名” > [環境定義]タブで行ってください。isj2eeadminコマンドを使用して設定することもできます。
 以下に、それぞれのデータソースを使用した場合の条件を示します。

項目

Oracle

SQL Server

PostgreSQL

接続方法

JDBC2.X(データソース接続)
Interstageがコネクションをプーリングする。
(OracleConnectionPoolDataSourceを使用する。)

JDBC2.X(データソース接続)
Microsoft(R) JDBCドライバを使用する。

JDBC2.0またはJDBC3.0
Interstageがコネクションをプーリングする。

トランザクション種別

分散トランザクション機能を使用しない。

分散トランザクション機能を使用しない。

分散トランザクション機能を使用しない。


なお、Symfowareの場合は、Connection Managerの機能を使用することで、データベースサーバのダウンおよび通信回線の異常発生時にも同等の運用を行うことが可能です。
Connection Managerの詳細については、Connection Managerのマニュアル“Connection Managerユーザーズガイド”を参照してください。
 注4)
 事前コネクト数を1以上に設定した場合、IJServer起動時にDBMSへ接続しますので対象のDBMSは起動されている必要があります。

SQLServerとPostgreSQLは、クライアント機能を使用してリモート接続する場合のみのサポートとなります。

モニタリング情報

 Interstage管理コンソールでは、運用中のIJServerの稼動情報を表示します。出力される情報により、性能のボトルネックの検出や、性能チューニングの効果の確認ができます。

 以下の情報が出力されます。出力される情報の詳細は、Interstage管理コンソールのヘルプを参照してください。

Interstage Traffic Director連携時の注意事項

 Interstage Traffic Directorを利用して、IJServerとWebサーバを分離して運用するシステムの負荷分散をする場合、故障監視用のコネクション(スレッド)が必要となります。
 この場合、IJServerの同時処理数を設定するときは実際の同時処理数に監視用の数を考慮してください。設定は以下になります。

設定する同時処理数 = 実際の同時処理数 + 1(監視用)

 なお、Interstage Traffic Directorの常設コネクション数を設定する場合は、実際の同時処理数を設定してください(監視用の数は加算しないでください)。常設コネクション数については、Interstage Traffic Directorのマニュアルを参照してください。


目次 索引 前ページ次ページ

Copyright 20078 FUJITSU LIMITED