溫馨提示×

CentOS中Node.js性能優化技巧

小樊
51
2025-10-03 03:38:15
欄目: 編程語言

使用最新穩定版Node.js
新版本通常包含性能改進、bug 修復和內存管理優化,能直接提升應用運行效率。在CentOS上可通過NodeSource倉庫安裝最新版,例如:

curl -sL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo yum install -y nodejs

優化內存管理

  • 調整內存限制:通過--max-old-space-size參數擴大V8引擎的舊生代內存(默認1.5GB),避免內存溢出。例如設置為4GB:
    export NODE_OPTIONS="--max-old-space-size=4096"
    
  • 避免內存泄漏:及時移除無用的全局變量、事件監聽器(如removeListener),使用memwatch-nextheapdump工具定位泄漏(例如生成堆快照分析內存占用)。

利用集群模塊充分利用多核CPU
Node.js為單線程模型,通過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) => cluster.fork()); // 進程崩潰時自動重啟
} else {
  require('./app.js'); // 工作進程啟動應用
}

使用反向代理(如Nginx)優化請求處理
Nginx可作為前端代理,處理靜態文件緩存、SSL卸載和負載均衡,減輕Node.js負擔。例如Nginx配置負載均衡:

http {
  upstream node_app {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
  }
  server {
    listen 80;
    location / {
      proxy_pass http://node_app;
      proxy_set_header Host $host;
    }
  }
}

啟用緩存減少重復計算

  • 內存緩存:使用node-cacheRedis緩存頻繁訪問的數據(如數據庫查詢結果、會話信息),降低響應時間。例如node-cache用法:
    const NodeCache = require('node-cache');
    const cache = new NodeCache({ stdTTL: 60 }); // 緩存60秒
    const data = cache.get('key') || (cache.set('key', fetchData(), 60), fetchData());
    
  • 靜態文件緩存:通過Nginx設置expires頭緩存靜態資源(如CSS、JS),減少服務器請求。

優化數據庫訪問

  • 使用連接池:通過mysql2pg-pool模塊復用數據庫連接,避免頻繁創建/銷毀連接的開銷。例如mysql2連接池:
    const mysql = require('mysql2/promise');
    const pool = mysql.createPool({ host: 'localhost', user: 'root', database: 'test', waitForConnections: true, connectionLimit: 10 });
    
  • 優化查詢:為常用查詢字段添加索引,使用參數化查詢避免SQL注入,減少不必要的數據返回(如SELECT指定字段而非SELECT *)。

使用異步編程避免阻塞事件循環
優先使用async/awaitPromise處理I/O操作(如文件讀寫、數據庫查詢),避免同步函數(如fs.readFileSync)阻塞事件循環。例如異步讀取文件:

const fs = require('fs').promises;
async function readFile() {
  try {
    const data = await fs.readFile('file.txt', 'utf8');
    console.log(data);
  } catch (err) { console.error(err); }
}

使用流式處理大數據
處理大文件或網絡流時,使用Stream模塊分塊讀取/寫入數據,減少內存占用。例如讀取大文件的流式處理:

const fs = require('fs');
const readStream = fs.createReadStream('large_file.txt');
readStream.on('data', (chunk) => console.log(`Received ${chunk.length} bytes`));
readStream.on('end', () => console.log('Finished reading'));

實施監控與性能分析

  • 進程管理:使用PM2監控應用內存、CPU使用率,實現自動重啟和負載均衡。例如:
    pm2 start app.js --name "my-app" --max-memory-restart 4096M
    
  • 性能分析:通過--inspect參數啟動調試,使用Chrome DevTools分析內存快照和CPU性能;或使用New Relic、Datadog等工具監控實時性能指標。

調整系統配置

  • 增加文件描述符限制:Node.js處理大量并發請求時,需提高文件描述符限制(默認1024)。編輯/etc/security/limits.conf添加:
    * soft nofile 65535
    * hard nofile 65535
    
  • 使用SSD硬盤:SSD的高I/O性能可顯著提升文件讀寫和數據庫操作速度。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女