阅读量:38
系统级基础配置
- 调整文件描述符限制:Node.js处理高并发时需大量文件描述符,通过
ulimit -n 65535临时设置,或在/etc/security/limits.conf中永久配置(如* soft nofile 65535; * hard nofile 65535),避免因描述符不足导致连接拒绝。 - 优化内核参数:修改
/etc/sysctl.conf,添加net.core.somaxconn = 65535(监听队列长度)、net.ipv4.tcp_max_syn_backlog = 65535(SYN队列长度)、net.ipv4.ip_local_port_range = 1024 65535(可用端口范围),提升TCP连接处理能力,修改后执行sysctl -p生效。
Node.js版本与依赖管理
- 使用LTS版本:选择Node.js长期支持(LTS)版本(如18.x、20.x),其包含性能优化、安全修复和稳定的API,避免使用实验性版本导致兼容性问题。
- 通过NVM管理版本:使用
nvm(Node Version Manager)安装和管理多版本Node.js,命令如curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash安装,nvm install --lts安装LTS版本,nvm use --lts切换,方便版本回滚和测试。
代码级性能优化
- 异步编程:优先使用
async/await、Promise替代同步操作(如fs.readFileSync),避免阻塞事件循环。例如,用fs.promises.readFile替代fs.readFileSync读取文件,保持事件循环流畅。 - 内存管理:避免内存泄漏,及时释放无用资源(如关闭数据库连接、移除事件监听器);使用
stream模块处理大文件(如视频、日志),通过fs.createReadStream分块读取,减少内存占用;合理使用缓存(如Redis)存储频繁访问的数据,降低数据库查询次数。 - 算法与数据结构:选择高效的算法(如快速排序替代冒泡排序)和数据结构(如
Map替代Object进行高频查找),减少不必要的计算和时间复杂度。
进程与并发优化
- 集群模式:使用
cluster模块创建多个工作进程,充分利用多核CPU。示例代码:const cluster = require('cluster'); const numCPUs = require('os').cpus().length; if (cluster.isMaster) { for (let i = 0; i < numCPUs>,提升并发处理能力。 - Worker Threads:对于CPU密集型任务(如加密、图像处理),使用
worker_threads模块创建子线程,避免阻塞主线程。例如:const { Worker } = require('worker_threads'); new Worker('./heavy-task.js'),将耗时任务分离到独立线程。
进程管理与监控
- 使用PM2:通过
pm2(进程管理器)管理Node.js进程,命令如pm2 start app.js -i max(根据CPU核心数启动最大进程数)、pm2 monit(监控资源使用)、pm2 logs(查看日志),支持自动重启、负载均衡和零停机部署。 - 性能分析工具:使用
node --inspect启动调试模式,结合Chrome DevTools分析CPU和内存使用;或用clinic.js生成性能报告(如clinic doctor -- node app.js),定位性能瓶颈(如慢查询、内存泄漏)。
网络与反向代理配置
- Nginx反向代理:安装Nginx(
sudo apt install nginx),配置反向代理将请求转发到Node.js进程。示例配置:location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; },提升静态文件处理能力、负载均衡和SSL卸载。 - HTTP/2与Keep-Alive:启用HTTP/2(通过Nginx配置
listen 443 ssl http2;)支持多路复用,减少连接建立开销;开启Keep-Alive(keepalive_timeout 65;)复用TCP连接,降低延迟。
系统资源监控
- 实时监控工具:使用
top(查看CPU/内存使用)、htop(增强版top)、vmstat(查看系统整体性能)、iostat(查看磁盘IO)监控系统资源,及时发现瓶颈(如CPU过高、内存不足)。