调优原则:
风险控制:
sysctl -p 并监控系统稳定性。cp /etc/sysctl.conf /etc/sysctl.conf.bak1. 通用基础参数(/etc/sysctl.conf)
# 通用优化vm.swappiness=10 # 减少 Swap 使用vm.vfs_cache_pressure=50 # 倾向回收目录和 inode 缓存vm.dirty_ratio=5vm.dirty_background_ratio=2vm.overcommit_memory=1 # 适度 overcommit,适合大多数服务kernel.pid_max=4194304kernel.threads-max=32768fs.file-max=2097152 # 系统全局文件描述符上限2. 网络栈优化(高并发服务必调)
net.core.somaxconn=65535net.core.netdev_max_backlog=10000net.core.rmem_max=16777216net.core.wmem_max=16777216net.ipv4.tcp_rmem=4096 87380 16777216net.ipv4.tcp_wmem=4096 65536 16777216net.ipv4.tcp_max_syn_backlog=8192net.ipv4.tcp_synack_retries=2net.ipv4.tcp_fin_timeout=15net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_recycle=0 # 慎用,NAT 环境可能导致问题net.ipv4.tcp_max_tw_buckets=2000000net.ipv4.ip_local_port_range=1024 65535net.ipv4.tcp_slow_start_after_idle=0net.ipv4.tcp_mtu_probing=13. 内存与虚拟内存优化
vm.min_free_kbytes=1048576 # 保留最小空闲内存(根据物理内存调整)vm.watermark_scale_factor=125vm.page-cluster=0 # 随机 IO 场景推荐4. 安全与稳定性参数
kernel.randomize_va_space=2 # ASLR 地址随机化net.ipv4.conf.all.rp_filter=1net.ipv4.conf.default.rp_filter=1kernel.sysrq=0 # 生产环境关闭 SysRq应用 sysctl 配置:
sysctl -p /etc/sysctl.confsysctl --system生产模板建议:
1. 用户级 ulimit 配置(/etc/security/limits.conf)
* soft nofile 1048576* hard nofile 1048576* soft nproc 65535* hard nproc 65535mysql soft nofile 1048576mysql hard nofile 20971522. Systemd 服务级 Limits(推荐方式) 在服务 Drop-in 中配置:
[Service]LimitNOFILE=1048576LimitNPROC=65535LimitCORE=infinityLimitMEMLOCK=infinityTasksMax=81923. 全局 Systemd 配置(/etc/systemd/system.conf)
[Manager]DefaultLimitNOFILE=1048576DefaultLimitNPROC=65535DefaultTasksMax=100000执行 systemctl daemon-reload 后生效。
eBPF(extended Berkeley Packet Filter)是 Linux 内核革命性技术,可在不修改内核代码的情况下实现安全、高效的动态追踪与干预。
1. 安装 BCC 工具集
# Rocky/AlmaLinuxyum install bcc-tools# Ubuntuapt install bpfcc-tools2. 常用 eBPF 工具
execsnoop # 追踪新进程执行opensnoop # 追踪文件打开biolatency # 磁盘 IO 延迟分布tcpconnect # TCP 连接追踪tcpaccept # TCP accept 追踪offcputime # Off-CPU 时间火焰图3. 自定义 eBPF 脚本示例(追踪高延迟磁盘 IO)
#!/usr/bin/pythonfrom bcc import BPFbpf = BPF(text="""#include <uapi/linux/ptrace.h>#include <linux/blkdev.h>BPF_HISTOGRAM(dist, int, 100);int kprobe__blk_account_io_done(struct pt_regs *ctx) { struct request *req = (struct request *)PT_REGS_PARM1(ctx); u64 delta = bpf_ktime_get_ns() - req->start_time; dist.increment(bpf_log2l(delta / 1000)); return 0;}""")bpf.trace_print()4. 生产应用场景:
与 Systemd 结合:将关键 eBPF 脚本作为 systemd 服务长期运行。
分场景优化模板:
somaxconn、netdev_max_backlog、worker_connectionsvm.dirty_* + HugePages + IO Schedulerovercommit_memory=1 + 高 nofileHugePages 大页内存(数据库重度推荐)
# /etc/sysctl.confvm.nr_hugepages=4096# Systemd 服务添加[Service]Environment="HUGETLB_MORECORE=yes"numactl --cpunodebind=0 --membind=0 <command># 或在 Systemd 中配置 AllowedCPUs + AllowedMemoryNodes自动化管理:
tuned 或 sysctl 预设 profile持续观测:
案例1:修改 sysctl 后网络连接失败 原因:tcp_tw_recycle 在 NAT 环境下导致问题。 解决:关闭该参数,改用 tcp_tw_reuse。
案例2:文件描述符用尽(Too many open files) 排查:
cat /proc/$(pidof nginx)/limitsulimit -nss -s解决:同时调整 limits.conf + systemd LimitNOFILE + fs.file-max。
案例3:eBPF 工具执行报错(权限/内核版本) 解决:确保内核版本 4.18+,使用 root 执行,加载必要内核模块。
案例4:内存参数调整后 OOM 更频繁 原因:swappiness 过低 + min_free_kbytes 不足。 解决:平衡调整并监控 watermark。
案例5:高负载下系统响应变慢 排查:使用 perf + offcputime 分析 Off-CPU 时间,优化锁争用或磁盘等待。