在 Linux 上运行 Node.js 服务时日志报错很常见,处理方式通常是「先看日志 → 定位错误类型 → 逐步排查 → 修复/规避」。下面给你一套实用排查流程,适合大多数情况。
常见日志来源:
node app.js
pm2 logs
pm2 logs app-name
journalctl -u your-node-service -f
docker logs -f container_id
tail -f logs/error.log
示例:
Error: Cannot find module 'express'
✅ 解决:
npm install
EADDRINUSE: address already in use :::3000
✅ 查占用:
lsof -i:3000
# 或
netstat -tunlp | grep 3000
✅ 解决:
kill -9 PIDEACCES: permission denied
✅ 常见原因:
✅ 解决:
sudo chown -R user:user project
# 或
sudo setcap cap_net_bind_service=+ep node
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed
✅ 解决:
node --max-old-space-size=2048 app.js
UnhandledPromiseRejectionWarning
✅ 必须加:
process.on('unhandledRejection', e => {
console.error(e);
});
日志里通常有:
at Object.<anonymous> (/app/server.js:23:10)
重点看:
| 问题 | 原因 | 解决 |
|---|---|---|
| node 版本过低 | 用了新语法 | nvm use 18 |
| 环境变量没加载 | .env 未读取 |
source .env |
| 路径大小写 | Linux 区分 | 检查 import 路径 |
| 时区错误 | 日志时间乱 | tzselect |
| 文件描述符耗尽 | 高并发 | ulimit -n 65535 |
如果你愿意,可以把完整报错日志贴出来(或截图关键部分),我可以帮你:
✅ 精准判断错误原因
✅ 给修复代码
✅ 判断是否 Linux / Node 特有
你可以直接发:
报错内容 + node 版本 + 启动方式(pm2 / docker / 直接 node)