在 Debian 上排查 Node.js 慢日志(slow log / 性能慢),通常分几种情况。下面按最常见场景给你一套实用方法。
Node.js 本身没有内置慢日志,常见“慢”来自:
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();
});
日志可输出到:
pm2 logspm2 logs
pm2 logs --lines 100
慢请求可直接在代码里 console.log 出来。
--trace-warnings(阻塞警告)node --trace-warnings app.js
npm install -g clinic
clinic doctor -- node app.js
访问服务后停止,会生成:
setInterval(() => {
const start = Date.now();
setImmediate(() => {
const delay = Date.now() - start;
if (delay > 100) {
console.warn(`Event loop delay: ${delay}ms`);
}
});
}, 1000);
SHOW VARIABLES LIKE 'slow_query_log';
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
日志位置:
cat /var/log/mysql/slow.log
log_min_duration_statement = 1000
tail -f /var/log/postgresql/postgresql.log
top
htop
free -h
iotop
strace -p <pid>
| 框架 | 慢日志方式 |
|---|---|
| Express | 中间件 |
| NestJS | Interceptor |
| Koa | 中间件 |
| Fastify | onRequest / onResponse |
✅ 想知道“哪里慢”:
如果你愿意,可以告诉我:
我可以直接给你针对你项目的慢日志方案。