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

如何解决SocketError:无法打开TCP连接(域名解析临时失败)

问题排查:Ubuntu 18.04服务器偶发DNS解析失败SocketError

问题描述

运行Ubuntu 18.04 LTS的生产应用服务器(app_server)访问主域名下任意端点时,偶发SocketError:

Failed to open TCP connection to kong_server:xxxx (getaddrinfo: Temporary failure in name resolution)

  • 现象:访问结果不稳定,有时正常有时报错,无固定规律
  • 环境对比:运行Ubuntu 16.04.7 LTS的预发布环境无此问题
  • 架构信息:使用Kong 2.0.1(容器部署在CentOS 7.9.2009的kong_server)作为API网关,所有服务器处于同一私有网络,共用同一私有DNS服务器

已完成的排查动作

  • 绕过NGINX Proxy Server直接访问kong_server:xxxx,问题依旧
  • 2022年12月16日更新:跳过Kong直接调用后端端点,仍出现相同错误,怀疑问题可能出在HTTParty配置或版本上

排查建议与解决方案

1. 监控DNS解析稳定性

在app_server上持续执行DNS查询命令,捕捉解析失败的时间点:

# 用nslookup监控解析结果
while true; do nslookup kong_server; sleep 1; done

# 用dig查看更详细的解析过程
while true; do dig kong_server +short; sleep 1; done

同时查看私有DNS服务器的日志,确认是否是DNS服务端偶发故障导致解析失败。

2. 检查Ubuntu 18.04的DNS缓存服务

Ubuntu 18.04默认使用systemd-resolved作为DNS缓存,可能存在缓存异常:

  • 查看当前DNS服务状态:
    systemd-resolve --status
    
  • 清空DNS缓存:
    sudo systemd-resolve --flush-caches
    
  • 对比预发布环境(Ubuntu 16.04可能使用dnsmasq)的DNS配置,重点检查超时、重试次数等参数差异。

3. 排查HTTParty的配置与版本

  • 确认HTTParty版本,对比预发布环境的版本差异:
    puts HTTParty::VERSION
    
  • 检查HTTParty的全局配置,重点关注连接超时、DNS相关设置:
    HTTParty.configure do |config|
      config.timeout = 10
      config.open_timeout = 2
      # 若存在自定义DNS解析逻辑,检查是否有逻辑缺陷
    end
    
  • 临时更换为其他HTTP客户端(如Faraday)测试,确认是否是HTTParty本身的问题。

4. 调整系统网络参数

  • 检查/etc/resolv.conf,确认DNS服务器地址正确,可添加备用DNS作为 fallback:
    cat /etc/resolv.conf
    
  • 修改systemd-resolved配置,调整DNS超时和重试参数(编辑/etc/systemd/resolved.conf):
    [Resolve]
    DNS=私有DNS服务器IP
    FallbackDNS=8.8.8.8 8.8.4.4
    TimeoutSec=2
    DNSRetry=3
    
    修改后重启服务:
    sudo systemctl restart systemd-resolved
    

5. 应用层添加重试逻辑

在找到根本原因前,可在代码中添加解析失败的重试机制,降低业务影响:

def call_api(url)
  retry_count = 3
  begin
    HTTParty.get(url)
  rescue SocketError => e
    retry_count -= 1
    retry if retry_count > 0
    raise e
  end
end

内容的提问来源于stack exchange,提问作者Benediktus Aditya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:20:47