10. 通信に関するチューニング

ブラウザからWebサーバを経由しAPサーバにアクセスする場合の通信に関するチューニングについて説明します。

 
10.1. TCP/IPに関する設定について

全ての通信の基本であるOSのTCP/IPに関する設定について説明します。

概要

TCP/IPに関する最も重要な設定は、送信タイムアウト時間KeepAliveの設定です。例えば、通信相手のサーバマシンの電源が落ちて、TCP/IPの切断処理が行われないままとなった場合、クライアントでは、送信タイムアウト時間KeepAliveのどちらかの設定によって障害が検出されるまで、通信できない状態になります。

大抵の場合、送信タイムアウト時間の設定によって、長くて10分程度で障害を検出することができます。ただ、稀に受信待ちとなった場合には、KeepAliveのOSのデフォルト設定で約2時間障害を検出できません。

KeepAliveの設定は、サーバ側で無効なコネクションを破棄するために利用することがより一般的です。

システムの障害復旧時間の要件に応じて、これらの設定のチューニングを行ってください。

OSの設定方法

設定内容や設定方法は、次に示す通り、OS毎に異なります。詳細については、各OSのリファレンスをご覧ください。

HP-UXの場合)

/etc/rc.config.d/nddconf に次のように設定します。

送信タイムアウト時間(データ送信時):

  TRANSPORT_NAME[num]=tcp

  NDD_NAME[num]=tcp_ip_abort_interval

  NDD_VALUE[num]=600000

送信タイムアウト時間(接続要求時):

  TRANSPORT_NAME[num]=tcp

  NDD_NAME[num]=tcp_ip_abort_cinterval

  NDD_VALUE[num]=75000 

KeepAlive:

  次のデフォルトの設定では、tcp_ip_abort_intervalの値を加えた2時間10分で障害を検出します。

  TRANSPORT_NAME[num]=tcp

  NDD_NAME[num]=tcp_keepalive_interval

  NDD_VALUE[num]=7200000

Linuxの場合)

/etc/sysctl.conf に次のように設定します。

送信タイムアウト時間(データ送信時):

  次のデフォルトの設定では、13〜30分で障害を検出します。

  net.ipv4.tcp_retries2 = 15 

送信タイムアウト時間(接続要求時):

  net.ipv4.tcp_syn_retries = 5 

KeepAlive:

  次のデフォルトの設定では、7200秒 + 75 x 9秒で、約2時間11分で障害を検出します。

  net.ipv4.tcp_keepalive_intvl = 75

  net.ipv4.tcp_keepalive_proves = 9

  net.ipv4.tcp_keepalive_time = 7200

Solarisの場合)

/etc/system に次のように設定します。

送信タイムアウト時間(データ送信時):

  set tcp:tcp_ip_abort_interval = 480000

送信タイムアウト時間(接続要求時):

  set tcp:tcp_ip_abort_cinterval = 180000

KeepAlive:

  次のデフォルトの設定では、tcp_ip_abort_intervalを加えた2時間8分で障害を検出します。

  set tcp:tcp_ip_keepalive_interval = 7200000

Windowsの場合)

レジストリHKEY_LOCAL_MACHINE\System\CurrentControlSet\services\Tcpip\Parametersキーの値を次のように設定します。

送信タイムアウト時間(データ送信時):

次の設定では、アダプタ毎のレジストリ値TcpInitialRTTの値が3000ミリ秒である場合、

3 + (3 x 2) + (6 x 2) + (12 x 2) + (24 x 2)秒で、約93秒で障害を検出します(リトライする度に、リトライの間隔が直前の間隔の2倍になります)。

TcpMaxDataRetransmissions

REG_DWORD

5

送信タイムアウト時間(接続要求時):

次の設定では、アダプタ毎のレジストリ値TcpInitialRTTの値が3000ミリ秒である場合、

3 + (3 x 2) + (6 x 2)秒で、約21秒で障害を検出します(リトライする度に、リトライの間隔が直前の間隔の2倍になります)。

TcpMaxConnectRetransmissions

REG_DWORD

3

KeepAlive:

  次のデフォルトの設定では、7200秒 + 5x1000ミリ秒で、約2時間で障害を検出します。

KeepAliveTime

REG_DWORD

7200000

KeepAliveInterval

REG_DWORD

1000

TcpMaxDataRetransmissions

REG_DWORD

5

次のレジストリ値TcpInitialRTTは、設定場所やデフォルト値がOS毎に異なります。

デフォルト値についてはOS毎に確認して頂く必要がありますが、TcpMaxConnectRetransmissionsやTcpMaxDataRetransmissionsといった再送回数のチューニングだけを行うようにすれば、設定場所まで意識する必要はありません。

TcpInitialRTT

REG_DWORD

3000

KeepAliveを有効にするための設定

WebOTXでは、デフォルトの設定でKeepAliveの動作が有効になります。このため、設定変更を行う必要はありません。ここでは、WebOTXで利用することが多いOracleクライアントでの設定方法について説明します。詳細については、Oracleのリファレンスを参照してください。

Oracle thinドライバでKeepAliveを有効にするための設定

Oracle OCIドライバおよびC++アプリケーションでKeepAliveを有効にするための設定

(*)Windowsの初期値はOSにより様々です。OSのリファレンスやホームページで確認してください。