必须精准调整tcp_fin_timeout并协同启用复用机制,因time_wait连接攀升导致端口耗尽和连接错误;需同步配置tcp_fin_timeout、tcp_tw_reuse与tcp_timestamps三个参数,缺一不可。

您在银河麒麟V10上运行微服务网关、反向代理或高频调用外部API的Python应用时,发现TIME_WAIT连接数持续攀升、本地端口耗尽、新连接偶发“Cannot assign requested address”错误,说明系统TCP连接回收机制未适配当前短连接密集型负载,必须精准调整tcp_fin_timeout并协同启用复用机制。
确认当前TIME_WAIT状态与参数来源
先看真实压力:执行ss -s | grep -i time_wait,记录当前TIME_WAIT数量;再查内核实际加载路径:sudo sysctl --system 2>&1 | grep "applying"。重点确认输出中是否含/etc/sysctl.d/99-kylin-tuning.conf——这是推荐的自定义配置位置,避免被系统更新覆盖。
若输出只有/etc/sysctl.conf,说明您尚未建立分层配置体系,后续修改将直接写入该文件,存在被升级脚本覆盖风险。
永久修改tcp_fin_timeout并启用端口复用
这一步必须同时配置三个参数,缺一不可:仅调小tcp_fin_timeout不解决端口复用问题,仅开tcp_tw_reuse而tcp_timestamps为0则完全失效。
方法一:创建独立配置文件(推荐)
1、执行命令创建专用文件:
sudo tee /etc/sysctl.d/99-kylin-tcp-reclaim.conf net.ipv4.tcp_fin_timeout = 30<br> net.ipv4.tcp_timestamps = 1<br> net.ipv4.tcp_tw_reuse = 1<br> EOF
2、立即加载全部配置:
sudo sysctl --system3、验证三项均已生效:
sudo sysctl net.ipv4.tcp_fin_timeout net.ipv4.tcp_timestamps net.ipv4.tcp_tw_reuse
【注意:不要用sysctl -p】它只读取/etc/sysctl.conf,若您的自定义参数在/etc/sysctl.d/下,此命令将完全忽略,导致看似修改成功实则未生效。
验证参数是否真正起效
第一步:确认proc值已变更
执行sudo cat /proc/sys/net/ipv4/tcp_fin_timeout,输出必须为30;sudo cat /proc/sys/net/ipv4/tcp_timestamps和sudo cat /proc/sys/net/ipv4/tcp_tw_reuse均须返回1。
第二步:检查TIME_WAIT连接是否携带时间戳
挑一条当前TIME_WAIT连接:ss -i state time-wait sport = :8080 limit 1(将8080替换为您业务端口),输出中必须含ts字段,否则tcp_tw_reuse形同虚设。
第三步:观察新连接行为
启动一个短连接压测脚本(如for i in {1..100}; do curl -s -o /dev/null http://localhost:8080/api/test & done),再执行ss -s | grep -i time_wait。若tcp_fin_timeout生效,新产生的TIME_WAIT连接将在约30秒后释放;若tcp_tw_reuse生效,同一客户端IP+端口会快速复用,不再持续增长。











