セキュリティ   ログ   キャッシュ   ネットワーク   圧縮   その他

ネットワークのパフォーマンスアップ

ネットワークを効率的に使用してパフォーマンスアップするための Tips を紹介します。
注)主に x86 Linux および Apache の組み合わせで動作確認した結果をもとにしています。すべての OS および Apache の Version での動作を保証するものではありません。
更新 キーワード 方法
2015/02 KeepAlive Apache の設定ファイルで KeepAlive を on にする方法があります。
接続確立処理の単位がファイル単位から複数のファイルをまとめた単位に変更されます。
ただし、Apache のマニュアルを確認して開発環境などで事前に動作検証してください。
設定項目推奨値備考
KeepAliveTimeout 1ページ当たりの平均的な転送時間(秒)+α 数秒程度の小さめの値にしてください。 大きな値にすると、Apache がリソースを消費する可能性があります。
MaxKeepAliveRequests 1ページ当たりの平均的なファイル数+α ページ上の画像数などに影響されます。 ゼロ(無制限)を避け、なおかつ過大ではない値に調整しましょう。
(参考) Webサーバの最適化
2015/07 非同期読み込み script タグの src 属性で js ファイルを指定して読み込んでいる場合、async 属性も指定できます。
async 属性を指定することにより、ページを表示するための HTML の解析処理とは非同期で Web サーバーから js ファイルを読み込むことができます。
その結果、ネットワーク回線の空き時間を有効活用し、ページ全体の表示までかかる時間を短縮することができます。
async 属性を指定しない場合、Web サーバーからブラウザへの js ファイル読み込みが完了後、ページを表示するための HTML 解析処理が継続されます。
(注意) jQuery のように、async 属性を指定すると動作しなくなるライブラリーもあります。

2017/01 TCP ウィンドウ TCP バッファー(TCP ウィンドウ)サイズの設定により、使用効率を改善できる場合があります。
1) バッファーサイズの計算例を示します。
調査項目単位項目の意味
Bandwidth ビット/秒(bps) 1Gbps 使用するネットワークの帯域幅。 8 で割ると一秒当たりのバイト数になります。
RTT 最大10ms
平均 2ms
Round-Trip Time の略語。 通信相手に信号やデータを発信してから、応答が帰ってくるまでにかかる時間。 ping コマンドで調査できます。
瞬間的な遅延にも対応するサイズ = (1 *1000*1000*1000)ビット * 0.01秒 / 8 = 1250000バイト(約 1.2Mバイト)
平均的な RTT に対応するサイズは、同様に 0.002秒を使用して計算すると、250000 バイト(約 244Kバイト)
なお、計算値を過信せずに、設定値を何回か変えながら最適値を探ると良いでしょう。および、クライアント側のバッファーサイズが適切かも確認しましょう。

2) 計算したバッファーサイズを、httpd.conf の ReceiveBufferSize および SendBufferSize に設定します。
これらの設定は、OS の設定値を上書きします。OS の設定値をそのまま使用する場合には、それぞれの項目にゼロを設定します。 または設定項目名を除去することにより、デフォルト値のゼロ扱いになります。
OS の設定については、OS の種類及びバージョンにより、それぞれ設定方法が異なります。

2017/01 TCP ウィンドウ IBM i の場合、CHGTCPA コマンドで OS の TCP バッファーサイズを設定します。
OS のバージョンが V7R1 の場合を例にして説明します。
1) CHGTCPA コマンド で F4 キーを押して下記の2項目の現在値を表示させます。
項目単位デフォルト値最小値最大値
受信バッファー・サイズ(TCPRCVBUF) バイト 65535
(64Kバイト から 1バイト引く)
512
(0.5Kバイト)
8388608
(8Mバイト)
送信バッファー・サイズ(TCPSNDBUF)

2) 設定値を変更し、パフォーマンスに影響があるかどうか一定期間観察します。

2015/02 TCP ウィンドウ クライアントが Windows の場合、コマンドプロンプトでネットワークの設定を改善できる場合があります。
Windows 7 SP1 の場合を例にして説明します。
1) コマンドプロンプトで netsh int tcp show global を実行します。 通常は、「受信ウィンドウ自動チューニング レベル」が normal のはずです。
2) コマンドプロンプトのアイコンを右クリックして「管理者として実行」を選択し、次のコマンドを実行します。
netsh interface tcp set global autotuninglevel=highlyrestricted
3) 再度 netsh int tcp show global を実行すると、「受信ウィンドウ自動チューニング レベル」が highlyrestricted に変更されます。 この変更により、ネットワークのパフォーマンスが改善する場合があります。

(参考) [Windows 7編]ネットワーク設定を標準で使ってはいけない
2017/02 TIME_WAIT TCP 接続では、送信終了の合図 (FIN) を受け取ると受信側は TCP 接続を TIME_WAIT 状態にし、合図を受け取ったことを送信側に返信してしばらく待機します。 その後何も受信しない場合、一定の秒数で CLOSED 状態にします。

接続頻度が高い Web サーバーの場合、netstat コマンドを実行すると、 TCP 接続が TIME_WAIT (待機)の状態のまま多数残っていることがあります。 TIME_WAIT 状態から CLOSED 状態に変更する秒数を短かめに変更することにより、減少させることができる場合があります。 これにより、ネットワークのリソースの有効活用につながります。

OS の種類及びバージョンにより、それぞれ設定方法が異なります。 例として IBM i OS のバージョンが V7R1 の場合を例にして説明します。

1) CHGTCPA コマンド で F4 キーを押して下記の項目の現在値を表示させます。
項目単位デフォルト値最小値最大値
TCP待ち時間タイムアウト(TCPCLOTIMO) 120
(2分)
0 14400
(4時間)

2) 設定値を短めの値、例えば 60 秒や 30 秒などに変更し、データ欠落などの異常が発生しないことを一定期間観察します。
ゼロにすることは可能ですがおすすめしません。もしデータ欠落などの異常が発生するようになった場合、TIME_WAIT から CLOSED に変化するまでの待ち時間を長めに調整します。
2017/02 DNS 問合せを減らす 1) HostnameLookups off にします。on にすると、アクセスログの出力のたびに IP アドレスからドメイン名を解決しようとします。

2) Allow from (IP アドレスやドメイン名)、および Deny from (IP アドレスやドメイン名) の後にコメントを書かないようにします。
コメントとみなされず、ドメイン名とみなされて DNS への無駄な問い合わせが増加する場合があります。
コメントは、何かの記述の後に書くのを避け、コメントだけの行として書くようにしましょう。