针对高并发Nginx服务器的Linux内核优化,以下是一套全面的优化方案:
# 增加系统文件描述符限制
echo "fs.file-max = 1000000" >> /etc/sysctl.conf
# 网络核心参数
echo "net.core.somaxconn = 32768" >> /etc/sysctl.conf
echo "net.core.netdev_max_backlog = 32768" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 65536" >> /etc/sysctl.conf
# TCP连接参数
echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle = 0" >> /etc/sysctl.conf # 在NAT环境下建议关闭
echo "net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.conf
echo "net.ipv4.tcp_keepalive_time = 1200" >> /etc/sysctl.conf
# 端口范围
echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf
# 内存相关
echo "net.ipv4.tcp_mem = 786432 1048576 1572864" >> /etc/sysctl.conf
echo "net.ipv4.tcp_rmem = 4096 87380 4194304" >> /etc/sysctl.conf
echo "net.ipv4.tcp_wmem = 4096 16384 4194304" >> /etc/sysctl.conf
# 其他优化
echo "net.ipv4.tcp_slow_start_after_idle = 0" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_tw_buckets = 6000" >> /etc/sysctl.conf
# 增加系统inotify限制
echo "fs.inotify.max_user_instances = 65536" >> /etc/sysctl.conf
echo "fs.inotify.max_user_watches = 65536" >> /etc/sysctl.conf
# 文件系统缓存
echo "vm.swappiness = 10" >> /etc/sysctl.conf
echo "vm.vfs_cache_pressure = 50" >> /etc/sysctl.conf
echo "vm.dirty_background_ratio = 5" >> /etc/sysctl.conf
echo "vm.dirty_ratio = 10" >> /etc/sysctl.conf
# 修改/etc/security/limits.conf
echo "* soft nofile 1000000" >> /etc/security/limits.conf
echo "* hard nofile 1000000" >> /etc/security/limits.conf
echo "* soft nproc 65535" >> /etc/security/limits.conf
echo "* hard nproc 65535" >> /etc/security/limits.conf
echo "root soft nofile 1000000" >> /etc/security/limits.conf
echo "root hard nofile 1000000" >> /etc/security/limits.conf
# 修改nginx worker配置
worker_processes auto; # 自动设置为CPU核心数
worker_rlimit_nofile 100000; # 每个worker进程的文件描述符限制
events {
worker_connections 65536; # 每个worker进程的最大连接数
use epoll; # 使用epoll事件模型
multi_accept on; # 一次接受多个连接
}
# 使sysctl配置生效
sysctl -p
# 重新加载limits.conf配置
# 需要重新登录或重启相关服务
内核版本选择:使用较新的稳定版内核(如4.x或5.x),它们通常有更好的性能和并发处理能力
TCP协议栈调优:
中断平衡:
apt-get install irqbalance # Debian/Ubuntu
yum install irqbalance # CentOS/RHEL
systemctl enable irqbalance
systemctl start irqbalance
NUMA优化:
# 启动Nginx时绑定CPU核心
taskset -c 0,2,4,6 nginx
透明大页(THP)禁用:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
这些优化需要根据实际服务器配置和负载情况进行调整,建议在修改前备份原有配置,并在测试环境中验证效果后再应用到生产环境。