Linux 内核参数优化
一、IP 与路由 / VIP 相关# 允许进程绑定不属于本机真实网卡的IP地址上 # 比如可以让进程绑定到VIP # 0 开启 1 关闭 net.ipv4.ip_nonlocal_bind 1 # 开启内核转发把服务器作为一台路由器使用 # 适用于容器网络NAT网关软路由 net.ipv4.ip_forward 1二、TCP TIME_WAIT 优化高并发端口复用# 允许快速重用 TIME_WAIT 状态的套接字避免端口长时间等待提高端口复用率 # 高并发场景必备 # 0 完全关闭1 开启只允许传输完数据的 TIME_WAIT 连接重用2 强制开启允许在更短时间内重用 TIME_WAIT 状态的端口 net.ipv4.tcp_tw_reuse 1 # 关闭 TIME_WAIT 快速回收 # 在linux内核 4.12被移除了 net.ipv4.tcp_tw_recycle 0 # 控制系统中TIME_WAIT套接字的最大数量。 # 在高并发场景避免端口被使用完 net.ipv4.tcp_max_tw_buckets4194304 # net.ipv4.tcp_fin_timeout 主动关闭连接的超时为30s快速回收端口 net.ipv4.tcp_fin_timeout 30三、TCP 连接队列与网卡缓冲高并发核心# TCP 全连接队列的最大长度完成3次握手时等待应用程序来取走 # 在高并发场景直接拉满 net.core.somaxconn 65535 # 网卡连接队列缓冲区当内核处理TCP 3 次握手来不及时缓冲在网卡队列里面 # 在高并发场景设当调整 net.core.netdev_max_backlog100000四、TCP 缓冲区与端口范围# net.ipv4.tcp_rmem 网卡流量接收缓冲区, net.ipv4.tcp_wmem 网卡发生流量接收缓冲区 # 每条TCP连接最少保证10240KB缓冲区新建连接默认使用的87380KB缓冲区大小单条连接最大使用12582912KB缓冲区 net.ipv4.tcp_rmem10240 87380 12582912 net.ipv4.tcp_wmem10240 87380 12582912 # 设置TCP和UDP的取值范围 net.ipv4.ip_local_port_range1024 65000五、TCP 安全与保活# 防SYN攻击 # 原理是不在将未恢复ACK的客户端连接放到队列中 # 公网服务器必备 net.ipv4.tcp_syncookies 1 # net.ipv4.tcp_keepalive_time 空闲连接5分钟开始探测及时清理死连接 net.ipv4.tcp_keepalive_time 300六、文件描述符高并发必备# 整个系统可以打开的文件描述符的数量 # 可以通过 sysctl fs.file-max 查看 # 9223372036854775807 是 64 位系统里的理论最大值相当于 “无限” 级别. fs.file-max9223372036854775807 # 定义了每个进程可以打开的文件描述符的最大数量 fs.nr_open2147483584七、内存 / 虚拟内存 / 脏页数据库、大模型# 控制单个进程可以拥有的内存映射区域的最大数量 vm.max_map_count262144 # vm.dirty_background_ratio 当脏页占内存达到 5% 时内核后台异步刷盘不阻塞业务 # vm.dirty_ratio 当脏页占内存达到 15% 时阻塞新写入同步强制刷盘 # 适当调整这两个参数可以优化磁盘I/O性能。 vm.dirty_ratio15 vm.dirty_background_ratio5八、共享内存数据库、缓存、大模型# 控制单个共享内存段的最大值和系统上可以使用的共享内存的总量。 # 在需要共享内存应用中非常有用比如数据库大模型直接拉满 kernel.shmmax 18446744073692774399 kernel.shmall 18446744073692774399进程 / 线程数限制# 系统最多能分配多大的进程 IDPID也间接限制了系统能跑多少个进程。 # 最大只能设置 4194304 kernel.pid_max4194304 # 定义了进程和线程的总数 # 对于多线程应用程序适当增加此值以支持更多的线程。 # 一般设置为内存 (GB) × 1 万1.5 万 kernel.threads-max27160