第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 を使用して有効にできます。
管理コンソールを使用して有効にする場合:
-
Configuration
Subsystems Web/HTTP - Undertow Servlet/JSP と選択し、表示 をクリックします。 - 設定するサーブレットコンテナーを選択し、表示 をクリックします。
- JSP を選択し、属性 下の Edit をクリックします。
- 有効にするオプションのチェックボックスを選択し、Save をクリックします。
-
Configuration
管理 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 を使用してリスナーオプションを設定できます。
管理コンソールを使用して設定する場合:
-
Configuration
Subsystems Web/HTTP - Undertow HTTP と選択し、表示 をクリックします。 - HTTP Server タブを選択して設定するサーバーを選択し、表示 をクリックします。
- 左側のメニューで、設定するリスナーのタイプ (例: HTTP Listener) を選択し、表のリスナーを選択します。
- 属性 下の Edit をクリックします。
- 設定するオプションを変更し、Save をクリックします。
-
Configuration
管理 CLI を使用して設定する場合は、以下のコマンドを使用します。
/subsystem=undertow/server=SERVER_NAME/LISTENER_TYPE=LISTENER_NAME:write-attribute(name=OPTION_NAME,value=OPTION_VALUE)
default-server
Undertow サーバーのdefault
HTTP リスナーに対し、max-connections
を100000
に設定するには、以下のコマンドを使用します。/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=max-connections,value=100000)