首页主机资讯centos上nodejs性能如何优化

centos上nodejs性能如何优化

时间2025-10-11 13:28:03发布访客分类主机资讯浏览603
导读:CentOS上Node.js性能优化策略 一、系统层面优化 1. 升级系统与依赖 确保CentOS系统及内核为最新版本,通过sudo yum update -y更新系统包,修复已知漏洞并提升底层性能。同时,升级GCC编译器以支持更高版本的N...

CentOS上Node.js性能优化策略

一、系统层面优化

1. 升级系统与依赖

确保CentOS系统及内核为最新版本,通过sudo yum update -y更新系统包,修复已知漏洞并提升底层性能。同时,升级GCC编译器以支持更高版本的Node.js编译需求。

2. 调整内核参数

修改/etc/sysctl.conf文件优化网络与内存管理,提升并发处理能力:

# 增加文件描述符限制(支持更多并发连接)
echo "fs.file-max = 65536" >
    >
     /etc/sysctl.conf
# 启用TCP快速复用(减少TIME_WAIT状态连接)
echo "net.ipv4.tcp_tw_reuse = 1" >
    >
     /etc/sysctl.conf
# 增加TCP同步队列长度(应对高并发连接)
echo "net.core.somaxconn = 4096" >
    >
     /etc/sysctl.conf
# 调整网络缓冲区大小(提升数据传输效率)
echo "net.core.netdev_max_backlog = 2000" >
    >
     /etc/sysctl.conf
# 应用参数变更
sudo sysctl -p

同时,调整/etc/security/limits.conf增加用户进程与文件打开限制:

* soft nofile 65536
* hard nofile 65536

3. 优化CentOS防火墙

若使用firewalld,允许应用端口(如80、443、3000)通过,并关闭不必要的端口:

sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload

如需更高性能,可临时关闭firewalld(生产环境需谨慎):

sudo systemctl stop firewalld
sudo systemctl disable firewalld

二、Node.js配置优化

1. 使用LTS版本

通过NodeSource仓库安装长期支持(LTS)版本,确保稳定性与性能优化:

curl -sL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo yum install -y nodejs
node -v  # 验证版本

2. 调整内存限制

通过NODE_OPTIONS环境变量增加Node.js进程的内存上限(默认1.5GB),避免内存溢出:

export NODE_OPTIONS="--max_old_space_size=4096"  # 设置为4GB

可将此命令添加到~/.bashrc/etc/profile中永久生效。

3. 进程管理

使用PM2进程管理器实现进程守护、负载均衡与日志管理:

sudo npm install pm2 -g
pm2 start app.js --name "my-app" --instances max  # 根据CPU核心数启动多个实例
pm2 save  # 保存进程列表
pm2 startup  # 设置开机自启

三、代码层面优化

1. 异步编程

使用async/awaitPromise替代回调函数,避免阻塞事件循环。例如:

// 回调方式(易阻塞)
fs.readFile('file.txt', (err, data) =>
 {
    
  if (err) throw err;
    
  console.log(data);

}
    );


// async/await方式(非阻塞)
async function readFile() {

  try {
    
    const data = await fs.promises.readFile('file.txt', 'utf-8');
    
    console.log(data);

  }
 catch (err) {
    
    console.error(err);

  }

}
    
readFile();
    

2. 流处理

处理大文件(如上传、下载)时使用流(Stream),减少内存占用:

const fs = require('fs');
    
const readStream = fs.createReadStream('large-file.zip');
    
const writeStream = fs.createWriteStream('output.zip');
    
readStream.pipe(writeStream);
      // 流式传输

3. 数据库优化

  • 索引优化:为常用查询字段(如idusername)创建索引,加速查询。
  • 连接池:使用mysql2pg的连接池功能,避免频繁建立/断开数据库连接:
    const mysql = require('mysql2/promise');
    
    const pool = mysql.createPool({
    
      host: 'localhost',
      user: 'root',
      password: 'password',
      database: 'test',
      waitForConnections: true,
      connectionLimit: 10,  // 连接池大小
      queueLimit: 0
    }
        );
        
    

4. 缓存策略

  • 内存缓存:使用node-cache库缓存频繁访问的数据(如配置项、热点数据):
    const NodeCache = require('node-cache');
    
    const cache = new NodeCache({
     stdTTL: 60 }
        );
          // 缓存60秒
    const data = cache.get('key');
    
    if (!data) {
        
      const newData = fetchDataFromDB();
        
      cache.set('key', newData);
        
      res.send(newData);
    
    }
     else {
        
      res.send(data);
    
    }
    
    
  • CDN缓存:将静态资源(图片、CSS、JS)上传至CDN,减少服务器负载。

四、反向代理与负载均衡

使用Nginx作为反向代理,处理静态文件、负载均衡与SSL卸载:

server {
    
    listen 80;
    
    server_name example.com;

    
    # 静态文件缓存(减少Node.js请求)
    location ~* \.(jpg|jpeg|png|gif|css|js)$ {
    
        root /var/www/html;
    
        expires 30d;
      # 缓存30天
        access_log off;

    }

    
    # 动态请求转发至Node.js(负载均衡)
    location / {
    
        proxy_pass http://nodejs_upstream;
    
        proxy_set_header Host $host;
    
        proxy_set_header X-Real-IP $remote_addr;
    
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

}


# 定义Node.js上游服务器(多实例负载均衡)
upstream nodejs_upstream {
    
    server 127.0.0.1:3000;
    
    server 127.0.0.1:3001;
    
    server 127.0.0.1:3002;

}

五、性能监控与分析

1. 内置性能工具

使用performance模块监控代码执行时间:

const {
 performance, PerformanceObserver }
     = require('perf_hooks');
    

const obs = new PerformanceObserver((items) =>
 {
    
  console.log(items.getEntries()[0].duration);
      // 输出执行时间
  performance.clearMarks();

}
    );

obs.observe({
 entryTypes: ['measure'] }
    );
    

performance.mark('start');
    
// 需要监控的代码
performance.mark('end');
    
performance.measure('My Operation', 'start', 'end');
    

2. 第三方监控工具

  • PM2监控:通过pm2 monit查看CPU、内存使用情况,或使用pm2 plus(付费)进行实时监控。
  • New Relic/APM:集成APM工具(如New Relic),监控应用性能瓶颈(如数据库查询、API响应时间)。

3. 日志分析

使用winstonpino记录应用日志,结合ELK Stack(Elasticsearch+Logstash+Kibana)分析日志,定位性能问题:

const winston = require('winston');

const logger = winston.createLogger({

  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.File({
 filename: 'error.log', level: 'error' }
),
    new winston.transports.File({
 filename: 'combined.log' }
)
  ]
}
    );
    
logger.info('Application started');
    

六、内存泄漏排查

1. 生成堆快照

使用heapdump模块生成堆快照,分析内存泄漏源:

npm install heapdump --save

在代码中添加堆快照生成逻辑:

const heapdump = require('heapdump');
    
// 在可疑位置生成堆快照(如内存增长时)
heapdump.writeSnapshot('/tmp/snapshot_' + Date.now() + '.heapsnapshot');
    

2. 使用Chrome DevTools分析

打开Chrome浏览器,访问chrome://inspect,点击“Open dedicated DevTools for Node”,选择“Memory” tab,加载堆快照,通过“Comparison”功能对比不同时间点的堆内存,找出持续增长的对象(如未释放的全局变量、事件监听器)。

3. 修复内存泄漏

  • 避免全局变量:使用let/const替代var,避免意外挂载到global对象。
  • 移除事件监听器:在destroyclose方法中移除事件监听器:
    const EventEmitter = require('events');
    
    class MyEmitter extends EventEmitter {
    }
        
    const emitter = new MyEmitter();
        
    emitter.on('event', () =>
         console.log('Event triggered'));
        
    // 不再需要时移除
    emitter.off('event');
        
    
  • 优化闭包:避免在闭包中引用大对象,及时释放不再需要的变量。

通过以上策略,可全面提升CentOS上Node.js应用的性能、稳定性与可维护性。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: centos上nodejs性能如何优化
本文地址: https://pptw.com/jishu/723540.html
centos下nodejs如何调试 centos下nodejs命令有哪些

游客 回复需填写必要信息