DB 接続のパフォーマンスチューニングをするにあたって見るべきカーネルパラメータについて
各種パラメータの確認方法
$ /sysctl -a
ip_local_port_range
概要
Linuxシステムにおけるカーネルパラメータの一つ。
TCP/IPネットワークスタックで使用されるローカルポートの範囲を定義し、主にアウトバウンド(発信)接続に対して使用されるエフェメラル(一時的)ポートの範囲を指定するもの。
全てのエフェメラルポートを使い切るとどうなるのか?
以下事象が発生する可能性がある
- 新規接続が失敗する
- システムパフォーマンスの低下
tcp_max_tw_buckets
概要
システム上で同時に存在できる TIME_WAIT 状態の TCP セッションの最大数を制御することができるパラメータ。
TIME_WAIT 状態とは?
- TIME_WAIT は、TCP 接続が正常に閉じられた後にセッションが一時的に入る状態
- この状態は、遅延したパケットが新しい接続に干渉しないようにするために存在する
- TIME_WAIT 状態のセッションは、通常、約 60 秒間(2倍の Maximum Segment Lifetime, MSL)保持される
tcp_tw_reuse
概要
このパラメータを有効にすると、TIME_WAIT 状態の TCP ソケットが新しい接続で再利用されることが許可される。これは、高速なクライアント-サーバー通信が頻繁に行われる環境で有用。
net.core.somaxconn
概要
TCP サーバーが受け入れることができる接続要求のキューの最大長。
具体的には、クライアントがサーバーに接続を試みる際、TCP 3ウェイハンドシェイクの一環として初めに「SYN」パケットを送ります。サーバーはこれを受け取り、「SYN-ACK」を返す前に、この接続要求をキューに格納します。
SYN とは?
SYN(Synchronize Sequence Number)は、TCP/IP ネットワークプロトコルにおいて使用される重要な概念で、特に TCP(Transmission Control Protocol)の3ウェイハンドシェイクプロセスで使われます。このプロセスは、TCP接続を開始する際に行われるものです。
3ウェイハンドシェイクプロセスとは?
TCP/IPネットワークにおいてクライアントとサーバー間で安定した接続を確立する際に使用され、以下の三つのステップで構成されている。
- SYN(Synchronize Sequence Number)の送信
- SYN-ACK(Synchronize-Acknowledgment)の送信
- ACK(Acknowledgment)の送信
SYN(Synchronize Sequence Number)の送信
クライアントは、サーバーへ接続を開始したい意志を示すためにSYNパケットを送信する。このパケットには、クライアントが通信の開始に使用するシーケンス番号が含まれている。
SYN-ACK(Synchronize-Acknowledgment)の送信
サーバーは、クライアントからのSYNパケットを受信したら、それを確認するためにSYN-ACKパケットを送り返す。このパケットには、サーバーのシーケンス番号と、クライアントのSYNパケットのシーケンス番号に対する確認応答(ACK)が含まれている。
ACK(Acknowledgment)の送信
最後に、クライアントはサーバーからのSYN-ACKパケットを受信したことを確認し、ACKパケットをサーバーに送信する。これにより、両方の方向での接続が確立され、データの送受信が可能になる。
参考文献