TCP KeepAlive は、 「有効にしておけば接続が安定する」 「TIME_WAITが減る」 と誤解されがちな機能です。
しかし実際には、 使い方を間違えると障害の温床 になることも少なくありません。
本記事では、 TCP KeepAlive の正しい役割と、 実務での設計・設定ポイントを解説します。
目次
TCP KeepAliveとは何か
TCP KeepAlive は、 長時間通信のない接続が生きているか確認する仕組み です。
- 通信が途絶えていないか
- 相手が死んでいないか
を定期的に確認します。
KeepAliveで「できること」「できないこと」
できること
- 死んだ接続の検知
- 半開接続の解消
できないこと
- 短命接続の削減
- TIME_WAITの抑制
KeepAliveが効くケース
- 長時間アイドルな接続
- DBコネクション
- 常時接続のAPI
KeepAliveが意味を持たないケース
- リクエストごとに接続を張る
- 短命TCP接続
- 数秒以内で切れる通信
LinuxのKeepAlive関連パラメータ
現在の設定確認
sysctl net.ipv4.tcp_keepalive_time
sysctl net.ipv4.tcp_keepalive_intvl
sysctl net.ipv4.tcp_keepalive_probes
意味
- tcp_keepalive_time:最初の送信までの時間
- tcp_keepalive_intvl:再送間隔
- tcp_keepalive_probes:試行回数
設定例(一般的なサーバー)
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 5
※ 業務要件により調整が必要です。
KeepAliveとアプリケーション設定の関係
OSのKeepAliveだけでは不十分なことが多く、
- HTTP KeepAlive
- DBコネクションプール
との組み合わせが重要です。
KeepAliveを誤用した典型トラブル
- 接続が切れずリソース枯渇
- LBのidle timeoutと不整合
- アプリ側タイムアウトと衝突
設計時に意識すべきポイント
- 通信パターンを把握
- 短命か長命かを切り分け
- OS・LB・アプリのtimeout整合
やってはいけない設定
- 理由なくKeepAlive有効化
- timeoutを極端に長くする
- 問題の根本原因を隠す
まとめ
TCP KeepAlive は 万能な通信安定化機能ではありません。
通信設計を理解したうえで、 適切な場面にだけ使うことが、 障害を防ぐ最大のポイントです。
あわせて読みたい


短命TCP接続が大量発生する設計ミス集【TIME_WAIT多発の根本原因】
Linuxサーバーやアプリケーションで 短命TCP接続が大量発生 すると、 TIME_WAIT増加、ポート枯渇、CPU負荷上昇など、さまざまな問題を引き起こします。 本記事では「な…
あわせて読みたい


TIME_WAITが大量発生する原因と対策
Linuxサーバーでネットワーク遅延や接続エラーが増えた際、 ss や netstat を確認すると TIME_WAIT が大量に残っているケースがあります。 TIME_WAIT自体は異常ではあり…
あわせて読みたい


FIN_WAIT_2が残り続ける原因と対処【TCP接続異常の正体】
LinuxサーバーでTCP接続を監視していると、 FIN_WAIT_2 が大量に残り続けるという状態に遭遇することがあります。 この状態は、 接続数の異常増加 ポート枯渇 通信遅延 …
あわせて読みたい


LinuxでTCP接続数が増え続ける原因と対策【調査から設計改善まで】
Linuxサーバーを運用していると、 「TCP接続数が時間とともに増え続け、減らない」 という現象に遭遇することがあります。 この状態を放置すると、 通信遅延 エフェメラ…
