当前位置:首页>Linux>生产环境必调 6 个 Linux 内核参数,让服务器又快又稳

生产环境必调 6 个 Linux 内核参数,让服务器又快又稳

  • 2026-10-11 08:11:01
生产环境必调 6 个 Linux 内核参数,让服务器又快又稳

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 分区的积极程度。

  • 数值越小,越优先使用物理内存,尽量不使用 Swap。

  • 数值越大,越主动回收内存并写入 Swap。

调优原因:

  • 默认 60 对于服务器过于激进,在物理内存充足时仍会触发内存交换。

  • Swap 基于磁盘,性能比内存慢上千倍,会造成应用延迟抖动、数据库性能暴跌、K8s 节点异常驱逐。

推荐配置:

vm.swappiness = 10

特殊场景:

  • 数据库(MySQL/Redis/PG):1 (最大限度避免 Swap)

  • 内存小于 2GB 低配机器:60~80 (保留 Swap 防 OOM)

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
往期推荐

最新文章

随机文章