一、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_buckets=4194304
# 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_backlog=100000
四、TCP 缓冲区与端口范围
# net.ipv4.tcp_rmem 网卡流量接收缓冲区, net.ipv4.tcp_wmem 网卡发生流量接收缓冲区
# 每条TCP连接最少保证10240KB缓冲区,新建连接默认使用的87380KB缓冲区大小,单条连接最大使用12582912KB缓冲区
net.ipv4.tcp_rmem="10240 87380 12582912"
net.ipv4.tcp_wmem="10240 87380 12582912"
# 设置TCP和UDP的取值范围
net.ipv4.ip_local_port_range="1024 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-max=9223372036854775807
# 定义了每个进程可以打开的文件描述符的最大数量
fs.nr_open=2147483584
七、内存 / 虚拟内存 / 脏页(数据库、大模型
# 控制单个进程可以拥有的内存映射区域的最大数量
vm.max_map_count=262144
# vm.dirty_background_ratio 当脏页占内存达到 5% 时,内核后台异步刷盘,不阻塞业务
# vm.dirty_ratio 当脏页占内存达到 15% 时,阻塞新写入,同步强制刷盘
# 适当调整这两个参数可以优化磁盘I/O性能。
vm.dirty_ratio=15
vm.dirty_background_ratio=5
八、共享内存(数据库、缓存、大模型)
# 控制单个共享内存段的最大值和系统上可以使用的共享内存的总量。
# 在需要共享内存应用中非常有用,比如数据库,大模型,直接拉满
kernel.shmmax = 18446744073692774399
kernel.shmall = 18446744073692774399
进程 / 线程数限制
# 系统最多能分配多大的进程 ID(PID),也间接限制了系统能跑多少个进程。
# 最大只能设置 4194304
kernel.pid_max=4194304
# 定义了进程和线程的总数
# 对于多线程应用程序,适当增加此值以支持更多的线程。
# 一般设置为内存 (GB) × 1 万~1.5 万
kernel.threads-max=27160