温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Node服务器故障排查技巧有哪些

发布时间:2026-07-01 12:24:56 来源:亿速云 阅读:133 作者:小樊 栏目:系统运维

Node.js 服务器(尤其是基于 Express、Koa、NestJS 等框架)出故障时,排查思路通常围绕 “进程状态 → 日志 → 资源 → 代码 → 网络” 逐层展开。下面给你一套实操性较强的排查技巧清单,常用于线上和测试环境。


一、确认服务是否在运行

1️⃣ 看进程是否存在

ps -ef | grep node
# 或
pgrep -fl node

2️⃣ 看端口是否监听

lsof -i :3000
# 或
netstat -tunlp | grep 3000

3️⃣ 是否被进程管理器管理

  • PM2
pm2 list
pm2 logs
pm2 restart app
  • systemd
systemctl status node-app
journalctl -u node-app -f

二、快速定位“为什么挂了”

1️⃣ 看日志(最重要)

PM2 日志

pm2 logs app --lines 100

应用日志

  • 控制台输出
  • 日志文件(winston / pino / log4js)
  • 错误日志 vs 普通日志

关键错误类型

  • Error: listen EADDRINUSE
  • Cannot find module
  • MaxListenersExceededWarning
  • JavaScript heap out of memory

三、CPU / 内存 / 负载问题

1️⃣ 是否内存泄漏

top -p $(pgrep node)
# 或
htop

Node 特有:

node --max-old-space-size=4096 app.js

2️⃣ CPU 占用高

top

如果 Node CPU 持续 > 80%:

  • 是否有死循环
  • 是否有大量 JSON.parse / 加解密
  • 是否有同步阻塞代码

四、端口、网络与请求

1️⃣ 端口占用

lsof -i :3000

2️⃣ 本机能否访问

curl http://127.0.0.1:3000/health

3️⃣ 请求是否卡住

curl -I http://xxx

常见原因:

  • 数据库慢查询
  • Redis 阻塞
  • 下游接口超时
  • 未处理 Promise 错误

五、代码层面的常见坑

1️⃣ 未捕获的异常

✅ 必须有:

process.on('uncaughtException', (err) => {
  console.error('uncaughtException:', err);
});

process.on('unhandledRejection', (reason) => {
  console.error('unhandledRejection:', reason);
});

2️⃣ 异步错误没 return

try {
  await doSomething();
} catch (e) {
  // 没 return,代码继续执行
}

3️⃣ 中间件顺序错误(Express)

app.use(express.json());
app.use(router);

六、数据库 & 外部依赖

1️⃣ 数据库连接

  • 是否连接成功
  • 连接池是否耗尽
SHOW PROCESSLIST;

2️⃣ Redis / MQ

  • 是否超时
  • 密码是否错误
  • 网络是否通

七、Node 特有排查工具

1️⃣ 查看 Node 内部状态

node --inspect app.js

Chrome DevTools → chrome://inspect

2️⃣ CPU profiling

  • clinic flame
  • 0x
  • node --prof

3️⃣ 内存快照

heapdump

八、常见故障速查表

现象 可能原因 排查方式
启动即退出 代码抛错 看日志
偶尔宕机 内存泄漏 看内存曲线
CPU 飙高 死循环 profiling
请求无响应 中间件卡住 curl + 日志
端口冲突 多实例 lsof
线上偶发错误 异步未捕获 unhandledRejection

九、推荐的标准配置(防故障)

  • ✅ PM2 + 重启策略
  • ✅ health check 接口
  • ✅ 错误日志 + 告警
  • ✅ 请求超时控制
  • ✅ 环境变量区分

如果你愿意,可以告诉我:

  • 本地 / 测试 / 生产环境
  • 是否使用 PM2 / Docker / K8s
  • 报错日志或现象截图

我可以给你更针对性的排查步骤。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI