Node.js 日志中网络错误排查手册
一 快速定位流程
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>。nslookup <host> 或 dig <host>。netstat -tulpen | grep <port> 或 ss -ltnp | grep <port>。lsof -iTCP:<port> -sTCP:LISTEN 或 ss -ltnp | grep <port>。curl -v http://<host>:<port>/health 或 nc -vz <host> <port> 验证端口与服务是否可达。二 常见错误与对应处置
| 错误码或现象 | 含义 | 快速验证 | 处置要点 |
|---|---|---|---|
| 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 -f、tail -f /var/log/syslog、/var/log/kern.log、/var/log/dmesg,用于发现服务崩溃、OOM、驱动/内核网络事件。ping、traceroute、mtr 定位延迟与丢包节点;ip a、ip route、route -n 检查地址与默认网关。netstat -tulpen、ss -ltnp、lsof -iTCP:<port> -sTCP:LISTEN 确认监听地址与占用进程。sudo ufw status、iptables -S、firewall-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 设置断点,复现错误并查看调用栈与网络面板。四 代码与配置层面的加固建议