在高并发场景下(如 Nginx + PHP-FPM 或 Nginx + uWSGI/Gunicorn),Linux 内核参数的优化是提升服务器吞吐量、降低延迟和防止资源耗尽的关键。以下是一份系统化的内核参数优化指南,涵盖网络、文件描述符、内存、进程调度等核心领域。
一、核心优化目标
- 提高连接处理能力:支持更多同时在线用户。
- 减少上下文切换与锁竞争。
- 避免文件描述符/端口耗尽。
- 优化 TCP 协议栈性能。
- 合理分配内存,避免 OOM 或 Swap 抖动。
二、关键内核参数详解(/etc/sysctl.conf)
⚠️ 修改后执行
sysctl -p生效,建议备份原配置。
1. 文件描述符限制(File Descriptors)
Nginx 和 PHP-FPM/uWSGI 每个连接都占用一个文件描述符。高并发下极易触及默认上限(通常为 1024)。
# 系统级最大文件描述符数
fs.file-max = 655350
# 每个进程的最大文件描述符数(需在 /etc/security/limits.conf 中同步设置)
fs.nr_open = 655350
✅ 配套操作:在 /etc/security/limits.conf 中添加:
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
2. TCP 网络栈优化
a. 启用 TCP 快速回收与 TIME_WAIT 管理
# 允许重用 TIME-WAIT sockets
net.ipv4.tcp_tw_reuse = 1
# 缩短 TIME-WAIT socket 等待时间(秒)
net.ipv4.tcp_fin_timeout = 30
# 禁用 TCP 时间戳(若不需要,可提升性能;但建议保留以支持 PAWS)
# net.ipv4.tcp_timestamps = 0
# 启用 TCP 快速打开(TFO),提速三次握手
net.ipv4.tcp_fastopen = 3
# 启用 SYN Cookie 防御 SYN Flood
net.ipv4.tcp_syncookies = 1
# 增加半连接队列和全连接队列长度
net.ipv4.tcp_max_syn_backlog = 65535
net.core.somaxconn = 65535
📌 注意:
somaxconn必须 ≥ Nginx 的listen backlog值,否则 Nginx 会忽略 backlog 设置。
b. 调整 TCP 窗口缩放与拥塞控制
# 启用 TCP 窗口缩放
net.ipv4.tcp_window_scaling = 1
# 使用 BBR 拥塞控制算法(推荐 Linux 4.9+)
net.core.default_qdisc = fq
net.ipv4.congestion_control = bbr
# 增加 TCP 接收/发送缓冲区自动调优范围
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# 增加最大套接字缓冲区
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
3. 内存管理优化
a. 虚拟内存与交换策略
# 降低 swappiness(默认 60),减少不必要的 swap
vm.swappiness = 10
# 提高 inode 缓存效率
vm.vfs_cache_pressure = 50
# 减少透明大页(THP)对低延迟应用的负面影响(可选)
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
b. 内存过载保护
# 当内存不足时,更积极地回收页面而非触发 OOM
vm.overcommit_memory = 1
vm.overcommit_ratio = 90
4. 进程与调度优化
a. 增加最大进程数
# 系统级最大进程数
kernel.pid_max = 65535
# 确保 ulimit -u 足够大(通过 limits.conf 设置)
b. 禁用 NUMA 平衡(单 NUMA 节点服务器)
# 如果服务器是单 NUMA 节点,可禁用 NUMA 平衡以提升局部性
numa_balancing = 0
5. 其他实用参数
# 启用 IP 转发(如需作为网关)
net.ipv4.ip_forward = 0
# 禁用 ICMP 重定向(安全加固)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# 启用反向路径过滤(严格模式)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
三、应用层配合优化
仅调优内核不够,还需与应用协同:
1. Nginx 配置要点
worker_processes auto; # 匹配 CPU 核心数
worker_rlimit_nofile 65535; # 与 sysctl fs.nr_open 一致
events {
worker_connections 65535; # 单个 worker 最大连接数
use epoll; # Linux 下使用 epoll
multi_accept on; # 一次接受多个新连接
}
http {
keepalive_timeout 65;
keepalive_requests 10000; # 长连接复用
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# 上传大小限制
client_max_body_size 10m;
}
2. PHP-FPM 优化
pm = dynamic ; 动态子进程管理
pm.max_children = 50 ; 根据内存和负载调整
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500 ; 防止内存泄漏
request_terminate_timeout = 30s ; 超时杀死僵死进程
3. Python(uWSGI/Gunicorn)优化
- Gunicorn:
gunicorn app:app --workers 4 --threads 2 --timeout 30 - uWSGI:
processes = 4 threads = 2 master = true vacuum = true max-requests = 5000
四、监控与验证
-
检查当前参数:
sysctl -a | grep tcp cat /proc/sys/fs/file-nr ulimit -n ss -s -
监控关键指标:
netstat -an | grep TIME_WAIT | wc -lss -s查看连接状态分布dmesg | grep -i oom检查是否发生 OOM- 使用
htop、iotop、nethogs监控资源
-
压测验证:
使用wrk、ab或hey进行压力测试,观察 QPS、延迟、错误率变化。
五、注意事项
- 渐进式调整:不要一次性修改所有参数,逐步调整并观察效果。
- 硬件依赖:CPU 核心数、内存大小、磁盘 I/O 都会影响最优参数。
- 版本兼容:BBR 需要 Linux 内核 ≥ 4.9,TCP Fast Open 需要内核 ≥ 3.7。
- 安全考量:某些参数(如
tcp_tw_reuse)在特定网络环境下可能带来风险,需结合实际业务评估。 - 重启服务:部分参数需重启 Nginx/PHP-FPM 才能完全生效。
六、完整 sysctl.conf 示例片段
# File descriptors
fs.file-max = 655350
fs.nr_open = 655350
# Network optimization
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_syn_backlog = 65535
net.core.somaxconn = 65535
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.default_qdisc = fq
net.ipv4.congestion_control = bbr
# Memory management
vm.swappiness = 10
vm.vfs_cache_pressure = 50
vm.overcommit_memory = 1
# Process limits
kernel.pid_max = 65535
通过以上优化,Nginx + PHP/Python 架构在高并发场景下的稳定性、吞吐量和响应速度将得到显著提升。务必结合具体业务负载、硬件资源和监控数据进行持续调优。
云服务器