Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

第9章 Undertow サブシステムの調整

JBoss EAP 7 で導入された非ブロッキング I/O undertow サブシステムは、JBoss EAP 6 の web サブシステムよりも大幅にパフォーマンスが改善されました。ご使用の環境で undertow サブシステムを調整するには、バッファーキャッシュ の設定、JSP 設定、および リスナー の設定などを行います。

9.1. バッファーキャッシュ

バッファーキャッシュは、undertow サブシステムによって処理される静的ファイルをキャッシュするために使用されます。これには、イメージ、静的 HTML、CSS、および JavaScript ファイルが含まれます。各 Undertow サーブレットコンテナーにデフォルトのバッファーキャッシュを指定できます。サーブレットコンテナーのバッファーキャッシュを最適化すると、静的ファイルに対する Undertow のパフォーマンスを向上できます。

バッファーキャッシュのバッファーは固定のサイズで、リージョンに割り当てられます。各バッファーキャッシュには設定可能な属性が 3 つあります。

buffer-size
各バッファーのバイト単位のサイズ。デフォルトは 1024 バイトです。Red Hat は、最も大きな静的ファイル全体を保存できるバッファーサイズに設定することを推奨します。
buffers-per-region
リージョンごとのバッファー数。デフォルトは 1024 です。
max-regions
バッファーキャッシュに割り当てられるメモリーの最大容量を設定する、リージョンの最大数。デフォルトは 10 リージョンです。

バッファーキャッシュによって使用されるメモリーの最大容量を算出するには、バッファーサイズ、リージョンごとのバッファー数、およびリージョンの最大数を掛けます。たとえばすべてがデフォルト値である場合、1024 (バイト単位のバッファーキャッシュ) * 1024 (リージョンごとのバッファー数) * 10 (リージョン数) = 10 MB になります。

バッファーキャッシュは、静的ファイルのサイズと、開発環境での想定負荷のテスト結果を基にして設定します。パフォーマンスの影響を判断するとき、バッファーキャッシュのパフォーマンスと、使用されるメモリーのバランスを考慮してください。

管理 CLI を使用したバッファーキャッシュの設定手順は、JBoss EAP『設定ガイド』の「バッファーキャッシュの設定」を参照してください。

9.2. JSP 設定

JSP ページが Java バイトコードにコンパイルされる方法を最適化する、Undertow サーブレットコンテナーの JSP 設定オプションがあります。

generate-strings-as-char-arrays
JSP に多くの String 定数が含まれる場合、このオプションを有効にすると String 定数を char アレイに変換してスクリプトレットを最適化します。
optimize-scriptlets
JSP に多くの String 連結が含まれる場合、このオプションを有効にすると各 JSP リクエストの String 連結を削除してスクリプトレットを最適化します。
trim-spaces
JSP に多くの空白が含まれる場合、このオプションを有効にすると HTTP リクエストの空白を減らして、HTTP リクエストのペイロードを削減します。

JSP オプションの設定

これらの Undertow JSP 設定オプションは、管理コンソールまたは管理 CLI を使用して有効にできます。

  • 管理コンソールを使用して有効にする場合:

    1. ConfigurationSubsystemsWeb/HTTP - UndertowServlet/JSP と選択し、表示 をクリックします。
    2. 設定するサーブレットコンテナーを選択し、表示 をクリックします。
    3. JSP を選択し、属性 下の Edit をクリックします。
    4. 有効にするオプションのチェックボックスを選択し、Save をクリックします。
  • 管理 CLI を使用して有効にする場合は、以下のコマンドを使用します。

    /subsystem=undertow/servlet-container=SERVLET_CONTAINER/setting=jsp/:write-attribute(name=OPTION_NAME,value=true)

    たとえば、default サーブレットコンテナーの generate-strings-as-char-arrays を有効にするには、以下のコマンドを使用します。

    /subsystem=undertow/servlet-container=default/setting=jsp/:write-attribute(name=generate-strings-as-char-arrays,value=true)

9.3. リスナー

アプリケーションと環境に応じて、特定ポートのトラフィックなどの一部のタイプのトラフィックに固有する複数のリスナーを設定し、各リスナーにオプションを設定することができます。

以下は、HTTP、HTTPS、および AJP リスナー上に設定できるパフォーマンス関連のオプションになります。

max-connections

リスナーが処理可能な最大同時接続数。デフォルトではこの属性は未定義で、接続数の制限はありません。

このオプションを使用すると、リスナーが処理できる接続数の上限を設定できます。これは、リソースの使用度を制限するのに役立つことがあります。この値を設定するには、ワークロードとトラフィックタイプを考慮する必要があります。以下の no-request-timeout も参照してください。

no-request-timeout

接続が閉じられるまでに接続がアイドル状態でいられる期間 (ミリ秒単位)。デフォルトの値は 60000 ミリ秒 (1 分) です。

接続の効率を最適化するためにご使用の環境でこのオプションを調整すると、ネットワークパフォーマンスの向上に役立ちます。アイドル接続が途中で閉じられた場合、接続を再確立するオーバーヘッドが発生します。アイドル接続の開かれている期間が長すぎると、リソースが不必要に使用されます。

max-header-size

バイト単位の HTTP リクエストヘッダーの最大サイズ。デフォルトは 1048576 (1024KB) です。

ヘッダーサイズを制限すると、一部の DOS 攻撃の防止に役立ちます。

buffer-pool

リスナーに使用する io サブシステムのバッファープールを指定します。デフォルトでは、すべてのリスナーが default バッファーリスナーを使用します。

このオプションを使用して各リスナーが一意のバッファープールを使用するよう設定したり、複数のリスナーが同じバッファープールを使用するよう設定できます。

worker

undertow サブシステムは io サブシステムに依存して XNIO ワーカーを提供します。このオプションはリスナーが使用する XNIO ワーカーを指定します。デフォルトでは、リスナーは default ワーカーを io サブシステムで使用します。

異なるワーカーリソースを特定のネットワークトラフィックに割り当てできるようにするため、特定のワーカーを使用するよう各リスナーを設定すると便利であることがあります。

リスナーオプションの設定

管理コンソールまたは管理 CLI を使用してリスナーオプションを設定できます。

  • 管理コンソールを使用して設定する場合:

    1. ConfigurationSubsystemsWeb/HTTP - UndertowHTTP と選択し、表示 をクリックします。
    2. HTTP Server タブを選択して設定するサーバーを選択し、表示 をクリックします。
    3. 左側のメニューで、設定するリスナーのタイプ (例: HTTP Listener) を選択し、表のリスナーを選択します。
    4. 属性 下の Edit をクリックします。
    5. 設定するオプションを変更し、Save をクリックします。
  • 管理 CLI を使用して設定する場合は、以下のコマンドを使用します。

    /subsystem=undertow/server=SERVER_NAME/LISTENER_TYPE=LISTENER_NAME:write-attribute(name=OPTION_NAME,value=OPTION_VALUE)

    default-server Undertow サーバーの default HTTP リスナーに対し、max-connections100000 に設定するには、以下のコマンドを使用します。

    /subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=max-connections,value=100000)