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

GCP GCE中Node.js 12应用出现未知连接超时错误排查求助

排查Node.js应用ETIMEDOUT连接错误的步骤

首先,这个错误是应用尝试连接104.19.213.87:10442时超时了,咱们一步步来定位根源:

1. 先找到是谁发起的这个连接请求

很多时候这类请求可能是第三方依赖在后台发起的(比如日志SDK、监控工具、依赖版本检测),不一定是你自己写的代码。可以用这两个方法定位:

  • 用Node.js的调试日志:启动应用时加上NODE_DEBUG=net环境变量,命令如下:
    NODE_DEBUG=net node your-app-entry-file.js
    
    这样Node会输出所有网络连接的详细日志,包括每个连接的调用栈,你就能直接看到是哪个模块发起的请求。
  • 临时Hook住网络连接:在应用入口最顶部加一段代码,拦截到目标IP端口的连接请求并打印调用栈:
    const originalConnect = require('net').connect;
    require('net').connect = function(options) {
      // 匹配目标IP和端口
      const targetHost = '104.19.213.87';
      const targetPort = 10442;
      const isTarget = (options.host === targetHost && options.port === targetPort) || 
                       (options.path && options.path.includes(`${targetHost}:${targetPort}`));
      if (isTarget) {
        console.error('=== 检测到目标连接请求,调用栈如下 ===');
        console.error(new Error().stack);
      }
      return originalConnect.apply(this, arguments);
    };
    
    启动应用后,当触发这个连接时,就能看到完整的调用栈,直接定位到具体代码或依赖包。

2. 检查GCE实例的网络连通性

确认是不是虚拟机本身无法访问这个端口:

  • 在GCE实例上执行命令测试连通性:
    # 用telnet测试
    telnet 104.19.213.87 10442
    # 或者用nc更直观
    nc -zv 104.19.213.87 10442
    
    如果命令也返回超时,那就是网络层面的问题:
    • 检查GCP控制台的VPC防火墙规则,看出站(Egress)规则有没有限制对104.19.213.87或10442端口的访问;
    • 确认实例的VPC路由配置有没有变化,比如是不是新增了路由规则导致流量无法出站。

3. 排查依赖包或配置变化

既然是昨天突然出现的问题,大概率是有变更:

  • 查看代码仓库的提交记录,看昨天有没有更新依赖包(比如npm install了新包,或者升级了现有包);
  • 检查应用的环境变量,看有没有修改过服务地址类的配置(比如API_SERVER、MONITOR_ENDPOINT等),是不是误设成了这个IP端口;
  • 用npm ls生成依赖树,排查哪些依赖可能会发起外部请求(比如日志监控类、错误追踪类的SDK)。

4. 验证目标服务的可用性

这个IP属于Cloudflare的IP段,你可以在其他网络环境(比如本地电脑)测试连接104.19.213.87:10442:

  • 如果其他环境也连不上,那就是目标服务本身出了问题(比如服务下线、端口变更、IP被封禁);
  • 如果其他环境能正常连接,那回到GCE实例的网络配置,检查是不是有出站流量被限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 19:27:52