Linux 作为所有应用的底层载体,内核参数默认配置偏保守、优先控制资源开销,未适配高并发场景。当业务流量一上来,那些不起眼的默认值,就会瞬间成为性能瓶颈,直接拖垮整台服务器。
以下是 Linux 服务器生产环境必调的 6 个内核参数,建议全部配置。
1. fs.file-max — 系统全局文件句柄上限
作用:控制系统所有进程可打开的全局最大文件句柄总数。包含:普通文件、Socket 网络连接、管道、设备文件、目录等。
调优原因:
默认值按内存自动计算的,看似充足,但高并发下很容易耗尽。
数据库连接、Nginx / 业务 TCP 连接、进程线程都会持续占用句柄。
一旦超限,应用直接抛出 Too many open files,新连接无法建立、服务瘫痪。
属于系统全局硬上限,进程级别 ulimit -n 设置再高也不能超过该值。
推荐配置:
fs.file-max = 1048576 # 1M,通用生产标配
查看当前值/使用率:
# 查看当前上限sysctl fs.file-max# 查看当前分配/未使用/上限cat /proc/sys/fs/file-nr
2. net.core.somaxconn — TCP 全连接队列
作用:限制已完成 TCP 三次握手,等待应用程序调用 accept() 处理的全连接队列的最大长度。
调优原因:
系统默认仅 128,是高并发 TCP 服务的最常见隐性瓶颈。
即使应用程序内部设置的再大,也会被内核的 somaxconn 参数截断。
队列溢出时,内核会直接丢弃新连接,客户端出现 connection refused 或访问超时。
推荐配置:
net.core.somaxconn = 16384
3. vm.swappiness — 内存交换倾向性
作用:取值 0~100,控制内核将物理内存数据置换到 Swap 分区的积极程度。
调优原因:
推荐配置:
vm.swappiness = 10
特殊场景:
4. net.core.rmem_max / net.core.wmem_max — Socket 收发缓冲区上限
作用:限定单个 Socket 接收 / 发送缓冲区的系统全局最大值。
调优原因:
默认仅约 212KB (212992),远不能满足高带宽要求。
缓冲区不足会直接压制 TCP 吞吐,导致物理网卡带宽无法跑满。
重要提示:此参数不适合海量长连接场景。它适用于连接数较少但单连接吞吐要求高的业务(如文件传输、数据库同步、视频流)。
推荐配置:
net.core.rmem_max = 134217728 # 128MBnet.core.wmem_max = 134217728
5. net.ipv4.tcp_max_syn_backlog — TCP 半连接队列
作用:存放已收到 SYN 包、但未完成三次握手的半开连接的最大数量(也叫 SYN 队列)。
调优原因:
默认 1024 偏小,在高新建连接场景下容易被占满。
可抵御 SYN 洪水攻击,避免恶意半连接耗尽可能资源。
即使开启了 tcp_syncookies,在队列溢出时,一些正常的新连接 SYN 包仍可能被丢弃。
必须与 somaxconn(全连接队列)配套调大,才能完整发挥高并发承载能力。
推荐配置:
net.ipv4.tcp_max_syn_backlog = 8192
6. net.ipv4.tcp_tw_reuse — TIME_WAIT 连接复用
作用:允许将处于 TIME_WAIT 状态的端口安全地用于新的出站连接,配合 TCP 时间戳校验来确认复用是安全的。
调优原因:
在短连接业务中,客户端端口在断开连接后会进入 TIME_WAIT 状态并默认保持 60 秒。高请求频率下,临时端口(默认约 28k 个)很容易耗尽。
端口耗尽时,应用会报 Cannot assign requested address,导致无法建立新的客户端连接。
依赖 tcp_timestamps 开启,系统一般默认已启用。
重要提示:此参数仅对主动连接的一方(作为客户端)有效,例如NAT网关、正向代理、调用第三方接口、K8s节点、Docker宿主机。
推荐配置:
net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_timestamps = 1 # 此功能依赖的选项,通常默认已开启
完整配置
将以下内容保存到 /etc/sysctl.d/99-performance.conf 文件中。
# 1. 文件句柄上限 (1M,通用生产标配)fs.file-max = 1048576# 2. TCP 全连接队列 (Accept 队列)net.core.somaxconn = 16384# 3. 内存交换倾向 (服务器通用)vm.swappiness = 10# 4. Socket 收发缓冲区上限 (128MB,适合高吞吐场景)net.core.rmem_max = 134217728net.core.wmem_max = 134217728# 5. TCP 半连接队列 (SYN 队列)net.ipv4.tcp_max_syn_backlog = 8192# 6. TIME_WAIT 连接复用 (客户端端口复用)net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_timestamps = 1
立即生效:
sudo sysctl -p /etc/sysctl.d/99-performance.conf