NIO コネクタは,コネクタのチューンに使えるすべての低水準ソケット・プロパティを公開する。
これらの属性のほとんどは JDK のソケット実装に直接リンクしているから,
君は JDK API 文書にその実際の意味を見つけ出すことができる。
原注: JDK のバージョンによっては, setTrafficClass が問題を起こす。
その回避策は [java の] コマンド行に
-Djava.net.preferIPv4Stack=true を追加することである。
| Attribute | Description |
|---|
useSendfile |
(bool) この属性は sendfile 機能を有効または無効にする。デフォルト値は true である。
|
useExecutor |
(bool) true にセットすると,NIO スレッド・プール・エクセキュータを使う。
デフォルト値は true である。
false にセットすると,その実行用スタックに基づくスレッド・プール [a thread pool based
on a stack for its execution] を使う。
一般に, エクセキュータを使うとほんの少し低速な性能が得られるが,
トラフィックが FIFO キュー経由でキューイングされるから,高負荷環境ではより公平に接続が処理される。
true にセットしたとき (デフォルト),最大プール・サイズは maxThreads 属性であり,
最小プール・サイズは minSpareThreads である。
もしも executor
属性が存在して,それが妥当な共有スレッド・プールを指しているならば,この値は無視される。
|
acceptorThreadCount |
(int) 接続を accept するために使われるスレッドの個数。
マルチ CPU マシンっではこの値を増やす。ただし,実際には決して 2 より大きくする必要はないだろう。
また,非 keep alive 接続が多数ある場合も,この値を増やすとよいだろう。
デフォルト値は 1 である。
|
pollerThreadCount |
(int) イベントのポーリングを行うために使われるスレッドの個数。
デフォルト値は 1 である。
それ以上に増やす理由はないはずだが,君自身で実験して結果を見るとよい。
|
pollerThreadPriority |
(int) poller スレッド [ポーリングを行うために使われるスレッド] の優先度。
デフォルト値は java.lang.Thread#NORM_PRIORITY である。
この優先度が何を意味するのか詳しい情報については java.lang.Thread
の JavaDoc を見よ。
|
acceptorThreadPriority |
(int) acceptor スレッド (新しい接続を accept するために使われるスレッド) の優先度。
デフォルト値は java.lang.Thread#NORM_PRIORITY である。
この優先度が何を意味するのか詳しい情報については java.lang.Thread
の JavaDoc を見よ。
|
selectorTimeout |
(int) poller が select() でタイムアウトするまでの,ミリ秒単位の時間。
同じスレッドで接続のクリーンナップが行われるから,この値は重要である。
この値を極端に大きくしてはならない。
デフォルト値は 1000 ミリ秒である。
|
useComet |
(boo) comet サーブレットを許すか否か。デフォルト値は true である。
|
processCache |
(int)
プロトコル・ハンドラは高速化のため Http11NioProcessor オブジェクトをキャッシュする。
この属性はキャッシュされるオブジェクトの個数を指示する。
-1 は無制限を意味する。デフォルトは 200 である。
この値はおおむね maxThreads 値に近い値にセットするとよい。
|
socket.directBuffer |
(bool)
ダイレクト ByteBuffer を使うか,それとも java にマップされた ByteBuffer を使うかのブーリアン値。
デフォルトは false である。
ダイレクト・バッファを使うときは,ダイレクト・メモリ空間に適切な量のメモリを割り付けるように注意する。
Sun の JDK では,例えば -XX:MaxDirectMemorySize=256m のようにする。
|
socket.rxBufSize |
(int) ソケット受信バッファ (SO_RCVBUF) のサイズ (バイト単位)。
デフォルト値は 25188 である。
|
socket.txBufSize |
(int) ソケット送信バッファ (SO_SNDBUF) のサイズ (バイト単位)。
デフォルト値は 43800 である。
|
socket.appReadBufSize |
(int) Tomcat でオープンされる接続はそれぞれ読取り ByteBuffer
および書込み ByteBuffer と関連付けられる。
この属性はこれらのバッファのサイズを制御する。
デフォルトではこの読取りバッファのサイズは 8192 である。
並列性が低い場合,君はこの値を増やしてバッファにより多くのデータを与えてよい。
keep alive 接続の量が多すぎる場合は,この数値を減らすか,ヒープ・サイズを増やすこと。
|
socket.appWriteBufSize |
(int) Tomcat でオープンされる接続はそれぞれ読取り ByteBuffer
および書込み ByteBuffer と関連付けられる。
この属性はこれらのバッファのサイズを制御する。
デフォルトではこの書込みバッファのサイズは 8192 である。
並列性が低い場合,君はこの値を増やしてバッファにより多くのデータを与えてよい。
keep alive 接続の量が多すぎる場合は,この数値を減らすか,ヒープ・サイズを増やすこと。
このデフォルト値はかなり小さい。
もしも君が並列的に何万個もの接続を扱うのでなければ,これをもっと大きくすべきだ。
|
socket.bufferPool |
(int) Nio コネクタは,ソケットへリンクされた要素を保持する NioChannel と呼ばれるクラスを使う。
ガーベジ・コレクションを軽減するため,Nio コネクタはこれらの channel オブジェクトをキャッシュする。
この属性値は,このキャッシュのサイズを指定する。
デフォルト値は 500 である。
これはキャッシュが 500 個の NioChannel オブジェクトを保持することを意味する。
-1 ならば無制限のキャッシュになり,0 ならばキャッシュ無しになる。
|
socket.bufferPoolSize |
(int) NioChannel プールは,オブジェクト [の個数] によってではなく,
サイズによっても [大きさを制限] できる。
サイズは次のように計算される:
NioChannel buffer size = read buffer size + write buffer size
SecureNioChannel buffer size = application read buffer size + application
write buffer size + network read buffer size + network write buffer size
値はバイト単位であり,デフォルト値は 1024*1024*100 (100MB) である。
|
socket.processorCache |
(int) Tomcat はガーベジ・コレクションを軽減するため SocketProcessor オブジェクトをキャッシュする。
この整数値はキャッシュに保つオブジェクトの最大個数を指定する。
デフォルトは 500 である。
-1 ならば無制限のキャッシュになり,0 ならばキャッシュ無しになる。
|
socket.keyCache |
(int) Tomcat はガーベジ・コレクションを軽減するため KeyAttachment オブジェクトをキャッシュする。
この整数値はキャッシュに保つオブジェクトの最大個数を指定する。
デフォルトは 500 である。
-1 ならば無制限のキャッシュになり,0 ならばキャッシュ無しになる。
|
socket.eventCache |
(int) Tomcat はガーベジ・コレクションを軽減するため PollerEvent オブジェクトをキャッシュする。
この整数値はキャッシュに保つオブジェクトの最大個数を指定する。
デフォルトは 500 である。
-1 ならば無制限のキャッシュになり,0 ならばキャッシュ無しになる。
|
socket.tcpNoDelay |
(bool) 標準[実装]の設定 tcpNoDelay と同じ。デフォルト値は false。
|
socket.soKeepAlive |
(bool) ソケットの keep alive 設定 (SO_KEEPALIVE) のブーリアン値。デフォルトは false。
|
socket.ooBInline |
(bool) ソケット OOBINLINE 設定のブーリアン値。デフォルト値は true。
|
socket.soReuseAddress |
(bool) ソケットの reuse address オプション (SO_REUSEADDR) のブーリアン値。デフォルト値は true。
|
socket.soLingerOn |
(bool) ソケットの so linger オプション (SO_LINGER) のブーリアン値。デフォルト値は true。
このオプションは soLingerTime 値とペアである。
|
socket.soLingerTime |
(bool) [← (int) の誤り]
ソケットの so linger オプション (SO_LINGER) の秒単位の値。デフォルト値は 25 秒。
このオプションは soLinger 値とペアである。
|
socket.soTimeout |
(int) ソケットの読取りタイムアウト (SO_TIMEOUT) のミリ秒単位の値。
デフォルト値は 5000 ミリ秒。
|
socket.soTrafficClass |
(byte) ソケットのトラフィック・クラスを表す 0 から 255 までの値,
[デフォルト値は] 0x04 | 0x08 | 0x010。
[java.net.Socket#setTrafficClass(int) を参照。
値の意味は 0x04 (maximize reliability, 信頼性最大), 0x08 (maximize throughput, スループット最大),
0x010 (minimize delay, 遅延最小)
のビット和]
|
socket.performanceConnectionTime |
(int) 性能設定の第1の値。デフォルトは 1,
Socket Performance Options を参照。
|
socket.performanceLatency |
(int) 性能設定の第2の値。デフォルトは 0,
Socket Performance Options を参照。
|
socket.performanceBandwidth |
(int) 性能設定の第3の値。デフォルトは 1,
Socket Performance Options を参照。
|
selectorPool.maxSelectors |
(int) セレクタ競争 (selector contention) を軽減するために,プールで使われるセレクタの最大個数。
コマンド行[オプション] org.apache.tomcat.util.net.NioSelectorShared の値を false
にセットしたときは,このオプションを使う。
デフォルト値は 200。
|
selectorPool.maxSpareSelectors |
(int) セレクタ競争を軽減するために,プールで使われるスペア・セレクタの最大個数。
セレクタがプールに返還されたとき,システムはそれを保持するか,それとも GC されるに任せるかを決定できる。
コマンド行[オプション] org.apache.tomcat.util.net.NioSelectorShared の値を false
にセットしたときは,このオプションを使う。
デフォルト値は -1 (無制限)
|
command-line-options |
次のコマンド行オプションが NIO コネクタに利用可能である:
-Dorg.apache.tomcat.util.net.NioSelectorShared=true|false
デフォルトは true である。
各スレッドごとに1個のセレクタを使いたいならば,この値を false にする。
false にセットしたときは,
selectorPool.maxSelectors 属性を使ってセレクタのプールのサイズを制御できる。
|
oomParachute |
(int) NIO コネクタは,パラシュート (parachute) と呼ばれる OutOfMemoryError 戦略を実装している。
コネクタは,ひとかたまりのデータをバイト配列として保持する。
メモリ不足 (OOM) のときは,このひとかたまりのデータを解放してからエラーを報告する。
これは Java VM に後処理のための十分な余地を与えるだろう。
oomParachute はパラシュート (バイト配列) のバイト単位のサイズを表す。
デフォルト値は 1024*1024(1MB) である。
これは Java ヒープ空間に関する OOM エラーにだけ働き,しかも回復可能かどうかは全く保証されていないことに注意されたい。
もしも Java ヒープ以外で OOM が起きたときは,このパラシュートのしかけは役に立たないだろう。
|