工作进程配置:
worker_processes auto; # 自动匹配CPU核心数
worker_cpu_affinity auto; # CPU亲和性绑定
连接处理优化:
events {
worker_connections 10240; # 每个worker的最大连接数
use epoll; # Linux下高性能事件模型
multi_accept on; # 同时接受多个连接
}
缓冲区优化:
client_body_buffer_size 16k;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 4 8k;
连接复用:
upstream nodejs_backend {
server 127.0.0.1:3000;
keepalive 64; # 保持长连接
}
代理参数优化:
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
add_header Cache-Control "public, no-transform";
access_log off;
}
使用集群模式:
const cluster = require('cluster');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
require('./app');
}
使用PM2进程管理器:
pm2 start app.js -i max # 根据CPU核心数启动进程
pm2 save
pm2 startup
启用JIT编译:
node --jitless --no-opt app.js # 禁用某些情况下可能更高效
内存管理:
// 手动控制GC (谨慎使用)
if (global.gc) {
global.gc();
}
使用性能钩子:
const { performance, PerformanceObserver } = require('perf_hooks');
使用async/await代替回调:
async function fetchData() {
try {
const result = await someAsyncOperation();
// 处理结果
} catch (error) {
// 错误处理
}
}
限制并发:
const { default: PQueue } = require('p-queue');
const queue = new PQueue({ concurrency: 4 });
负载均衡配置:
upstream nodejs_cluster {
least_conn; # 最少连接算法
server 127.0.0.1:3000;
server 127.0.0.1:3001;
server 127.0.0.1:3002;
keepalive 64;
}
WebSocket优化:
location /ws/ {
proxy_pass http://nodejs_cluster;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
HTTP/2配置:
listen 443 ssl http2;
http2_max_concurrent_streams 128;
Nginx监控:
Node.js监控:
node --inspect app.js # Chrome DevTools
clinic doctor -- node app.js
系统级监控:
top
htop
nmon
netdata
通过以上优化组合,可以显著提升高负载环境下Nginx和Node.js的性能表现。实际应用中应根据具体业务场景和负载特点进行针对性调整。