温馨提示×

怎么查linux nodejs慢日志

小樊
51
2026-09-29 17:42:54
栏目: 编程语言

在 Linux 上排查 Node.js 慢日志(慢请求 / 慢操作),通常需要自己埋点 + 日志分析,因为 Node.js 不像 MySQL 那样自带“慢日志”。下面按常见场景给你一套实用方案。


一、Web 服务(HTTP 请求慢日志)

1️⃣ 自己记录慢请求(最常用)

在 Express / Koa 等框架里加中间件:

Express 示例

app.use((req, res, next) => {
  const start = Date.now();
  res.on('finish', () => {
    const cost = Date.now() - start;
    if (cost > 1000) { // 超过 1 秒
      console.log(`[SLOW] ${req.method} ${req.url} ${cost}ms`);
    }
  });
  next();
});

日志示例:

[SLOW] GET /api/user 1320ms

2️⃣ 使用现成中间件

  • morgan + 自定义 token
  • express-status-monitor
  • pino-http(推荐,性能高)
const pino = require('pino');
const pinoHttp = require('pino-http');

const logger = pino();
app.use(pinoHttp({
  logger,
  customLogLevel: (req, res, err) => {
    if (res.responseTime > 1000) return 'warn';
    return 'info';
  }
}));

二、数据库慢日志(最常见性能瓶颈)

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

MongoDB

mongod --profile=1 --slowms=100

三、Node.js 内部慢函数 / CPU 占用

1️⃣ 使用 --cpu-prof

node --cpu-prof app.js

结束后生成 .cpuprofile,用 Chrome DevTools 打开分析。


2️⃣ 使用 0x(火焰图)

npm i -g 0x
0x app.js

自动生成火焰图,看哪段代码慢。


四、Event Loop 卡顿监控

const monitor = require('event-loop-lag')(1000);
setInterval(() => {
  if (monitor() > 100) {
    console.log(`[LAG] event loop blocked ${monitor()}ms`);
  }
}, 1000);

五、系统级排查(Linux)

看 Node 进程

top -p $(pidof node)

看 IO

iostat -x 1

看网络

netstat -anp | grep node

六、推荐组合方案(生产可用)

✅ HTTP 慢请求:pino-http
✅ 数据库:MySQL/Mongo 慢日志
✅ CPU:偶尔 0x 火焰图
✅ 卡顿:event-loop-lag


如果你能告诉我:

  • 用的是 Express / Koa / Nest / 原生
  • 是 接口慢 / CPU 高 / 数据库慢
  • 是否在 生产环境

我可以直接给你一套可复制的代码配置。

0 踩