在 Debian 上优化 Node.js 性能,通常可以从系统层面、Node.js 运行参数、代码层面、架构层面几个方向入手。下面按实用性给你一个较完整的优化清单。
老版本 V8 性能较差:
node -v
建议使用 Node.js 18 / 20 / 22(LTS)
# 使用 NodeSource
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
Node 高并发时容易遇到:
EMFILE: too many open files
# 查看
ulimit -n
# 修改
/etc/security/limits.conf
* soft nofile 100000
* hard nofile 100000
/etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
sysctl -p
Node 默认是单进程单线程
const cluster = require('cluster');
const os = require('os');
if (cluster.isPrimary) {
os.cpus().forEach(() => cluster.fork());
} else {
require('./app');
}
npm i -g pm2
pm2 start app.js -i max
pm2 startup
pm2 save
node --max-old-space-size=4096 app.js
node --optimize-for-size --jitless=false app.js
(一般不用手动改,除非极端场景)
❌ 错误:
const data = fs.readFileSync('big.json');
✅ 正确:
fs.promises.readFile('big.json');
fs.createReadStream('big.log')
.pipe(transform)
.pipe(res);
Mapconst redis = require('redis');
for (const item of list) {} // 比 forEach 更快
性能排序(大致):
Fastify > Koa > Express
const compression = require('compression');
app.use(compression());
worker_processes auto;
events {
worker_connections 10240;
}
好处:
server.keepAliveTimeout = 65000;
node --prof app.js
node --prof-process isolate-*.log
pm2 monit
或:
node --inspect app.js
# Chrome DevTools -> Memory
✅ 推荐架构:
Nginx
↓
PM2 (多进程)
↓
Node.js (Fastify)
↓
Redis + PostgreSQL/MySQL
如果你愿意,可以告诉我:
我可以直接给你针对性优化方案。