Nginx是大型架构核心,下面我详解Nginx如何提升10倍性能@mikechen

第一步:Linux内核优化

Nginx 的性能上限,很大程度上受到底层 Linux 内核能力的制约。

Nginx如何提升10倍性能:手把手教你4大步骤!-mikechen

因此,首先应从操作系统层面入手,减少连接建立、文件读写和网络转发过程中的资源损耗。

重点改:文件句柄、TCP 连接、端口复用、TIME_WAIT 等。

# 提高文件句柄和端口限制(适配 Nginx worker_connections)
fs.file-max = 1000000
net.core.rmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_default = 262144
net.core.wmem_max = 16777216

# TCP 连接队列、连接数
net.core.netdev_max_backlog = 5000
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535

# 快速回收、重用 TIME_WAIT,适合高并发短连接
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0   # 仅在不使用 NAT 时可用
net.ipv4.tcp_fin_timeout = 30

# 提高端口重用能力
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_max_tw_buckets = 2000000

# 并发连接数、内存
net.ipv4.tcp_max_orphans = 65535
net.ipv4.ip_forward = 1

 

第二步:Nginx worker优化

在操作系统基础打牢之后,下一步就是优化 Nginx 自身的工作方式。

Nginx 的高性能,核心在于其事件驱动、异步非阻塞的模型。

Nginx如何提升10倍性能:手把手教你4大步骤!-mikechen

但如果 worker 参数设置不合理,依然会浪费大量性能。

# worker 进程数:一般是 CPU 核数或 auto
worker_processes  auto;        # 自动匹配核心数
worker_rlimit_nofile 65535;    # 限制 worker 能打开的文件数(与 ulimit 对齐)

events {
    # worker 工作模型:高并发推荐 epoll
    use epoll;
    # 每个 worker 进程最大并发连接数(撑到 1W 甚至 4W 级)
    worker_connections  10240;
    # 多 worker 争抢同一个端口时更公平
    multi_accept on;
}

# 可选:reuseport(Linux 3.9+)
# worker_processes 4;   # 4 核 CPU,4 个 worker
# 在 listen 指令中加上 reuseport,让每个 worker 独立监听

调整 worker_connections 到 10 240~40 960,确保 worker_processes × worker_connections 能支撑目标并发数。

 

第三步:网络架构优化

即使单机 Nginx 性能很强,如果网络架构设计不合理,整体系统依然难以扩展。

因此,第三步要从架构层面降低链路复杂度,并尽可能把请求流量分散到合适的位置。

一种常见且有效的方式,是采用多层负载均衡架构,例如“CDN + SLB + Nginx + 应用服务”。

Nginx如何提升10倍性能:手把手教你4大步骤!-mikechen

通过 CDN 缓存静态资源,可以将大量请求挡在边缘节点,减少源站压力。

通过上层负载均衡分流,可让多台 Nginx 实例并行处理流量,避免单点瓶颈。

 

第四步:业务层优化

真正决定系统性能上限的,往往不是 Nginx 本身,而是业务链路是否足够轻量。

Nginx如何提升10倍性能:手把手教你4大步骤!-mikechen

Nginx 只是入口,若后端业务逻辑复杂、数据库慢查询频繁、接口设计臃肿,再好的前端优化也难以产生持续收益。

因此,业务层优化应优先从减少响应时间入手。

可以通过接口拆分、结果缓存、异步化处理等方式,减少同步阻塞。

评论交流
    说说你的看法