温馨提示×

Node.js日志中网络错误排查

小樊
41
2025-12-26 04:45:51
栏目: 编程语言

Node.js 日志中网络错误排查手册

一 快速定位流程

  • 查看应用日志:实时跟踪日志,优先检索关键错误关键字,如 ETIMEDOUT、ECONNREFUSED、ECONNRESET、ENOTFOUND、EADDRINUSE。示例:tail -f app.log | egrep 'ETIMEDOUT|ECONNREFUSED|ECONNRESET|ENOTFOUND|EADDRINUSE'
  • 查看系统日志:定位系统层面的网络异常与进程事件。示例:sudo tail -f /var/log/syslog;若使用 systemd 托管服务:journalctl -u your-nodejs-service -f
  • 验证网络连通与解析:
    • 连通性:ping -c 4 <host>;路由路径:traceroute <host>mtr <host>
    • DNS:nslookup <host>dig <host>
  • 检查监听与端口占用:
    • 监听状态:netstat -tulpen | grep <port>ss -ltnp | grep <port>
    • 占用排查:lsof -iTCP:<port> -sTCP:LISTENss -ltnp | grep <port>
  • 直连目标服务:用 curl -v http://<host>:<port>/healthnc -vz <host> <port> 验证端口与服务是否可达。
  • 防火墙与安全组:核对本机与云侧策略是否放行相关端口与协议。
    以上步骤能在分钟级内把问题收敛到“应用配置/代码、系统网络、对端服务、DNS/防火墙”四大类之一。

二 常见错误与对应处置

错误码或现象 含义 快速验证 处置要点
connect ETIMEDOUT 连接超时 curl -v <host>:<port> 长时间无响应 增大超时;检查对端服务与负载;排查中间网络延迟/丢包
connect ECONNREFUSED 目标主动拒绝 nc -vz <host> <port> 立即拒绝 确认服务已启动并监听正确端口;检查进程与端口映射
ECONNRESET 对端或中间设备重置连接 日志集中在高峰期或上下游重启窗口 排查对端重启/崩溃、Nginx/负载均衡切换、代理空闲超时
getaddrinfo ENOTFOUND DNS 解析失败 nslookup/dig <host> 失败 检查 /etc/resolv.conf、DNS 服务器、应用内写死的 host
listen EADDRINUSE 端口被占用 lsof -iTCP:<port>ss -ltnp 查占用 结束旧进程或改用可用端口;避免多实例争用
HTTP 非 2xx/5xx 业务或网关层异常 curl -v 查看响应与头 结合网关/上游日志定位鉴权、限流、路由与后端错误
偶发 “socket hang up” 对端提前关闭或网络抖动 抓包与重试策略验证 增加容错与重试;优化超时与连接复用
以上错误码与现象及处置思路,覆盖了绝大多数 Node.js 网络异常场景。

三 深入排查工具与命令

  • 系统与服务日志:journalctl -u your-nodejs-service -ftail -f /var/log/syslog/var/log/kern.log/var/log/dmesg,用于发现服务崩溃、OOM、驱动/内核网络事件。
  • 网络连通与路径:pingtraceroutemtr 定位延迟与丢包节点;ip aip routeroute -n 检查地址与默认网关。
  • 端口与监听:netstat -tulpenss -ltnplsof -iTCP:<port> -sTCP:LISTEN 确认监听地址与占用进程。
  • 防火墙与安全组:sudo ufw statusiptables -Sfirewall-cmd --list-all 核对放行规则。
  • 抓包与深度分析:sudo tcpdump -i <iface> -nn port <port>sudo tcpdump -i any 'tcp[tcpflags] & (tcp-syn|tcp-rst) != 0',必要时配合 Wireshark 分析重传、RST、零窗口等异常。
  • 应用层调试:启动时加 --inspect--inspect-brk,用 Chrome DevTools/VS Code 设置断点,复现错误并查看调用栈与网络面板。
    这些工具能系统化验证“链路—端口—进程—策略—抓包”五个层面,快速定位根因。

四 代码与配置层面的加固建议

  • 统一日志与上下文:使用 Winston/Morgan/Pino 输出结构化日志,记录 host、port、url、method、statusCode、duration、retry、stack,便于检索与聚合分析。
  • 正确监听地址:对外服务避免使用 127.0.0.1,改为 0.0.0.0;容器内确认端口映射与 Host 网络配置一致。
  • 超时与重试:为客户端设置合理 connect/read/write timeout;对幂等场景加入 指数退避 + 抖动 重试;对 ECONNRESET/ETIMEDOUT 区分可重试与不可重试。
  • 连接复用与健康检查:启用 HTTP Keep-Alive、合理设置 maxSockets;对上游做 主动健康检查 与熔断降级。
  • 优雅停机:在进程退出前停止接收新请求,等待进行中请求完成,减少 ECONNRESET 与半开连接。
  • 监控与告警:接入 Prometheus/Grafana 记录请求耗时、失败率、TCP 重传等指标;异常触发 告警
    这些措施能显著降低网络类故障的发生率,并在问题发生时加速定位与恢复。

0