在 CentOS 下优化 Nginx 性能时,可以通过调整以下系统内核参数来提升并发处理能力、连接稳定性和资源利用率。这些参数主要通过 /etc/sysctl.conf 文件配置,修改后需执行 sysctl -p 生效。


1. 网络连接相关参数

TCP/IP 协议栈优化

# 允许端口快速复用(避免 TIME_WAIT 状态堆积)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1  # 注意:在 NAT 环境中可能有问题,Linux 4.1+ 已移除

# 增大 TCP 连接队列大小(避免丢连接)
net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 65535  # 每个端口最大监听队列长度

# 加快 TCP 连接建立/关闭
net.ipv4.tcp_fin_timeout = 30       # FIN 超时时间
net.ipv4.tcp_syncookies = 1         # 防止 SYN 洪水攻击
net.ipv4.tcp_syn_retries = 2        # SYN 重试次数
net.ipv4.tcp_synack_retries = 2     # SYN-ACK 重试次数

# 增大可用端口范围
net.ipv4.ip_local_port_range = 1024 65535

连接追踪与缓冲区

# 增大连接追踪表大小(高并发时避免溢出)
net.netfilter.nf_conntrack_max = 655350
net.nf_conntrack_max = 655350

# 调整 TCP 读写缓冲区
net.core.rmem_max = 16777216      # 最大接收缓冲区
net.core.wmem_max = 16777216      # 最大发送缓冲区
net.ipv4.tcp_rmem = 4096 87380 16777216  # 接收缓冲区范围
net.ipv4.tcp_wmem = 4096 65536 16777216  # 发送缓冲区范围

2. 文件描述符与进程限制

全局文件描述符限制

# 系统最大文件描述符数
fs.file-max = 655350

# Nginx 进程需要大量文件句柄
fs.nr_open = 655350

用户进程限制

/etc/security/limits.conf 中为 Nginx 用户(如 nginx)增加限制:

nginx soft nofile 65535
nginx hard nofile 655350
nginx soft nproc 65535
nginx hard nproc 655350

3. 内存与缓存优化

# 减少内存碎片
vm.swappiness = 10                # 降低交换分区使用倾向
vm.overcommit_memory = 1          # 允许适度内存超分配(需谨慎)

# 调整内核缓存行为
net.ipv4.tcp_mem = 8388608 12582912 16777216  # TCP 内存自动调整
net.core.netdev_max_backlog = 50000           # 网卡接收队列长度

4. Nginx 自身配置联动

调整内核参数后,需同步优化 Nginx 配置文件(nginx.conf):

worker_processes auto;                     # 匹配 CPU 核心数
worker_rlimit_nofile 65535;               # 与内核文件描述符限制一致
events {
    worker_connections 65535;             # 每个 worker 的最大连接数
    multi_accept on;                      # 一次性接受所有新连接
    use epoll;                            # Linux 高性能事件模型
}

5. 其他注意事项

  1. 验证配置
    执行 sysctl -p 后,通过 sysctl -a | grep <参数名>ss -lntp 检查实际生效值。
  2. 监控调优效果
    使用 netstat -svmstatdmesg 等工具观察错误(如 TCP: time wait bucket table overflow)。
  3. 内核版本差异
    • Linux 4.1+ 移除了 tcp_tw_recycle,建议改用 tcp_tw_reuse
    • 高并发场景可能需要调整 net.ipv4.tcp_max_tw_buckets(TIME_WAIT 连接数上限)。

通过以上调整,可以显著提升 Nginx 在高并发场景下的性能,但需根据实际负载测试逐步优化参数。

作者:严锋  创建时间:2025-05-19 11:07
最后编辑:严锋  更新时间:2025-05-19 11:07