温馨提示×

如何定位debian nodejs日志异常

小樊
37
2026-10-04 05:47:21
栏目: 编程语言

在 Debian 上定位 Node.js 日志异常,通常可以按“先找日志在哪 → 再看异常内容 → 定位代码/环境原因”的思路进行。下面给你一套实用方法。


一、先确定 Node.js 日志在哪里

1. 应用自身日志

不同项目位置不同,常见有:

/var/log/<app>/
~/logs/
项目目录下的 logs/

如果你用的是 PM2 / systemd / Docker,日志位置不同。


2. PM2 管理的 Node.js

查看日志:

pm2 logs
pm2 logs <app-name>

查看错误日志:

pm2 logs --err

3. systemd 服务(常见生产环境)

如果 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

4. Docker 容器

docker logs <container_id> -f
docker logs --tail 200 <container_id>

二、快速定位“异常类型”

1. 看错误关键字

常见异常:

  • Error: Cannot find module
  • EADDRINUSE
  • ECONNREFUSED
  • UnhandledPromiseRejection
  • Segmentation fault
  • Out of memory

2. 打开 Node.js 详细错误

运行应用时加参数:

node --trace-warnings app.js
node -- stack_trace_limit=100 app.js

或者:

NODE_OPTIONS="--stack-trace-limit=100" node app.js

三、常见异常 & 对应排查方向

1. 模块找不到

Error: Cannot find module 'xxx'

排查:

npm ls xxx
npm install

Debian 上特别注意:

  • node 版本差异
  • 是否用 root / 普通用户安装

2. 端口被占用

EADDRINUSE :::3000

查找占用:

lsof -i:3000
ss -lntp | grep 3000

3. 数据库连接异常

ECONNREFUSED 127.0.0.1:5432

检查:

systemctl status postgresql
telnet 127.0.0.1 5432

4. 内存溢出

FATAL ERROR: Ineffective mark-compacts

查看内存:

free -h
top

可限制内存:

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

四、增强日志能力(推荐)

1. 使用结构化日志

如 pino / winston

const pino = require('pino')
const logger = pino()
logger.error({ err }, 'request failed')

2. 全局捕获异常

process.on('uncaughtException', e => {
  console.error('uncaught', e)
})

process.on('unhandledRejection', e => {
  console.error('unhandled', e)
})

五、系统级排查(Debian)

1. 查看系统日志

tail -f /var/log/syslog
dmesg | tail

2. 查看 OOM Killer

dmesg | grep -i "killed process"

六、定位流程总结(实用)

1. 确认启动方式(PM2 / systemd / docker)
2. 找到对应日志
3. 搜索 ERROR / Exception
4. 定位堆栈最后一行代码
5. 检查依赖、端口、数据库、内存
6. 加日志复现

如果你愿意,可以:

  • 贴一段 具体报错日志
  • 说明 启动方式(PM2 / systemd / docker)
  • 说明 Debian 版本 + Node 版本

我可以直接帮你精确定位问题。

0 踩