作为 IT 工程师,我可以为您提供全面的 Node.js 在 Linux 环境下的性能优化方案。以下是关键优化策略:
# 增加文件描述符限制
echo "fs.file-max = 100000" >> /etc/sysctl.conf
sysctl -p
# 调整 TCP 参数
echo "net.ipv4.tcp_max_syn_backlog = 4096" >> /etc/sysctl.conf
echo "net.core.somaxconn = 4096" >> /etc/sysctl.conf
sysctl -p
# 修改 limits.conf
echo "* soft nofile 100000" >> /etc/security/limits.conf
echo "* hard nofile 100000" >> /etc/security/limits.conf
# 使用 nvm 管理 Node.js 版本
nvm install --lts
nvm use --lts
# 增加内存限制和优化垃圾回收
node --max-old-space-size=4096 --optimize-for-size app.js
const cluster = require('cluster');
const os = require('os');
if (cluster.isMaster) {
const cpuCount = os.cpus().length;
for (let i = 0; i < cpuCount; i++) {
cluster.fork();
}
} else {
require('./app');
}
// 生产环境禁用不必要的中间件
if (process.env.NODE_ENV === 'production') {
app.use(require('compression')());
app.use(require('helmet')());
}
// MongoDB 连接池设置
mongoose.connect(uri, {
poolSize: 20, // 连接池大小
bufferMaxEntries: 0,
useNewUrlParser: true,
useUnifiedTopology: true
});
const redis = require('redis');
const client = redis.createClient();
const cache = require('express-redis-cache')({ client });
// 路由缓存
app.get('/api/data', cache.route(), (req, res) => {
// 处理逻辑
});
# 使用 clinic.js 进行性能分析
npm install -g clinic
clinic doctor -- node app.js
node --inspect app.js
# 然后使用 Chrome DevTools 进行分析
const pino = require('pino');
const logger = pino({
level: 'info',
prettyPrint: process.env.NODE_ENV !== 'production'
});
npm install -g pm2
pm2 start app.js -i max --name "api-server"
pm2 save
pm2 startup
# 使用 Nginx 作为反向代理
upstream node_app {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
keepalive 64;
}
server {
listen 80;
location / {
proxy_pass http://node_app;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
const { Worker } = require('worker_threads');
function runService(workerData) {
return new Promise((resolve, reject) => {
const worker = new Worker('./worker.js', { workerData });
worker.on('message', resolve);
worker.on('error', reject);
worker.on('exit', (code) => {
if (code !== 0) reject(new Error(`Worker stopped with exit code ${code}`));
});
});
}
const fs = require('fs');
const { WASI } = require('wasi');
const wasi = new WASI();
const importObject = { wasi_snapshot_preview1: wasi.wasiImport };
(async () => {
const wasm = await WebAssembly.compile(
fs.readFileSync('./compute-heavy.wasm')
);
const instance = await WebAssembly.instantiate(wasm, importObject);
// 调用 WASM 函数
const result = instance.exports.computeHeavyTask();
})();
通过以上优化策略的组合应用,可以显著提高 Node.js 应用在 Linux 环境下的性能表现。建议根据实际应用场景选择适合的优化方案,并通过监控工具持续跟踪性能指标。