You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

闲置后跨服务器首次请求响应缓慢问题求助(Hetzner服务器+Flask应用)

问题根因排查方向
  • 优先排查服务端反向解析超时问题:这是对应20s左右超时最常见的诱因,服务器B上的前置Web服务(如Nginx)、SSH服务、iptables规则如果开启了客户端IP反向解析配置,首次连接时会尝试查询服务器A的PTR记录,解析失败就会卡10-20秒,完全符合你描述的耗时特征
  • 验证建连阶段耗时占比:在服务器A上执行命令curl -w "%{time_connect}\n%{time_total}\n" -o /dev/null -s http://服务器B的接口地址,分别测试闲置15分钟、30分钟后的首次请求,如果time_connect(TCP建连耗时)占总耗时的90%以上,可完全确认问题出在TCP建连环节,和业务代码无关
  • 检查Hetzner默认连接跟踪配置:Hetzner云服务器默认开启netfilter连接跟踪,长时间闲置的TCP连接会被自动从conntrack表中剔除,首次重建连接时如果出现SYN包被默认安全组丢弃,加上系统默认tcp_syn_retries=5的重试机制,就会产生10-30秒的延迟
可落地修复方案

永久修复方案

  • 关闭所有不必要的反向解析配置:
    • 若服务器B用Nginx反向代理Flask,删除配置中所有用域名的规则,统一替换为IP,同时关闭日志域名解析
    • 修改服务器B的/etc/ssh/sshd_config,设置UseDNS no后执行systemctl restart sshd生效
  • 调整系统TCP参数优化连接保活:两台服务器都修改/etc/sysctl.conf,添加以下配置:
    net.netfilter.nf_conntrack_tcp_timeout_established = 86400
    net.ipv4.tcp_keepalive_time = 300
    net.ipv4.tcp_keepalive_intvl = 30
    net.ipv4.tcp_keepalive_probes = 5
    
    保存后执行sysctl -p立即生效,该配置会让闲置TCP连接每5分钟发送一次保活探测,避免被连接跟踪表清理
  • 业务层优化HTTP连接复用:服务器A请求服务器B时不要每次新建HTTP连接,使用requests的Session对象或HTTP客户端连接池保持长连接复用,从根源避免频繁建连的开销

轻量化临时方案

比定时ping更规范的保活方式:在服务器A上配置1分钟一次的定时任务,请求服务器B的空健康检测接口(如专门写个返回200的/health接口),ICMP的ping无法保活TCP连接,只有HTTP请求才能维持TCP连接的活跃状态,避免被链路层面的规则清理

内容的提问来源于stack exchange,提问作者Forner Yann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:06:03