LinuxサーバーでTCP接続を監視していると、 FIN_WAIT_2 が大量に残り続けるという状態に遭遇することがあります。
この状態は、
- 接続数の異常増加
- ポート枯渇
- 通信遅延
の前兆であることが多く、放置すると重大障害につながります。
本記事では、 FIN_WAIT_2 が残り続ける仕組みと、 正しい原因切り分け・対処方法を解説します。
目次
FIN_WAIT_2とは何か
TCPは正常切断時に以下の状態遷移を行います。
ESTABLISHED
→ FIN_WAIT_1
→ FIN_WAIT_2
→ TIME_WAIT
→ CLOSED
FIN_WAIT_2 は、 自分が FIN を送信し、相手の FIN 待ち状態です。
FIN_WAIT_2が残る=何が起きているか
つまり、
「自分は切断意思を示したが、相手が切断しない」
という状態です。
まず確認すべきコマンド
ss -ant | grep FIN-WAIT-2
接続先確認
ss -ant state fin-wait-2
原因① 相手側アプリが正常にcloseしない
概要
サーバー側がFINを送ったが、 クライアントが接続を閉じない。
典型例
- バグ
- 異常系処理ミス
- タイムアウト未実装
対処
- 相手アプリ修正
- 通信仕様見直し
原因② ロードバランサ・FWがFINを破棄
概要
途中経路でFINが破棄される。
典型例
- NAT装置
- LB
- FWセッション管理
対処
- タイムアウト調整
- 装置設定確認
原因③ アプリ設計ミス(片方向切断設計)
概要
片側だけcloseする設計。
対処
- 双方向close設計
- 通信仕様修正
原因④ OSタイムアウト設定
概要
FIN_WAIT_2の待機時間が長い。
確認
cat /proc/sys/net/ipv4/tcp_fin_timeout
対処
sysctl -w net.ipv4.tcp_fin_timeout=30
※ 根本解決ではない
やってはいけない対処
- timeout短縮だけで誤魔化す
- 再起動でリセット
- 状態無視運用
切り分けフロー
- FIN_WAIT_2接続先確認
- 相手アプリ調査
- 経路装置確認
- OS設定確認
FIN_WAIT_2が示す設計上の問題
この状態は、 通信仕様が非対称設計になっている ことを意味します。
多くの場合、 OSではなくアプリ設計の問題です。
まとめ
FIN_WAIT_2 が残り続けるのは、 TCPの異常ではなく、 通信設計の異常です。
状態遷移を理解すれば、 原因は必ず論理的に切り分けられます。
あわせて読みたい


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


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


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


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