系統級基礎優化
sudo apt update && sudo apt upgrade -y
,確保Debian系統和內核組件為最新版本,修復已知性能漏洞。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
(可用端口范圍),執行sudo sysctl -p
使配置生效。Node.js進程與代碼優化
cluster
模塊創建與CPU核心數匹配的工作進程,主進程管理子進程生命周期,避免單線程瓶頸。示例如下:const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
for (let i = 0; i < numCPUs; i++) cluster.fork();
cluster.on('exit', (worker) => cluster.fork()); // 子進程退出時重啟
} else {
http.createServer((req, res) => res.end('Hello World')).listen(8000);
}
fs.promises.readFile()
、async/await
替代同步方法(如fs.readFileSync()
),避免阻塞事件循環;控制異步并發量(如用p-limit
庫限制同時發起的請求數)。--max-old-space-size
參數調整堆內存上限(如node --max-old-space-size=4096 app.js
設置4GB),避免內存溢出;使用process.memoryUsage()
監控內存占用,借助heapdump
生成快照、Chrome DevTools
分析內存泄漏(如未釋放的全局變量、事件監聽器)。Set
代替數組做唯一值存儲、Map
代替對象做鍵值對),減少深層嵌套函數調用(拆分復雜邏輯為小函數降低棧幀開銷),緩存頻繁計算結果(如用node-cache
庫緩存數據庫查詢結果),避免重復計算。第三方工具輔助優化
PM2
(npm install pm2 -g
)管理Node.js進程,支持自動重啟、內存監控、日志管理(pm2 monit
查看實時資源占用,pm2 logs
查看日志);用Prometheus+Grafana
搭建監控體系,收集CPU、內存、請求延遲等指標并可視化;用New Relic
、Datadog
進行APM(應用性能管理),快速定位性能瓶頸(如慢查詢、高延遲接口)。Redis
(sudo apt install redis-server
)作為內存數據庫,通過node-redis
客戶端實現緩存(如client.set('key', 'value', 'EX', 3600)
設置1小時過期)。Nginx
作為反向代理,處理靜態文件(如圖片、CSS),并將動態請求分發到多個Node.js實例(通過pm2 scale app 4
啟動4個實例)。配置示例如下(/etc/nginx/sites-available/default
):server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://localhost:3000; # 轉發到Node.js實例
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
}
location /static/ {
alias /var/www/static/; # 靜態文件目錄
}
}
```。