系統級配置優化
ulimit -n 65535
臨時增加限制;永久生效需編輯/etc/security/limits.conf
,添加* soft nofile 65535
和* hard nofile 65535
。/etc/sysctl.conf
,添加net.core.somaxconn = 65535
(提升TCP連接隊列長度)、net.ipv4.tcp_max_syn_backlog = 65535
(增加SYN隊列容量)、fs.file-max = 100000
(系統級最大文件描述符數),執行sysctl -p
使配置生效。noatime,nodiratime
選項(減少文件訪問時間更新的開銷)。Node.js應用代碼優化
async/await
、Promise
替代同步API(如fs.readFile
→fs.promises.readFile
),避免阻塞事件循環;對于CPU密集型任務,拆分為小任務或使用setImmediate
/process.nextTick
分散負載。Buffer
和Stream
處理大文件(如視頻、日志),避免一次性加載到內存;及時釋放無用對象(如移除事件監聽器、清空緩存),防止內存泄漏。Map
替代Object
進行高頻查找)、優化循環邏輯(如減少嵌套循環、提前終止不必要的迭代),降低CPU占用。進程與并發管理
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'); // 啟動應用
}
worker_threads
模塊創建子線程,避免阻塞主線程的事件循環。V8引擎調優
--max-old-space-size
參數增大(如node --max-old-space-size=4096 app.js
設置為4GB),避免因內存不足導致的崩潰。進程管理與監控
pm2 start app.js -i max
啟動集群模式(自動匹配CPU核心數),支持負載均衡、自動重啟(進程崩潰后5秒內重啟)、日志管理(pm2 logs
)和性能監控(pm2 monit
)。htop
(查看CPU/內存使用率)、vmstat
(監控系統級資源)、iostat
(查看磁盤I/O)等工具;或使用node --inspect
啟動調試模式,結合Chrome DevTools分析CPU、內存熱點。網絡與數據庫優化
mysql2
的pool
模塊,減少連接建立/銷毀的開銷)、優化查詢語句(避免SELECT *
、使用分頁LIMIT
)。緩存策略
TTL=3600
秒),避免緩存雪崩。expires 30d
,讓瀏覽器緩存靜態資源(如JS、CSS),減少重復請求。工具與持續優化
clinic.js
(生成性能報告,包括CPU、內存、事件循環分析)、node --inspect
(結合Chrome DevTools查看火焰圖)定位性能瓶頸。winston
或pino
等異步日志庫,避免同步日志寫入阻塞事件循環;通過logrotate
工具分割日志文件(如按天分割),防止日志過大占用磁盤空間。