温馨提示×

怎样查debian nodejs慢日志

小樊
39
2026-09-07 07:19:30
栏目: 编程语言

在 Debian 上排查 Node.js 慢日志(slow log / 性能慢),通常分几种情况。下面按最常见场景给你一套实用方法。


一、先明确“慢日志”是什么

Node.js 本身没有内置慢日志,常见“慢”来自:

  1. HTTP 请求慢(接口响应时间长)
  2. 数据库查询慢
  3. Node.js 事件循环阻塞
  4. 依赖模块加载慢
  5. 服务器资源问题(CPU / 内存 / IO)

二、HTTP 接口慢日志(最常用)

1️⃣ 在应用层记录慢请求(推荐)

Express 示例(记录 > 1s 的请求)

app.use((req, res, next) => {
  const start = Date.now();
  res.on('finish', () => {
    const cost = Date.now() - start;
    if (cost > 1000) {
      console.warn(`SLOW ${req.method} ${req.url} ${cost}ms`);
    }
  });
  next();
});

日志可输出到:

  • stdout
  • 文件
  • pm2 logs
  • syslog

2️⃣ 使用 PM2(Debian 常见)

pm2 logs
pm2 logs --lines 100

慢请求可直接在代码里 console.log 出来。


三、Node.js 性能 / 事件循环慢

1️⃣ 使用 --trace-warnings(阻塞警告)

node --trace-warnings app.js

2️⃣ 使用 clinic.js(非常推荐)

npm install -g clinic
clinic doctor -- node app.js

访问服务后停止,会生成:

  • CPU 使用
  • 事件循环延迟
  • 慢函数位置

3️⃣ 检查事件循环延迟

setInterval(() => {
  const start = Date.now();
  setImmediate(() => {
    const delay = Date.now() - start;
    if (delay > 100) {
      console.warn(`Event loop delay: ${delay}ms`);
    }
  });
}, 1000);

四、数据库慢日志(常见元凶)

MySQL

SHOW VARIABLES LIKE 'slow_query_log';
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;

日志位置:

cat /var/log/mysql/slow.log

PostgreSQL

log_min_duration_statement = 1000
tail -f /var/log/postgresql/postgresql.log

五、系统级慢(Debian)

1️⃣ CPU / 内存

top
htop
free -h

2️⃣ IO 慢

iotop

3️⃣ Node 进程卡住

strace -p <pid>

六、如果你用的是框架

框架 慢日志方式
Express 中间件
NestJS Interceptor
Koa 中间件
Fastify onRequest / onResponse

七、总结(快速步骤)

✅ 想知道“哪里慢”:

  1. 先加 HTTP 耗时日志
  2. clinic.js
  3. 数据库慢日志
  4. 系统资源

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

  • Node 版本
  • 用的框架(Express / Nest / Koa)
  • 是接口慢还是启动慢

我可以直接给你针对你项目的慢日志方案

0