系統配置優化
sudo apt update && sudo apt upgrade -y
確保Debian系統為最新狀態;編輯/etc/sysctl.conf
添加net.core.somaxconn = 65535
、net.ipv4.tcp_max_syn_backlog = 65535
、net.ipv4.ip_local_port_range = 1024 65535
等參數,運行sudo sysctl -p
使設置生效,提升網絡連接處理能力。ulimit -n 65535
臨時增加當前會話的文件描述符限制;編輯/etc/security/limits.conf
添加* soft nofile 65535
、* hard nofile 65535
,永久生效,避免高并發下因文件描述符耗盡導致的性能瓶頸。Node.js版本與環境管理
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
安裝NVM,然后執行nvm install --lts
安裝最新的LTS版本(如20.x),LTS版本經過充分測試且包含性能優化,比舊版本更穩定高效。代碼層性能優化
fs.promises.readFile()
代替fs.readFileSync()
),避免同步操作阻塞事件循環;控制異步并發量(如用async.mapLimit
限制并發數),防止資源耗盡。let
/const
代替var
),及時移除無用的事件監聽器(如emitter.removeListener
);選擇合適的數據結構(如用Set
代替數組進行快速查找,用Map
代替普通對象提高鍵值訪問效率),減少內存占用和計算時間。setImmediate
或process.nextTick
將耗時操作放入下一個事件循環迭代,避免長時間阻塞事件循環;用for
循環代替forEach
(for
循環性能更高,尤其在處理大數據量時)。fs.createReadStream
讀取大文件、res.write
分塊發送響應,避免一次性加載全部數據到內存,顯著降低內存占用(尤其適合處理視頻、日志等大文件)。進程與并發優化
cluster
模塊創建多個工作進程(數量等于CPU核心數,require('os').cpus().length
),主進程負責fork工作進程,工作進程共享端口,充分利用多核CPU資源,提升并發處理能力(示例代碼:主進程fork工作進程,工作進程啟動HTTP服務器)。npm install pm2 -g
,通過pm2 start app.js --name "my-app"
啟動應用,PM2支持負載均衡(自動分配請求到多個工作進程)、日志管理(pm2 logs
查看實時日志)、自動重啟(進程崩潰時自動恢復),提升應用可靠性和性能。網絡與反向代理優化
upstream nodejs_pool { server 127.0.0.1:3000; }
,設置location / { proxy_pass http://nodejs_pool; }
,將靜態文件請求交給Nginx處理(如location ~* \.(jpg|css|js)$ { root /var/www/html; }
),減輕Node.js服務器負擔,提升整體響應速度。緩存策略優化
node-cache
模塊(const NodeCache = require('node-cache'); const myCache = new NodeCache({ stdTTL: 100 })
)緩存頻繁訪問的數據(如數據庫查詢結果),設置TTL(生存時間,如100秒),減少重復計算或數據庫查詢。redis
模塊連接Redis服務器(const client = redis.createClient(); client.set('key', 'value', redis.print)
),Redis支持持久化和分布式緩存,適合高并發場景,提升數據訪問速度。res.setHeader('Cache-Control', 'max-age=31536000')
設置HTTP緩存頭,讓瀏覽器緩存靜態資源(如圖片、CSS、JS),減少客戶端與服務器之間的數據傳輸,提升頁面加載速度。數據庫優化
username
、id
)創建索引(如MongoDB的db.collection('users').createIndex({ username: 1 })
),加快查詢速度;優化SQL語句(如避免SELECT *
,只查詢所需字段),減少數據庫負載。mysql.createPool
、mongoose.connect
的poolSize
選項)復用數據庫連接,避免頻繁創建和銷毀連接的開銷;使用批量操作(如INSERT INTO table VALUES (?, ?), (?, ?)
)減少數據庫交互次數,提升寫入性能。性能監控與分析
node --inspect
啟動調試模式,通過Chrome DevTools分析CPU和內存使用情況;用node --prof
生成性能分析報告(node --prof app.js
,然后用node --prof-process isolate-0xnnnnnnnnnnnn-v8.log > processed.txt
解析),定位性能瓶頸;使用PM2的pm2 monit
監控CPU、內存、日志,或New Relic、Datadog等第三方工具進行實時性能監控,快速發現并解決問題。