centos

如何优化CentOS上Node.js的启动速度

小樊
42
2025-06-30 12:06:11
栏目: 编程语言

在CentOS上优化Node.js的启动速度可以通过多种策略实现,以下是一些常见的方法:

1. 使用最新版本的Node.js

确保你使用的是最新版本的Node.js,因为新版本通常会包含性能改进和bug修复。

2. 使用PM2进行进程管理

PM2是一个流行的Node.js进程管理器,它可以提高应用的稳定性和性能。

npm install pm2 -g
pm2 start app.js --name my-app
pm2 startup
pm2 save

3. 启用Node.js的集群模式

Node.js的集群模块可以利用多核CPU来提高应用的性能。

const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);

  // Fork workers.
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`worker ${worker.process.pid} died`);
  });
} else {
  // Workers can share any TCP connection
  // In this case it is an HTTP server
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('hello world
');
  }).listen(8000);

  console.log(`Worker ${process.pid} started`);
}

4. 使用V8引擎优化

Node.js使用V8引擎,可以通过一些标志来优化性能。

node --harmony --max_old_space_size=4096 app.js

5. 减少模块加载时间

确保你的应用只加载必要的模块,并且尽可能地减少模块的大小。

delete require.cache[require.resolve('some-large-module')];

6. 使用HTTP/2

如果你的应用是一个Web服务器,使用HTTP/2可以显著提高性能。

const http2 = require('http2');
const fs = require('fs');
const server = http2.createSecureServer({
  key: fs.readFileSync('server.key'),
  cert: fs.readFileSync('server.crt')
});

server.on('stream', (stream, headers) => {
  stream.respond({
    'content-type': 'text/html; charset=utf-8',
    ':status': 200
  });
  stream.end('<h1>Hello World</h1>');
});

server.listen(8443);

7. 使用缓存

对于不经常变化的数据,使用缓存可以减少数据库查询和计算时间。

const NodeCache = require('node-cache');
const myCache = new NodeCache();

// 设置缓存
myCache.set('key', 'value', 60); // 缓存60秒

// 获取缓存
const cachedValue = myCache.get('key');

8. 使用SSD

如果可能的话,使用SSD而不是HDD可以显著提高文件I/O性能。

9. 系统级别的优化

# 编辑配置文件
vim /etc/sysctl.conf

# 关键参数示例(追加后执行`sysctl -p` 生效)
vm.swappiness = 10 # 减少Swap使用(默认60)
vm.dirty_ratio = 20 # 系统内存脏页占比阈值(默认20%)
vm.dirty_background_ratio = 10 # 后台刷脏页的阈值(默认10%)
net.core.somaxconn = 65535 # 最大连接队列长度(默认128)
net.ipv4.tcp_max_syn_backlog = 65535 # SYN队列长度(默认512)
net.ipv4.tcp_fin_timeout = 30 # FIN超时时间(默认60s)
net.ipv4.tcp_tw_reuse = 1 # 允许复用TIME_WAIT套接字
net.ipv4.tcp_slow_start_after_idle = 0 # 禁用空闲后慢启动
fs.file-max = 1000000 # 最大文件句柄数
fs.inotify.max_user_watches = 65536 # inotify监控文件数上限
# 针对用户/进程的资源限制
* soft nofile 65535 # 单进程最大打开文件数(软限制)
* hard nofile 100000 # 硬限制
* soft nproc 65535 # 单用户最大进程数
* hard nproc 100000
# 查看当前调度策略
cat /sys/block/sda/queue/scheduler

# 临时修改为deadline(适合数据库)
echo deadline > /sys/block/sda/queue/scheduler

# 永久生效(GRUB配置)
vim /etc/default/grub
GRUB_CMDLINE_LINUX="... elevator=deadline"
grub2-mkconfig -o /boot/grub2/grub.cfg

通过上述方法,你可以在CentOS系统上优化Node.js应用的启动速度,提高应用的响应速度和吞吐量。

0
看了该问题的人还看了