Linux 系统调优场景化指南

按应用类型 + 操作系统分类的精细化调优策略 适用于 CentOS/RHEL 7+/8+、Ubuntu 20.04+/22.04+、Debian 11+


通用原则

原则 说明
先监控后调优 使用 sarbpftraceperf 定位瓶颈
避免过度调优 仅优化实际瓶颈,非瓶颈参数保持默认
备份配置 修改前执行 cp /etc/sysctl.conf /etc/sysctl.conf.bak-$(date +%Y%m%d)
灰度验证 在测试环境压测后再上线

1. 反向代理 / API 网关(Nginx, Envoy)

特征:高并发连接、短连接/长连接混合、大量 TIME_WAIT

✅ 调优重点

  • 网络连接队列
  • TIME_WAIT 快速回收
  • 文件描述符上限
  • TCP 缓冲区

🐧 通用配置(CentOS/Ubuntu/Debian)

# /etc/sysctl.d/90-proxy.conf
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1          # 安全复用 TIME_WAIT 连接
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65535
net.core.rmem_max = 134217728      # 128MB
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728

# 文件描述符
fs.file-max = 2097152

⚙️ 服务级限制(systemd)

# /etc/systemd/system/nginx.service.d/override.conf
[Service]
LimitNOFILE=131072

📌 操作系统差异

系统 注意事项
CentOS 7 默认内核较旧,建议升级至 5.4+ LTS 内核以支持 BBR
Ubuntu 22.04 默认启用 irqbalance,可保留自动优化中断
Debian 11 THP 默认启用,需手动禁用(见数据库章节)

2. Web 应用服务器(Node.js, Java, PHP-FPM)

特征:中等并发、CPU 密集型(Java)、内存敏感(Node.js)

✅ 调优重点

  • 进程/线程限制
  • 虚拟内存 swappiness
  • CPU 调度(Java GC 友好)
  • 文件系统 noatime

🐧 通用配置

# /etc/sysctl.d/90-web.conf
vm.swappiness = 1                  # 避免 swap 影响响应延迟
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
fs.file-max = 1048576

# 关闭透明大页(THP)— 对 Java/Node.js 至关重要!
# 通过 systemd 服务禁用(见数据库章节)

⚙️ 用户级限制(/etc/security/limits.conf)

webuser soft nproc 32768
webuser hard nproc 32768
webuser soft nofile 65536
webuser hard nofile 65536

📌 按语言特殊优化

语言 建议
Java -XX:+UseG1GC,绑定 NUMA 节点:numactl --cpunodebind=0 --membind=0 java ...
Node.js 设置 UV_THREADPOOL_SIZE=8(默认 4),避免阻塞 I/O
PHP-FPM 调整 pm.max_children,避免 OOM

📌 操作系统差异

系统 注意事项
RHEL 8+ 默认启用 tuned,可切换 profile:tuned-adm profile latency-performance
Ubuntu 默认使用 ext4,挂载加 noatime,nodiratime

3. 数据库(MySQL, PostgreSQL, Redis)

特征:I/O 密集、内存敏感、低延迟要求、禁用 THP

✅ 调优重点

  • 禁用透明大页(THP)
  • I/O 调度器(deadline/mq-deadline)
  • 脏页刷写控制
  • NUMA 绑定

🐧 通用配置

# /etc/sysctl.d/90-db.conf
vm.swappiness = 1
vm.dirty_background_ratio = 5
vm.dirty_ratio = 15
vm.dirty_expire_centisecs = 6000    # 60秒强制刷盘
vm.dirty_writeback_centisecs = 500

# 禁用 THP(必须!)
# 通过 systemd 服务实现(见前文)

⚙️ 磁盘挂载选项(/etc/fstab)

# SSD/NVMe
/dev/nvme0n1 /var/lib/mysql ext4 defaults,noatime,nodiratime,barrier=0 0 0

# HDD(带 RAID 卡)
/dev/sdb1 /var/lib/postgresql xfs defaults,noatime,allocsize=64k 0 0

📌 数据库专用建议

数据库 建议
MySQL innodb_flush_method=O_DIRECT,避免双缓冲
PostgreSQL shared_buffers = 25% RAMeffective_cache_size = 50-75% RAM
Redis echo never > /sys/kernel/mm/transparent_hugepage/enabled(启动脚本中)

📌 操作系统差异

系统 注意事项
CentOS 7 默认调度器为 cfq,需手动改为 deadline
Ubuntu 22.04 默认文件系统 ext4,支持 barrier=0(仅安全硬件)
RHEL 9 提供 tuned profile:tuned-adm profile oltp

4. 音视频服务(RTMP, WebRTC, HLS)

特征:高带宽、低抖动、UDP/TCP 混合、实时性要求高

✅ 调优重点

  • 网络缓冲区(尤其 UDP)
  • CPU 隔离(避免调度抖动)
  • 关闭节能模式
  • 增大 socket buffer

🐧 通用配置

# /etc/sysctl.d/90-media.conf
net.core.rmem_default = 262144
net.core.rmem_max = 268435456      # 256MB
net.core.wmem_default = 262144
net.core.wmem_max = 268435456
net.ipv4.udp_rmem_min = 8388608    # 8MB
net.ipv4.udp_wmem_min = 8388608

# 实时性
kernel.sched_rt_runtime_us = 950000  # 允许 RT 任务占 95% CPU

⚙️ CPU 隔离(/etc/default/grub)

GRUB_CMDLINE_LINUX="... isolcpus=4-7 nohz_full=4-7 rcu_nocbs=4-7"

重启后,将流媒体进程绑定到 CPU 4-7:

taskset -c 4-7 ./ffmpeg-server

📌 操作系统差异

系统 注意事项
Ubuntu 20.04+ 支持 PREEMPT_RT 补丁(需自行编译内核)
CentOS Stream 默认内核支持 SCHED_FIFO,适合实时任务

特征:高吞吐 I/O、大内存、网络密集、JVM 应用

✅ 调优重点

  • 大页内存(HugeTLB)
  • I/O 调度器(mq-deadline)
  • 网络缓冲区
  • 关闭 NUMA balancing

🐧 通用配置

# /etc/sysctl.d/90-bigdata.conf
vm.swappiness = 1
vm.dirty_ratio = 40                # 允许更多脏页(高吞吐场景)
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728

# 关闭 NUMA 自动平衡(避免跨节点访问)
kernel.numa_balancing = 0

⚙️ HugeTLB 配置(/etc/sysctl.conf)

# 2MB 大页(根据 JVM Xmx 调整)
vm.nr_hugepages = 10240            # ≈ 20GB

📌 组件专用建议

组件 建议
Kafka 日志目录独立磁盘,ext4 挂载加 data=journal
Flink TaskManager 绑定 NUMA 节点,避免跨 CPU 访问内存
Spark Executor 内存 ≤ 32GB(避免 G1GC 停顿过长)

📌 操作系统差异

系统 注意事项
RHEL 8+ 支持 tuned profile:throughput-performance
Debian 11 默认未启用大页,需手动配置

6. 容器平台(Kubernetes Node)

特征:多租户、资源隔离、cgroup v1/v2、内核模块依赖

✅ 调优重点

  • cgroup 驱动一致性(systemd vs cgroupfs)
  • 内核参数继承
  • 关闭 swap(K8s 强制要求)
  • 网络插件优化(Calico/Cilium)

🐧 通用配置

# /etc/sysctl.d/90-k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0                  # K8s 要求
fs.inotify.max_user_watches = 1048576

⚙️ 禁用 swap

sudo swapoff -a
# 注释 /etc/fstab 中的 swap 行

📌 操作系统差异

系统 推荐配置
Ubuntu 22.04 默认 cgroup v2,K8s 1.25+ 原生支持
CentOS 7 必须使用 cgroup v1,Docker 需配置 "exec-opts": ["native.cgroupdriver=systemd"]
RHEL 8+ 启用 container-tools 模块,使用 Podman 替代 Docker

附录:操作系统差异速查表

调优项 CentOS/RHEL 7 CentOS/RHEL 8/9 Ubuntu 20.04 Ubuntu 22.04 Debian 11
默认文件系统 xfs xfs ext4 ext4 ext4
默认 I/O 调度器 cfq mq-deadline mq-deadline mq-deadline mq-deadline
THP 状态 enabled enabled enabled enabled enabled
包管理 yum/dnf dnf apt apt apt
服务管理 systemd systemd systemd systemd systemd
内核版本 3.10 4.18+ 5.4+ 5.15+ 5.10+
推荐 tuned profile - latency-performance / throughput-performance - - -

💡 统一建议

  • 所有生产服务器 禁用 THP
  • 所有服务器 设置 vm.swappiness=1
  • Web/DB 服务器 关闭透明大页
  • 高并发服务器 增大 net.core.somaxconn

最后更新:2026年1月22日

results matching ""

    No results matching ""