插件窝 干货文章 高并发nginx服务器的linux内核如何优化

高并发nginx服务器的linux内核如何优化

sysctl conf echo etc 966    来源:    2025-04-25

Nginx高并发服务器的Linux内核优化指南

针对高并发Nginx服务器的Linux内核优化,以下是一套全面的优化方案:

1. 网络相关参数优化

# 增加系统文件描述符限制
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

2. 文件系统优化

# 增加系统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

3. 进程和线程限制

# 修改/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

4. Nginx特定优化

# 修改nginx worker配置
worker_processes auto;  # 自动设置为CPU核心数
worker_rlimit_nofile 100000;  # 每个worker进程的文件描述符限制

events {
    worker_connections 65536;  # 每个worker进程的最大连接数
    use epoll;  # 使用epoll事件模型
    multi_accept on;  # 一次接受多个连接
}

5. 应用优化后

# 使sysctl配置生效
sysctl -p

# 重新加载limits.conf配置
# 需要重新登录或重启相关服务

6. 其他建议

  1. 内核版本选择:使用较新的稳定版内核(如4.x或5.x),它们通常有更好的性能和并发处理能力

  2. TCP协议栈调优

    • 启用TCP Fast Open (net.ipv4.tcp_fastopen = 3)
    • 调整拥塞控制算法(如使用cubic或bbr)
  3. 中断平衡

    apt-get install irqbalance  # Debian/Ubuntu
    yum install irqbalance     # CentOS/RHEL
    systemctl enable irqbalance
    systemctl start irqbalance
    
  4. NUMA优化

    # 启动Nginx时绑定CPU核心
    taskset -c 0,2,4,6 nginx
    
  5. 透明大页(THP)禁用

    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    

这些优化需要根据实际服务器配置和负载情况进行调整,建议在修改前备份原有配置,并在测试环境中验证效果后再应用到生产环境。