识别思路与快速定位
关键信号与处理对照表
| 日志信号 | 典型关键词 | 常见根因 | 建议动作 |
|---|---|---|---|
| 未处理的 Promise 拒绝 | UnhandledPromiseRejectionWarning | async/await 或 Promise 缺少 .catch() | 为所有 Promise 加 .catch();在入口处临时监听 process.on(‘unhandledRejection’) 打印堆栈并告警 |
| 事件监听器泄漏 | MaxListenersExceededWarning | 重复添加监听器未移除 | 使用 emitter.removeListener;必要时 emitter.setMaxListeners 合理调大并排查重复绑定 |
| 废弃 API 使用 | DeprecationWarning(如 [DEP0005] Buffer()) | 依赖或代码使用旧 API | 按官方建议改用 Buffer.alloc 等安全 API;升级依赖与 Node 版本 |
| 内存不足崩溃 | FATAL ERROR: Reached heap limit / JavaScript heap out of memory | 对象/缓存无限增长、泄漏 | 用 node --max-old-space-size=4096 临时缓解;用 clinic/heapdump 定位泄漏;优化数据结构与缓存策略 |
| 网络连接超时 | connect ETIMEDOUT | 目标主机不可达/防火墙/后端繁忙 | 检查网络连通性、超时与重试策略、后端健康 |
| DNS 解析失败 | getaddrinfo ENOTFOUND | 域名错误或 DNS 配置问题 | 校验域名、检查 /etc/resolv.conf、尝试更换 DNS |
| 端口被占用 | listen EADDRINUSE | 进程未释放端口/多实例冲突 | 结束占用进程或更换端口;确保单实例绑定 |
| HTTP 非 2xx 响应 | Request failed with status code 5xx/4xx | 上游错误、鉴权失败、路由问题 | 完善错误日志与指标;区分客户端/服务端错误并做重试/熔断 |
| 权限被拒绝 | EACCES | 文件/目录权限不足 | 调整 chmod/chown 或以合适用户运行服务 |
| 进程异常退出 | Process exited with code X | 未捕获异常、OOM、信号终止 | 增加全局异常监听(如 uncaughtException / unhandledRejection)、设置内存上限与重启策略(如 PM2 的 restart) |
| 以上信号覆盖了 Node.js 在 Ubuntu 上最常见且高价值的“潜在问题”与“高危错误”,可据此建立日志告警与修复清单。 |
高效检索与分析命令
预防与长期改进