9. 通信

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

9.1. TCP/IPに関する設定

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

9.1.1. 概要

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

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

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

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

9.1.2. 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

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

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

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

JDBCデータソースのデータソース名[dataSourceName]に設定する接続文字列として、次の形式(例)で設定してください。

"jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx.xxx)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))(ENABLE=BROKEN))"

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

Oracle Net Serviceの tnsnames.oraファイルに、次の形式(例)で設定してください。

ORCL = (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx.xxx)(PORT=1521))(CONNECT_DATA= (SERVICE_NAME=ORCL))(ENABLE=BROKEN))

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

9.2. クライアント(Web ブラウザ)に関する設定

Web ブラウザからリクエストを送信後、応答までのタイムアウト値を設定します。本設定は通常ブラウザ側で行います。使用するブラウザにより、設定箇所が異なります。詳細は各ブラウザのマニュアルを参照してください。

Internet Explorer を使用した場合、以下のレジストリキーに対しReceiveTimeout という DWORD 値を追加して、値の データを <秒数>*1000 に設定します。Internet Explorer 7 の場合、タイムアウト時間は 60分です。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings