在 Debian 上定位 Node.js 日志异常,通常可以按“先找日志在哪 → 再看异常内容 → 定位代码/环境原因”的思路进行。下面给你一套实用方法。
不同项目位置不同,常见有:
/var/log/<app>/
~/logs/
项目目录下的 logs/
如果你用的是 PM2 / systemd / Docker,日志位置不同。
查看日志:
pm2 logs
pm2 logs <app-name>
查看错误日志:
pm2 logs --err
如果 Node.js 是通过 systemd 启动:
journalctl -u your-node-service.service -f
journalctl -u your-node-service.service --since "1 hour ago"
只看错误:
journalctl -u your-node-service.service -p err
docker logs <container_id> -f
docker logs --tail 200 <container_id>
常见异常:
Error: Cannot find moduleEADDRINUSEECONNREFUSEDUnhandledPromiseRejectionSegmentation faultOut of memory运行应用时加参数:
node --trace-warnings app.js
node -- stack_trace_limit=100 app.js
或者:
NODE_OPTIONS="--stack-trace-limit=100" node app.js
Error: Cannot find module 'xxx'
排查:
npm ls xxx
npm install
Debian 上特别注意:
EADDRINUSE :::3000
查找占用:
lsof -i:3000
ss -lntp | grep 3000
ECONNREFUSED 127.0.0.1:5432
检查:
systemctl status postgresql
telnet 127.0.0.1 5432
FATAL ERROR: Ineffective mark-compacts
查看内存:
free -h
top
可限制内存:
node --max-old-space-size=512 app.js
如 pino / winston
const pino = require('pino')
const logger = pino()
logger.error({ err }, 'request failed')
process.on('uncaughtException', e => {
console.error('uncaught', e)
})
process.on('unhandledRejection', e => {
console.error('unhandled', e)
})
tail -f /var/log/syslog
dmesg | tail
dmesg | grep -i "killed process"
1. 确认启动方式(PM2 / systemd / docker)
2. 找到对应日志
3. 搜索 ERROR / Exception
4. 定位堆栈最后一行代码
5. 检查依赖、端口、数据库、内存
6. 加日志复现
如果你愿意,可以:
我可以直接帮你精确定位问题。