在 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. 其他注意事项
- 验证配置:
执行sysctl -p
后,通过sysctl -a | grep <参数名>
或ss -lntp
检查实际生效值。 - 监控调优效果:
使用netstat -s
、vmstat
、dmesg
等工具观察错误(如TCP: time wait bucket table overflow
)。 - 内核版本差异:
- Linux 4.1+ 移除了
tcp_tw_recycle
,建议改用tcp_tw_reuse
。 - 高并发场景可能需要调整
net.ipv4.tcp_max_tw_buckets
(TIME_WAIT 连接数上限)。
- Linux 4.1+ 移除了
通过以上调整,可以显著提升 Nginx 在高并发场景下的性能,但需根据实际负载测试逐步优化参数。
作者:严锋 创建时间:2025-05-19 11:07
最后编辑:严锋 更新时间:2025-05-19 11:07
最后编辑:严锋 更新时间:2025-05-19 11:07