アプリケーション
|
配備するアプリケーションについて、次の要件を決定します。
|
ハードウェア
|
|
オペレーティングシステム
|
|
ネットワークインフラストラクチャー
|
|
バックエンドおよびその他の外部データソース
|
その分野の専門家またはベンダーの協力を得て、これらのデータソースが適切に設定されていることを確認します。
|
システムの変更/設定
|
-
パフォーマンステストまたはストレステストを実行する前に、/etc/system および Linux でこれに相当するファイルの変更が完了していることを確認します。
-
TCP/IP 設定の変更が完了していることを確認します。
-
システムのデフォルトでは、多くのサービスが事前に設定されています。これらすべてのサービスが実行のために必要とは限りません。システムリソースを節約するために、必要でないサービスは無効にします。
-
Solaris では、Setoolkit を使用してシステムの動作を調べます。出現したフラグをすべて解決します。
詳細は、『Sun GlassFish Enterprise Server 2.1 Performance Tuning Guide』を参照してください。
|
Installation
|
|
HADB の設定
|
|
Application Server の設定
|
|
ロードバランサの設定
|
|
Java 仮想マシンの設定
|
-
最初は、最小および最大のヒープサイズを同じ値に設定し、各インスタンスには 1G バイト以上を設定します。
-
詳細は、 Java Hotspot VM Options を参照してください。
-
Application Server の複数のインスタンスを実行するときは、プロセッサセットの作成を検討し、Application Server をそのセットにバインドします。これは、古い世代のスイープに CMS コレクタが使用される場合に効果的です。
|
ロードバランサのタイムアウト設定
|
-
Response-time-out-in-seconds - Application Server インスタンスが正常でないと宣言するまでにロードバランサが待機する時間。この値は、アプリケーションの応答時間に基づいて設定します。この値が大きすぎると、Web Server およびロードバランサプラグインは、Application Server インスタンスが正常でないと記録するまで長時間待機します。この値が小さすぎる場合に Application Server の応答時間がこのしきい値を超えると、インスタンスが正常でないと誤って記録されることになります。
-
Interval-in-seconds - インスタンスが正常に戻ったかどうかを確認するために、正常でないインスタンスをチェックする間隔 (秒)。この値が小さすぎると、ロードバランサプラグインから Application Server インスタンスへの不必要なトラフィックが発生します。値が大きすぎると、正常に戻ったインスタンスへの要求のルーティングが遅れます。
-
Timeout-in-seconds - 健全性検査要求に対して応答が取得される間隔。健全性検査が確実に成功するように、クラスタ内のシステム間のトラフィックに基づいてこの値を調整します。
詳細は、『Sun GlassFish Enterprise Server 2.1 高可用性 (HA) 管理ガイド』の第 4 章「HTTP 負荷分散の設定」を参照してください。
|
HADB のタイムアウト設定
|
-
sql_client_timeout - アイドル状態のクライアントに対する SQLSUB の待ち時間。たとえば、ログオンしたクライアントは何らかの要求を送信したあと、ユーザー入力を待機します。アイドル状態が 30 分を超えたクライアントは死んでいるものとみなされ、セッションは終了されます。この値を小さく設定しすぎると、SQL セッションが完了する前に終了させてしまう可能性があります。この値を大きく設定しすぎると、アイドル状態ではないがすでに終了している SQL セッションがリソースを占有することがあります。その結果として、ほかの SQL クライアントのログオンが妨げられる可能性があります。この変数を調整するときは、nsessions の設定も考慮します。HADB の JDBC 接続プールの steady-pool-size が max-pool-size よりも大きい場合、idle-timeout-in-seconds を sql_client_timeout よりも小さく設定して、HADB が接続を閉じる前に Application Server 自体が接続を閉じるように設定できます。デフォルト値は 1800 秒です。
-
lock_timeout - トランザクションがデータへのアクセスを待機する最大時間 (ミリ秒)。この時間を超過すると、トランザクションは「The transaction timed out.」というエラーメッセージを生成します。このようなタイムアウトは、ほかのトランザクションが保持しているロック (デッドロック) を待機するトランザクションが原因で発生し、サーバーの負荷を増大させます。この値を 500 ミリ秒未満に設定しないでください。サーバーログに「transaction timed out」のメッセージが記録されている場合は、この値を大きくしてください。ロックのタイムアウト値を設定するには、HADB の JDBC 接続プールに <property name=lockTimeout value="x"\> というプロパティーを追加します。デフォルト値は 500 ミリ秒です。
-
Querytimeout - クエリーの実行を HADB が待機する最大時間 (ミリ秒)。クエリーのタイムアウトを示す例外がサーバーログに頻繁に記録されている場合は、この値を大きくすることを検討します。この値を設定するには、HADB の JDBC 接続プールに <property name=QueryTimeout value="x"\> というプロパティーを追加します。デフォルト値は 30 秒です。
-
loginTimeout - クライアントが HADB へのログインを待機する最大時間 (秒)。この値を設定するには、HADB の JDBC 接続プールに <property name=loginTimeout value="x"\> というプロパティーを追加します。デフォルト値は 10 秒です。
-
MaxTransIdle - クライアントに応答を送信してから次の要求を受信する間に、トランザクションがアイドル状態でいられる最大時間 (ミリ秒)。この値を変更するには、HADB の JDBC 接続プールに <property name=maxtransIdle value="x"\> というプロパティーを追加します。デフォルト値は 40 秒です。
詳細は、 『Sun Java System Application Server パフォーマンスチューニングガイド』を参照してください。
|
Application Server のタイムアウト設定
|
-
Max-wait-time-millis - プールからの接続取得を待機し、超過した場合に例外をスローする時間。デフォルトは 6s です。持続されるデータのサイズが 50K バイトを超える高負荷システムでは、この値の変更を検討します。
-
Cache-idle-timeout-in-seconds - 非活性化されるまでに EJB がキャッシュ内でアイドル状態でいられる時間。エンティティー Bean およびステートフルセッション Bean のみに適用されます。
-
Removal-timeout-in-seconds - EJB が非活性化状態 (バックアップストア内でアイドル状態) にとどまる時間。デフォルト値は 60 分です。この値は、SFSB フェイルオーバーの必要性に基づいて調整します。
これらすべての値を調整するときは、HADB の JDBC 接続プールの max-wait-time-in-millis の設定に注意を払います。詳細は、『Sun GlassFish Enterprise Server 2.1 高可用性 (HA) 管理ガイド』の「JDBC 接続プールの設定」を参照してください。
|
VM ガベージコレクション (GC) のチューニング
|
ガベージコレクションが 4 秒以上一時停止すると、セッション状態を HADB に持続する際に一時的な問題の原因となる可能性があります。この問題を避けるには、VM ヒープを調整します。データ持続の失敗を 1 回も許容できない場合や、システムが高負荷状態でないときは、CMS コレクタまたはスループットコレクタを使用します。
これらのコレクタを有効にするには、次のオプションを追加します。
<jvm-options>-XX:+UseConcMarkSweepGC</jvm-options>
このオプションはスループットを低下させる場合があります。
|