关注「Raymond运维」公众号,并设为「星标」,也可以扫描底部二维码加入群聊,第一时间获取最新内容,不再错过精彩内容。
Linux内核参数sysctl.conf生产调优:5分钟完成高并发Web服务器优化清单
适用场景 & 前置条件
适用业务:高并发 Web/API 服务器、数据库服务器、负载均衡器、容器宿主机(QPS > 1000)前置条件:
- • Linux 内核 ≥ 3.10(RHEL 7)/ ≥ 4.15(Ubuntu 18.04)
- • 现有配置备份(
/etc/sysctl.conf 或 /etc/sysctl.d/*.conf) - • 了解当前业务类型(CPU 密集/网络密集/内存密集)
环境与版本矩阵
| | | |
|---|
| | | |
| | | |
| | | |
| RHEL 8, Ubuntu 20.04/22.04 | | |
快速清单(Checklist)
- 1. 备份当前内核参数(
sysctl -a 导出) - 2. 识别业务类型与瓶颈(CPU/网络/内存/磁盘 I/O)
- 4. 优化 TCP 协议栈(快速回收/TIME_WAIT/BBR)
- 5. 调整内存与 Swap 策略(OOM/脏页回写)
- 6. 优化文件描述符与 IPC 限制(ulimit/共享内存)
- 7. 应用参数并验证(
sysctl -p 与回显确认) - 8. 压测验证性能提升(wrk/ab/sysbench)
实施步骤
Step 1:备份当前内核参数
导出所有当前参数:
# 导出到文件sysctl -a > /root/sysctl-backup-$(date +%Y%m%d-%H%M%S).txt# 备份配置文件cp /etc/sysctl.conf /etc/sysctl.conf.backupcp -r /etc/sysctl.d/ /etc/sysctl.d.backup/
验证备份完整性:
wc -l /root/sysctl-backup-*.txt# 预期输出:800-1200 行(根据内核版本)
查看当前关键参数:
sysctl net.core.somaxconn net.ipv4.tcp_max_syn_backlog net.ipv4.ip_local_port_range
Step 2:识别业务类型与瓶颈
诊断网络连接数瓶颈:
# 查看当前连接数ss -s# 查看 TIME_WAIT 连接数ss -tan | grep TIME_WAIT | wc -l# 查看 SYN_RECV 连接数(半连接队列)ss -tan | grep SYN_RECV | wc -l# 查看监听队列溢出统计netstat -s | grep -E "listen|overflow"
预期问题特征:
- •
TIME_WAIT > 5000:需优化快速回收 - •
SYN_RECV > 100:需增大半连接队列 - •
listen queue overflow:需增大 somaxconn
诊断内存瓶颈:
free -hcat /proc/meminfo | grep -E "Dirty|Writeback|Committed"
预期问题特征:
- •
Committed_AS > MemTotal:内存超卖严重
Step 3:应用网络连接数优化(高并发场景)
创建 /etc/sysctl.d/90-network-tuning.conf:
# === 网络核心参数 ===# 增大监听队列长度(应用层 listen() 的 backlog 上限)# 默认 128,高并发场景建议 4096-65535net.core.somaxconn = 65535# 增大网卡接收队列(防止网卡丢包)# 默认 1000,建议 10000-65535net.core.netdev_max_backlog = 65535# 增大系统默认接收/发送缓冲区(单位:字节)# 默认 ~200KB,建议 4MBnet.core.rmem_default = 4194304net.core.wmem_default = 4194304# 增大系统最大接收/发送缓冲区# 默认 ~4MB,建议 16MBnet.core.rmem_max = 16777216net.core.wmem_max = 16777216# === TCP 协议栈优化 ===# 增大 TCP 半连接队列(SYN_RECV 状态)# 默认 128/256,高并发建议 8192-65535net.ipv4.tcp_max_syn_backlog = 65535# 扩大本地端口范围(客户端连接可用端口)# 默认 32768-60999,建议 10000-65535(支持 55535 个并发连接)net.ipv4.ip_local_port_range = 1000065535# 增大全局最大连接数(所有 TCP 连接的跟踪表)# 默认根据内存动态计算,手动设置可避免自动限制net.netfilter.nf_conntrack_max = 1048576net.nf_conntrack_max = 1048576# 旧版内核兼容# 增大连接跟踪表 bucket 数量(优化查找性能)# 建议为 nf_conntrack_max 的 1/4net.netfilter.nf_conntrack_buckets = 262144# === TCP 缓冲区自动调优 ===# TCP 读缓冲区(min/default/max,单位:字节)# 第 3 值为单连接最大值,建议 16MB(支持高带宽长肥网络)net.ipv4.tcp_rmem = 40968738016777216# TCP 写缓冲区net.ipv4.tcp_wmem = 40966553616777216# TCP 内存限制(min/pressure/max,单位:页,1 页 = 4KB)# 计算公式:(总内存 GB × 0.25) / 4 × 1024 × 1024# 示例:32GB 内存 → max = 2097152 页 = 8GBnet.ipv4.tcp_mem = 78643210485762097152
应用配置:
sysctl -p /etc/sysctl.d/90-network-tuning.conf
验证生效:
sysctl net.core.somaxconn net.ipv4.tcp_max_syn_backlog net.ipv4.ip_local_port_range
预期输出:
net.core.somaxconn = 65535net.ipv4.tcp_max_syn_backlog = 65535net.ipv4.ip_local_port_range = 10000 65535
Step 4:优化 TCP 协议栈(连接复用与快速回收)
继续编辑 /etc/sysctl.d/90-network-tuning.conf:
# === TCP TIME_WAIT 优化 ===# 启用 TIME_WAIT 快速回收(客户端场景,如反向代理/负载均衡)# 注意:不适用于 NAT 环境(可能导致连接失败)net.ipv4.tcp_tw_reuse = 1# TIME_WAIT 超时时间(秒)# 默认 60s,可降低到 30s(需确保网络延迟 < 15s)# 注意:内核 4.12+ 已移除此参数,改为固定 60s# net.ipv4.tcp_tw_timeout = 30 # 仅旧内核支持# 减少 TIME_WAIT 连接数(通过启用快速回收 + 端口复用)# 已通过 tcp_tw_reuse 实现# === TCP 连接保活 ===# TCP keepalive 探测间隔(秒)# 默认 75s,建议 30s(快速检测死连接)net.ipv4.tcp_keepalive_intvl = 30# TCP keepalive 探测次数# 默认 9 次,建议 3 次(90 秒内检测出死连接)net.ipv4.tcp_keepalive_probes = 3# TCP keepalive 空闲时间(秒)# 默认 7200s(2 小时),建议 600s(10 分钟)net.ipv4.tcp_keepalive_time = 600# === TCP 拥塞控制(BBR 算法)===# 查看可用拥塞控制算法# sysctl net.ipv4.tcp_available_congestion_control# 启用 BBR(需要内核 4.9+)# BBR 可显著提升带宽利用率与降低延迟net.ipv4.tcp_congestion_control = bbrnet.core.default_qdisc = fq # BBR 依赖 FQ 队列调度# === TCP 快速打开(TFO)===# 启用 TCP Fast Open(客户端 + 服务端)# 0=禁用, 1=客户端, 2=服务端, 3=全部启用# 建议值:3(需应用层支持,如 Nginx 1.5.8+)net.ipv4.tcp_fastopen = 3# === FIN_WAIT 超时优化 ===# 减少 FIN_WAIT2 超时时间(秒)# 默认 60s,建议 30snet.ipv4.tcp_fin_timeout = 30# === SYN Cookie(防 SYN Flood 攻击)===# 启用 SYN Cookie# 当 SYN 队列溢出时,使用 Cookie 机制避免拒绝连接net.ipv4.tcp_syncookies = 1# 增大 SYN Cookie 的重试次数# 默认 5,建议 2(减少握手延迟)net.ipv4.tcp_synack_retries = 2net.ipv4.tcp_syn_retries = 2
关键参数解释:
- •
tcp_tw_reuse:允许新连接复用 TIME_WAIT 状态的端口(仅客户端) - •
tcp_congestion_control = bbr:使用 BBR 算法替代 CUBIC(需内核 4.9+) - •
tcp_fastopen:首次握手时携带数据(减少 1 RTT 延迟)
验证 BBR 启用:
# 检查当前拥塞控制算法sysctl net.ipv4.tcp_congestion_control# 检查 BBR 模块是否加载lsmod | grep tcp_bbr
如 BBR 未加载(需手动加载):
# 加载 BBR 模块modprobe tcp_bbr# 持久化加载echo"tcp_bbr" >> /etc/modules-load.d/bbr.conf
应用配置:
sysctl -p /etc/sysctl.d/90-network-tuning.conf
Step 5:调整内存与 Swap 策略
创建 /etc/sysctl.d/91-memory-tuning.conf:
# === Swap 策略 ===# 降低 Swap 使用倾向(swappiness)# 默认 60,建议值:# - 0-10:数据库/缓存服务器(避免性能抖动)# - 10-30:通用服务器# - 60:桌面系统vm.swappiness = 10# === 脏页回写优化 ===# 脏页占总内存的百分比阈值(触发后台回写)# 默认 10-20%,建议 5%(避免突发 I/O)vm.dirty_background_ratio = 5# 脏页占总内存的百分比阈值(触发阻塞回写)# 默认 20-40%,建议 10%vm.dirty_ratio = 10# 脏页最长存活时间(厘秒,1/100 秒)# 默认 3000(30 秒),建议 1500(15 秒)vm.dirty_expire_centisecs = 1500# 脏页回写间隔(厘秒)# 默认 500(5 秒),建议 200(2 秒)vm.dirty_writeback_centisecs = 200# === 内存分配策略 ===# 内存超卖策略(overcommit)# 0=严格检查, 1=允许超卖, 2=允许超卖但限制在 overcommit_ratio# 建议值:容器宿主机=0,通用服务器=1vm.overcommit_memory = 1# 超卖比例(百分比)# 默认 50,仅当 overcommit_memory=2 时生效vm.overcommit_ratio = 80# === OOM Killer 策略 ===# 内核 Panic 行为(OOM 时是否重启)# 0=不重启, 1=重启# 生产环境建议 0(避免自动重启)vm.panic_on_oom = 0# OOM Killer 触发阈值(0-100)# 默认 0(内存完全耗尽时触发)# 可设置为 5-10(预留缓冲)# vm.admin_reserve_kbytes = 8192 # 预留 8MB 给 root 用户# === 透明大页(THP)===# 禁用透明大页(数据库场景建议禁用)# echo never > /sys/kernel/mm/transparent_hugepage/enabled# 通过 systemd 持久化(需创建 systemd 服务)
关键参数解释:
- •
vm.swappiness:值越低,内核越倾向使用物理内存 - •
vm.dirty_ratio:脏页达到此阈值时,写入进程会被阻塞(影响性能) - •
vm.overcommit_memory=1:允许申请超过物理内存的空间(适合 fork 密集场景)
禁用透明大页(数据库/Redis 场景):
# 临时禁用echo never > /sys/kernel/mm/transparent_hugepage/enabledecho never > /sys/kernel/mm/transparent_hugepage/defrag# 持久化禁用(通过 systemd)cat > /etc/systemd/system/disable-thp.service <<EOF[Unit]Description=Disable Transparent Huge Pages (THP)DefaultDependencies=noAfter=sysinit.target local-fs.targetBefore=mongod.service mysql.service redis.service[Service]Type=oneshotExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'[Install]WantedBy=basic.targetEOFsystemctl enable disable-thp.servicesystemctl start disable-thp.service
应用配置:
sysctl -p /etc/sysctl.d/91-memory-tuning.conf
验证生效:
sysctl vm.swappiness vm.dirty_ratio vm.overcommit_memorycat /sys/kernel/mm/transparent_hugepage/enabled
Step 6:优化文件描述符与 IPC 限制
创建 /etc/sysctl.d/92-limits-tuning.conf:
# === 文件描述符限制 ===# 系统级最大文件描述符数量# 默认 ~100000,高并发建议 1000000-10000000fs.file-max = 2097152# 单个进程最大文件描述符数(需配合 ulimit)# 通过 /etc/security/limits.conf 设置# === 共享内存限制(数据库/消息队列场景)===# 单个共享内存段最大字节数# 默认 32MB,数据库建议设置为物理内存的 50%# 计算公式:物理内存(GB) × 0.5 × 1024^3# 示例:32GB 内存 → 17179869184(16GB)kernel.shmmax = 68719476736# 64GB# 系统范围共享内存总量(页数,1 页 = 4KB)# 默认值较低,建议设置为 shmmax / 4096kernel.shmall = 16777216# 64GB / 4KB# 共享内存段最大数量# 默认 4096,大规模容器宿主机建议 65536kernel.shmmni = 65536# === 信号量限制 ===# 信号量参数(数据库场景)# 格式:SEMMSL SEMMNS SEMOPM SEMMNI# SEMMSL:每个信号量集最大信号量数# SEMMNS:系统范围最大信号量数# SEMOPM:每次 semop 调用最大操作数# SEMMNI:系统范围最大信号量集数kernel.sem = 25032000100128# === IPC 消息队列 ===# 单个消息最大字节数# 默认 8192,建议 65536kernel.msgmax = 65536# 单个队列最大字节数# 默认 16384,建议 1048576(1MB)kernel.msgmnb = 1048576
配合 ulimit 调整进程级限制:
编辑 /etc/security/limits.conf:
# 格式:<domain> <type> <item> <value># 所有用户打开文件数限制* soft nofile 1048576* hard nofile 1048576# 特定用户(如 nginx/mysql)nginx soft nofile 1048576nginx hard nofile 1048576mysql soft nofile 1048576mysql hard nofile 1048576# 进程数限制* soft nproc 65536* hard nproc 65536# 核心转储文件大小(调试用,生产环境可设为 0)* soft core 0* hard core 0
验证 ulimit 生效(需重新登录):
# 查看当前会话限制ulimit -a# 查看特定进程的限制cat /proc/$(pidof nginx | awk '{print $1}')/limits
应用配置:
sysctl -p /etc/sysctl.d/92-limits-tuning.conf
Step 7:容器宿主机专用优化(K8s/Docker)
创建 /etc/sysctl.d/93-container-tuning.conf:
# === 网桥与 iptables ===# 允许 iptables 处理桥接流量(K8s 必需)net.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1# 启用 IP 转发(容器间路由)net.ipv4.ip_forward = 1net.ipv6.conf.all.forwarding = 1# === Netfilter 连接跟踪 ===# 增大连接跟踪表(容器密集场景)net.netfilter.nf_conntrack_max = 2097152# 连接跟踪超时(秒)# TCP 已建立连接超时,默认 432000(5 天),建议 3600(1 小时)net.netfilter.nf_conntrack_tcp_timeout_established = 3600# TIME_WAIT 连接跟踪超时,默认 120s,建议 30snet.netfilter.nf_conntrack_tcp_timeout_time_wait = 30# === ARP 缓存 ===# 增大 ARP 缓存表(大量 Pod 场景)# 默认 ~256,建议 8192net.ipv4.neigh.default.gc_thresh1 = 1024net.ipv4.neigh.default.gc_thresh2 = 4096net.ipv4.neigh.default.gc_thresh3 = 8192# === 内核线程数 ===# 增大内核线程数限制(容器密集场景)kernel.threads-max = 1048576kernel.pid_max = 4194304# === 虚拟内存 ===# 降低容器场景的内存回收激进度vm.min_free_kbytes = 1048576# 预留 1GB 空闲内存
关键参数解释:
- •
net.bridge.bridge-nf-call-iptables:K8s Service 流量经过 iptables 规则 - •
nf_conntrack_max:容器化场景连接数通常 > 虚拟机 - •
vm.min_free_kbytes:预留内存避免内存碎片导致 OOM
应用配置:
# 加载 br_netfilter 模块(K8s 必需)modprobe br_netfilterecho"br_netfilter" >> /etc/modules-load.d/k8s.confsysctl -p /etc/sysctl.d/93-container-tuning.conf
Step 8:压测验证性能提升
Web 服务器压测(使用 wrk):
# 安装 wrk# Ubuntusudo apt install -y wrk# RHEL/CentOS(需要 EPEL)sudo yum install -y epel-release && sudo yum install -y wrk# 压测前记录基线wrk -t 8 -c 1000 -d 60s --latency http://localhost/# 应用内核参数调优后重新压测wrk -t 8 -c 1000 -d 60s --latency http://localhost/
预期性能提升(高并发场景):
数据库压测(使用 sysbench):
# 安装 sysbench# Ubuntusudo apt install -y sysbench# RHEL/CentOSsudo yum install -y sysbench# OLTP 读写混合压测sysbench oltp_read_write \ --mysql-host=localhost \ --mysql-user=test \ --mysql-password=password \ --tables=10 \ --table-size=100000 \ --threads=64 \ --time=60 \ run
预期性能提升(数据库场景):
Step 9:监控关键指标变化
网络连接数监控:
# 实时监控连接状态分布watch -n 1 'ss -s'# 监控 TIME_WAIT 连接数watch -n 1 'ss -tan | grep TIME_WAIT | wc -l'
连接跟踪表使用率:
# 当前连接数 / 最大连接数cat /proc/sys/net/netfilter/nf_conntrack_countcat /proc/sys/net/netfilter/nf_conntrack_max# 计算使用率echo"scale=2; $(cat /proc/sys/net/netfilter/nf_conntrack_count) / $(cat /proc/sys/net/netfilter/nf_conntrack_max) * 100" | bc
内存与 Swap 监控:
# 实时监控内存使用watch -n 1 free -h# 监控脏页数量watch -n 1 'cat /proc/meminfo | grep -E "Dirty|Writeback"'
Prometheus 监控指标:
# 连接跟踪表使用率node_nf_conntrack_entries / node_nf_conntrack_entries_limit > 0.8# TIME_WAIT 连接数node_sockstat_TCP_tw > 10000# 监听队列溢出rate(node_netstat_TcpExt_ListenOverflows[5m]) > 0# 脏页占比node_memory_Dirty_bytes / node_memory_MemTotal_bytes > 0.1
Step 10:持久化配置并文档化
合并所有配置到单文件(可选):
# 合并到 /etc/sysctl.d/99-production.confcat /etc/sysctl.d/90-network-tuning.conf \ /etc/sysctl.d/91-memory-tuning.conf \ /etc/sysctl.d/92-limits-tuning.conf \ /etc/sysctl.d/93-container-tuning.conf \ > /etc/sysctl.d/99-production.conf
版本管理:
cd /etcgit initgit add sysctl.conf sysctl.d/*.conf security/limits.confgit commit -m "Initial kernel tuning configuration"
创建变更记录文档/etc/sysctl.d/README.md:
# 内核参数调优记录## 变更日期:2025-10-31## 变更人:SRE Team## 业务场景:高并发 Web 服务器(Nginx + K8s)### 关键变更:1. 增大监听队列:somaxconn 655352. 启用 BBR 拥塞控制3. TIME_WAIT 快速回收:tcp_tw_reuse=14. 降低 Swap 使用:swappiness=105. 禁用透明大页(THP)### 性能基线:- 调优前:QPS 15000, P99 50ms, 连接错误率 3%- 调优后:QPS 22000, P99 30ms, 连接错误率 0.05%### 回滚命令:```bashcp /etc/sysctl.conf.backup /etc/sysctl.confsysctl -p
---## 监控与告警### 关键内核指标监控```bash# 监听队列溢出netstat -s | grep "times the listen queue of a socket overflowed"# SYN 丢弃统计netstat -s | grep "SYNs to LISTEN sockets dropped"# TCP 重传率netstat -s | grep "segments retransmitted"
Prometheus 告警规则
groups:-name:kernel-tuningrules:-alert:HighConntrackUsageexpr:node_nf_conntrack_entries/node_nf_conntrack_entries_limit>0.9for:5mannotations:summary:"连接跟踪表使用率超过 90%"-alert:ListenQueueOverflowexpr:rate(node_netstat_TcpExt_ListenOverflows[5m])>0for:1mannotations:summary:"监听队列溢出,需增大 somaxconn"-alert:HighSwapUsageexpr:(node_memory_SwapTotal_bytes-node_memory_SwapFree_bytes)/node_memory_SwapTotal_bytes>0.5for:10mannotations:summary:"Swap 使用率超过 50%,检查内存泄漏"
性能与容量
不同业务场景推荐配置
| | |
|---|
| 高并发 Web | | |
| | |
| | |
| | |
| 数据库 | | |
| | |
| | |
| 负载均衡器 | | |
| | |
| | |
| 容器宿主机 | | |
| | |
| | |
| CDN 边缘节点 | | |
| | |
| | |
安全与合规
防 DDoS 参数
# 启用 SYN Cookie(防 SYN Flood)net.ipv4.tcp_syncookies = 1# 减少 SYN 重试次数(快速丢弃攻击连接)net.ipv4.tcp_syn_retries = 2net.ipv4.tcp_synack_retries = 2# 启用反向路径过滤(防 IP 欺骗)net.ipv4.conf.all.rp_filter = 1net.ipv4.conf.default.rp_filter = 1# 禁用 ICMP 重定向(防中间人攻击)net.ipv4.conf.all.accept_redirects = 0net.ipv4.conf.default.accept_redirects = 0net.ipv4.conf.all.send_redirects = 0# 禁用源路由(防路由劫持)net.ipv4.conf.all.accept_source_route = 0net.ipv4.conf.default.accept_source_route = 0# 启用 TCP 时间戳(防序列号猜测)net.ipv4.tcp_timestamps = 1# 记录可疑数据包(Martian Packets)net.ipv4.conf.all.log_martians = 1
合规核对点
- • [ ] 参数变更通过变更管理流程(CAB 审批)
- • [ ] 配置纳入版本控制(Git)并记录变更原因
- • [ ] 关键参数调整建立回滚剧本(5 分钟内可回退)
- • [ ] 监控告警规则同步更新(如 conntrack 阈值)
常见故障与排错
| | | | |
|---|
| ss -lnt | | sysctl -w net.core.somaxconn=65535 | |
| ss -tan | grep TIME_WAIT | wc -l | | | |
| dmesg | grep nf_conntrack | | | |
| dmesg | grep oom | | | |
| iostat -x 1 | | | |
| sysctl net.ipv4.tcp_congestion_control | | | |
| ss -tan | wc -l | | | |
变更与回滚剧本
维护窗口
推荐时间:凌晨 2:00 - 4:00(业务低峰期)变更前置条件:
- • [ ] 备份当前所有内核参数(
sysctl -a)
灰度策略
阶段 1:单服务器验证(1 台)
# 应用配置sysctl -p /etc/sysctl.d/99-production.conf# 压测验证wrk -t 8 -c 1000 -d 300s http://localhost/# 监控 24 小时(连接数/延迟/错误率)
阶段 2:批量发布(剩余服务器)
# Ansible 批量应用ansible webservers -m copy -a "src=/etc/sysctl.d/99-production.conf dest=/etc/sysctl.d/"ansible webservers -m command -a "sysctl -p /etc/sysctl.d/99-production.conf"
健康检查
# 检查参数是否生效sysctl -a | grep -E "somaxconn|tcp_max_syn_backlog|tcp_congestion_control"# 检查连接状态ss -s# 检查系统日志错误dmesg | grep -iE "error|fail|oom" | tail -20
回退条件与命令
触发条件:
回退操作:
# 恢复备份配置cp /etc/sysctl.conf.backup /etc/sysctl.confrm /etc/sysctl.d/9*.conf# 重新加载sysctl -p# 验证回退成功sysctl -a | grep -E "somaxconn|tcp_max_syn_backlog" | head -5
最佳实践
- 1. 先备份后修改:所有生产变更前必须导出
sysctl -a 与备份配置文件 - 2. 分文件管理:按场景拆分配置文件(90-network, 91-memory, 92-limits)便于维护
- 3. 版本控制:配置纳入 Git,变更通过 PR 审查
- 4. 测试先行:新参数必须在测试环境压测验证 24 小时
- 5. 监控先行:调整阈值类参数(如 conntrack_max)同步更新告警规则
- 6. 保守调整:首次调优增幅不超过 2 倍(如 somaxconn 128 → 4096,而非 65535)
- 7. 避免过度优化:默认值已优化的参数(如 tcp_rmem)无需盲目增大
- 8. 内核版本适配:BBR/TFO 等新特性需检查内核版本支持
- 9. 容器场景注意:宿主机参数影响所有容器,需考虑容器密度
- 10. 定期审查:每半年审查一次配置,清理无效参数
附录
完整生产配置模板(通用 Web 服务器)
/etc/sysctl.d/99-production.conf:
# ============================================# 生产环境内核参数调优配置# 适用场景:高并发 Web 服务器 + 容器宿主机# 测试环境:RHEL 8.8, Ubuntu 22.04# 测试日期:2025-10-31# ============================================# === 网络核心参数 ===net.core.somaxconn = 65535net.core.netdev_max_backlog = 65535net.core.rmem_default = 4194304net.core.wmem_default = 4194304net.core.rmem_max = 16777216net.core.wmem_max = 16777216# === TCP 协议栈 ===net.ipv4.tcp_max_syn_backlog = 65535net.ipv4.ip_local_port_range = 1000065535net.ipv4.tcp_rmem = 40968738016777216net.ipv4.tcp_wmem = 40966553616777216net.ipv4.tcp_mem = 78643210485762097152# === TCP 连接优化 ===net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_fin_timeout = 30net.ipv4.tcp_keepalive_time = 600net.ipv4.tcp_keepalive_intvl = 30net.ipv4.tcp_keepalive_probes = 3# === TCP 拥塞控制 ===net.ipv4.tcp_congestion_control = bbrnet.core.default_qdisc = fqnet.ipv4.tcp_fastopen = 3# === TCP 安全 ===net.ipv4.tcp_syncookies = 1net.ipv4.tcp_synack_retries = 2net.ipv4.tcp_syn_retries = 2# === 连接跟踪 ===net.netfilter.nf_conntrack_max = 1048576net.netfilter.nf_conntrack_tcp_timeout_established = 3600net.netfilter.nf_conntrack_tcp_timeout_time_wait = 30# === 内存管理 ===vm.swappiness = 10vm.dirty_background_ratio = 5vm.dirty_ratio = 10vm.dirty_expire_centisecs = 1500vm.dirty_writeback_centisecs = 200vm.overcommit_memory = 1# === 文件系统 ===fs.file-max = 2097152# === 容器支持(K8s)===net.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1net.ipv4.ip_forward = 1# === 安全加固 ===net.ipv4.conf.all.rp_filter = 1net.ipv4.conf.all.accept_redirects = 0net.ipv4.conf.all.send_redirects = 0net.ipv4.conf.all.accept_source_route = 0
Ansible 自动化部署 Playbook
----name:生产环境内核参数调优hosts:allbecome:yesvars:sysctl_config:/etc/sysctl.d/99-production.confbackup_dir:/root/sysctl-backuptasks:-name:创建备份目录file:path:"{{ backup_dir }}"state:directory-name:备份当前参数shell:sysctl-a> {{ backup_dir }}/sysctl-$(date+%Y%m%d-%H%M%S).txt-name:部署调优配置copy:src:files/99-production.confdest:"{{ sysctl_config }}"owner:rootgroup:rootmode:'0644'-name:加载br_netfilter模块modprobe:name:br_netfilterstate:present-name:持久化模块加载lineinfile:path:/etc/modules-load.d/k8s.confline:br_netfiltercreate:yes-name:应用内核参数command:sysctl-p {{ sysctl_config }}register:sysctl_result-name:验证关键参数command:sysctlnet.core.somaxconnnet.ipv4.tcp_congestion_controlregister:verify_result-name:显示验证结果debug:msg:"{{ verify_result.stdout_lines }}"
测试环境:RHEL 8.8 / Ubuntu 22.04 LTS, Kernel 4.18.0 / 5.15.0测试日期:2025-10-31维护周期:参数每半年审查,内核每年升级评估
为了方便大家更好的交流运维等相关技术问题,创建了微信交流群,需要加群的小伙伴们可以扫一扫下面的二维码加我为好友拉您进群(备注:加群)。

| 代码仓库 | 网址 |
| Github | https://github.com/raymond999999 |
| Gitee | https://gitee.com/raymond9 |
| 博客 | 网址 |
| https://blog.csdn.net/qq_25599925 |
| 稀土掘金 | https://juejin.cn/user/4262187909781751 |
| 知识星球 | https://wx.zsxq.com/group/15555885545422 |
| 阿里云社区 | https://developer.aliyun.com/profile/snzh3xpxaf6sg |
| 腾讯云社区 | https://cloud.tencent.com/developer/user/11823619 |
| 华为云社区 | https://developer.huaweicloud.com/usercenter/mycommunity/dynamics |
访问博客网站,查看更多优质原创内容。