系统配置优化
ulimit -n 65535临时设置,或修改/etc/security/limits.conf文件(添加* soft nofile 65535、* hard nofile 65535)永久生效。/etc/sysctl.conf,添加net.core.somaxconn = 4096(最大连接队列长度)、net.ipv4.tcp_max_syn_backlog = 4096(SYN队列长度)、net.ipv4.tcp_tw_reuse = 1(复用TIME-WAIT连接)、net.ipv4.ip_local_port_range = 1024 65535(可用端口范围),运行sudo sysctl -p使配置生效。Node.js应用代码优化
fs.promises.readFile()、async/await替代同步API(如fs.readFileSync()),避免阻塞事件循环。例如,数据库查询、文件读写等I/O操作应全部使用异步接口。emitter.removeListener('event', handler))、清除定时器(clearInterval(timer))、避免全局变量滥用(如用let/const替代var)。Map(快速查找)、Set(去重)等高效数据结构,减少内存占用和操作时间。fs.createReadStream()和fs.createWriteStream()分块读取/写入文件,避免一次性加载大文件到内存,降低内存消耗。例如,视频、日志文件的处理应使用流。worker_threads模块创建子线程处理,避免阻塞主线程的事件循环。例如:const { Worker } = require('worker_threads');
const worker = new Worker('./cpu-intensive-task.js');
worker.on('message', (result) => console.log('Task result:', result));
进程与并发管理
cluster模块创建多个工作进程(数量等于CPU核心数),共享同一个端口,提高并发处理能力。示例代码:const cluster = require('cluster');
const os = require('os');
if (cluster.isMaster) {
for (let i = 0; i < os.cpus().length; i++) cluster.fork();
cluster.on('exit', (worker) => console.log(`Worker ${worker.process.pid} died`));
} else {
require('./app.js'); // 启动应用
}
pm2 start app.js -i max(-i max表示根据CPU核心数启动对应数量的进程)启动应用。缓存策略优化
const redis = require('redis');
const client = redis.createClient();
app.get('/user/:id', async (req, res) => {
const userId = req.params.id;
const cachedUser = await client.get(`user:${userId}`);
if (cachedUser) return res.json(JSON.parse(cachedUser));
const user = await db.getUserById(userId);
client.setex(`user:${userId}`, 3600, JSON.stringify(user)); // 缓存1小时
res.json(user);
});
Cache-Control: max-age=3600、Expires)缓存静态资源(HTML、CSS、JS、图片),减少服务器负载并加快页面加载速度。数据库与I/O优化
CREATE INDEX idx_user_email ON users(email)),减少查询时间;使用批量操作(如INSERT INTO table VALUES (?, ?), (?, ?))替代多次单条插入,降低数据库交互次数。mysql2/promise(MySQL)、pg-pool(PostgreSQL)等库的连接池功能,复用数据库连接,避免频繁创建和销毁连接的开销。例如:const mysql = require('mysql2/promise');
const pool = mysql.createPool({ host: 'localhost', user: 'root', database: 'test', waitForConnections: true, connectionLimit: 10, queueLimit: 0 });
app.get('/data', async (req, res) => {
const [rows] = await pool.query('SELECT * FROM users');
res.json(rows);
});
compression中间件(如Express的app.use(compression()))对响应数据进行Gzip/Brotli压缩,减少网络传输时间,提升页面加载速度。性能分析与监控
--inspect标志启动应用(node --inspect app.js),在Chrome浏览器中访问chrome://inspect,使用DevTools的Performance面板记录性能 profile,分析CPU使用率、内存占用、事件循环延迟等指标。heapdump模块(npm install heapdump)在代码中生成堆快照(heapdump.writeSnapshot('./heapdump.heapsnapshot')),通过Chrome DevTools的Memory面板分析内存中的对象引用,定位泄漏源(如未移除的事件监听器、缓存未清理)。pm2 monit)实时查看CPU、内存、进程状态;或使用New Relic、Datadog等APM工具监控应用性能,设置告警规则(如CPU使用率超过80%时发送邮件),及时发现并解决性能瓶颈。