FIN_WAIT_1 が増え続ける状態は、 TCP切断が正常に完了していないことを示します。
放置すると
- ファイルディスクリプタ枯渇
- コネクション枯渇
- 新規通信不能
につながるため、確実な対処が必要です。
本記事では、 FIN_WAIT_1 が長時間残る理由と、 実務での切り分け手順を解説します。
目次
FIN_WAIT_1の状態を正確に把握する
件数と接続先を特定
ss -ant state fin-wait-1
✔ 同一IP・同一ポートに集中している場合は相手側起因の可能性が高い
対策① 相手プロセスが応答不能な場合
確認手順
# 相手ホストに疎通確認
ping 接続先IP
# アプリポート疎通
nc -vz 接続先IP port番号
解決策
- 相手プロセス再起動
- OOM / 高負荷があればリソース増強
ポイント: FIN_WAIT_1 は「こちらが悪い」とは限らない。相手の死活確認が最優先。
対策② ファイアウォール・LBでACKが破棄されている場合
確認すべきポイント
- stateful firewallのセッションタイムアウト
- LBの idle timeout
具体的対応
- LB idle timeout > アプリのKeepAlive
- FWで FIN / ACK を許可
✔ LB配下では FIN_WAIT_1大量発生=timeout不整合 が多い
対策③ 非対称ルーティングの修正
確認
ip route get 接続先IP
送信経路と返信経路が異なる場合、ACKが届かない。
解決策
- ルーティングを固定
- SNAT/DNAT構成を見直す
対策④ パケットロス・再送が発生している場合
再送確認
ss -s
netstat -s | grep retrans
恒久対策
- NW帯域・MTU確認
- 輻輳ポイントの解消
最終手段:OSレベルでの切断促進(暫定対処)
再送回数短縮
sysctl -w net.ipv4.tcp_retries2=8
⚠ 根本原因を直さずにこれだけ行うのはNG
やってはいけない対処
- 原因特定せず sysctl だけ変更
- FIN_WAIT_1をFIN_WAIT_2と混同
- アプリ改修を検討しない
実務向けチェックリスト
- 接続先IPは特定できているか
- 相手プロセスは生きているか
- FW/LB timeoutと整合しているか
- 再送・パケットロスはないか
まとめ
FIN_WAIT_1 は 「通信設計の歪み」を可視化する重要なシグナルです。
数を減らすことではなく、 なぜACKが返らないかを突き止めることが、 唯一の正解です。
あわせて読みたい


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


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


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