Linux内核内存调优需设vm.swappiness=0或1抑制swap延迟,调整TCP缓冲区(如tcp_rmem/wmem=4096 65536 8388608)适配高带宽,控制脏页比例(dirty_ratio=20、background_ratio=10)平滑I/O,并禁用透明大页(echo never > /sys/.../enabled)。

调整 Linux 内核内存分配策略是支撑大并发网络服务的关键一环,核心在于避免内存争抢、减少换页延迟、保障 socket 缓冲区稳定供给,并防止因内存管理策略不当引发的连接卡顿或拒绝服务。
控制交换行为:禁用或严格限制 swap
高并发网络服务对延迟极度敏感,swap 换出会引入毫秒级甚至更长的不可控延迟。必须抑制内核主动换出内存:
- vm.swappiness = 0:完全禁用主动 swap(推荐用于低延迟网关、API 服务)
- 若业务需保留 swap 容灾能力,设为 vm.swappiness = 1,仅在内存真正濒临耗尽时启用
- 确认生效:
cat /proc/sys/vm/swappiness
优化 TCP 缓冲区自动调节范围
默认缓冲区太小会导致小包频繁拷贝,太大又浪费内存并加剧碎片。应按实际带宽与连接规模设定合理上下限:
- net.ipv4.tcp_rmem = 4096 65536 8388608(接收:最小/默认/最大)
- net.ipv4.tcp_wmem = 4096 65536 8388608(发送:最小/默认/最大)
- 其中最大值(8MB)适配千兆以上带宽下的长肥管道(LFP),同时避免单连接长期霸占过大内存
- 配合 net.core.rmem_max 和 net.core.wmem_max 同步调高至 16MB 级别,允许应用显式设置大缓冲区
约束脏页写回节奏,降低 I/O 干扰
高并发收发常伴随日志、监控等后台写操作,若脏页积压过多,会触发同步刷盘阻塞网络路径:
- vm.dirty_ratio = 20:物理内存中脏页占比达 20% 时,强制进程同步刷盘(避免突发阻塞)
- vm.dirty_background_ratio = 10:达 10% 时启动后台线程异步刷盘,平滑 I/O 压力
- 不建议关闭 dirty 机制,但需避免其抢占网络处理所需的 CPU 与内存带宽
关闭透明大页(THP),防止内存分配卡顿
THP 在高并发短连接场景下易引发周期性内存整理延迟,导致 accept() 或 connect() 延迟抖动:
- 执行:
echo never > /sys/kernel/mm/transparent_hugepage/enabled - 该设置需在开机阶段固化(如通过 systemd 或内核启动参数
transparent_hugepage=never) - 验证:
cat /sys/kernel/mm/transparent_hugepage/enabled应显示 never


















