Linuxサーバーを運用していると、 「TCP接続数が時間とともに増え続け、減らない」 という現象に遭遇することがあります。
この状態を放置すると、
- 通信遅延
- エフェメラルポート枯渇
- アプリケーション停止
といった重大障害につながります。
本記事では、TCP接続数が増え続ける原因を OS視点・アプリ視点の両方から整理し、 正しい調査手順と対策を解説します。
目次
TCP接続数が増え続けるとはどういう状態か
以下のような状態を指します。
- ESTABLISHED が減らない
- TIME_WAIT / CLOSE_WAIT が増加し続ける
- 再起動しない限り回復しない
まず確認すべきコマンド
現在のTCP状態別接続数
ss -ant | awk '{print $1}' | sort | uniq -c
ポート別接続数
ss -ant '( sport = :80 )' | wc -l
原因① TIME_WAITが大量発生している
概要
短命TCP接続が大量に発生している。
典型例
- HTTP KeepAlive 無効
- APIを毎回新規接続
対策
- KeepAlive有効化
- コネクションプール導入
原因② CLOSE_WAITが増え続ける
概要
アプリケーションが socket close を呼んでいない。
確認
ss -ant | grep CLOSE-WAIT
対策
- アプリ側の修正
- ライブラリ更新
※ OS側では解決できません。
原因③ アプリのコネクションリーク
概要
接続を使い回さず作りっぱなし。
典型例
- DB接続リーク
- HTTPクライアント誤使用
対策
- 接続数制限
- プール設定見直し
原因④ エフェメラルポート枯渇
概要
TIME_WAITが多すぎて新規接続不可。
確認
cat /proc/sys/net/ipv4/ip_local_port_range
対策
sysctl -w net.ipv4.ip_local_port_range="10000 65535"
sysctl -w net.ipv4.tcp_tw_reuse=1
原因⑤ 負荷分散設計の問題
概要
LB配下で接続が偏る。
対策
- KeepAlive調整
- LB設定見直し
OSチューニングでやってよいこと・悪いこと
やってよい
- ポート範囲拡張
- reuse設定
やってはいけない
- 根本原因を無視
- timeout極端短縮
障害対応時の切り分けフロー
- 状態別接続数確認
- 増えている状態を特定
- アプリ or OS 切り分け
- 設計レベルで対策
まとめ
TCP接続数が増え続ける問題は、 「OSの問題ではなく設計の問題」であることがほとんどです。
状態を正しく見極め、 原因に応じた対策を取ることで、 再起動に頼らない安定運用が可能になります。
あわせて読みたい


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


CLOSE_WAITが増え続ける原因とアプリ側の修正ポイント【Linux実務解説】
Linuxサーバーで CLOSE_WAIT が増え続けて減らない 状態は、 ネットワーク障害に見えて、実際にはほぼ100%アプリケーションの問題です。 本記事では、CLOSE_WAITが発生…
あわせて読みたい


エフェメラルポート枯渇の見抜き方と対処法【TIME_WAITとの関係を理解する】
Linuxサーバーで「突然外部通信ができなくなった」「再起動すると一時的に直る」 といった障害の原因として、見落とされがちなのが エフェメラルポート枯渇です。 本記…
あわせて読みたい


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