CentOS From Scratch 性能优化路线图
一 构建阶段的基础优化
- 选择最小化安装并仅启用必要软件包组,减少后台守护进程与内核模块数量,降低内存与CPU占用。
- 构建时优先采用较新的稳定内核与较新的GCC/glibc工具链,获得更好的调度器、I/O栈与网络栈优化。
- 启用编译期与运行期的性能相关选项:如内核的透明大页(THP)策略、合理的NUMA亲和与调度器选择;用户态程序建议打开编译器优化(如**-O2/-O3 -march=native**),并开启LTO(若工具链支持)。
- 文件系统与块层:构建阶段即规划好分区对齐与I/O调度策略(SSD优先none/mq-deadline),为后续挂载参数(如noatime)打好基础。
- 若从源码构建用户态基础组件(glibc、coreutils、openssl 等),优先使用较新的稳定版本,获取性能修复与优化。
二 系统上线后的内核与网络优化
- 内存与虚拟内存
- 适度降低vm.swappiness(如10–30),减少不必要的换页;数据库/内存敏感负载可更低(甚至0,需充分压测)。
- 调整脏页刷写阈值:vm.dirty_ratio=50、vm.dirty_background_ratio=10,在突发写入时更平滑,降低抖动。
- 文件系统与挂载
- 通用场景建议挂载选项:defaults,noatime,nodiratime;日志型文件系统(如ext4)可结合data=writeback(权衡数据一致性),数据库等高可靠场景不建议。
- 网络栈关键参数(示例为通用高并发起点,需按业务压测微调)
- 端口与队列:net.ipv4.ip_local_port_range=1024 65535
- 连接复用与回收:net.ipv4.tcp_tw_reuse=1;在NAT/负载均衡或跨主机转发场景谨慎使用tcp_tw_recycle(多版本内核已废弃或默认关闭,避免误用)。
- 超时与保活:net.ipv4.tcp_fin_timeout=30、net.ipv4.tcp_keepalive_time=1200
- 队列与连接:net.core.somaxconn=65535、net.ipv4.tcp_max_syn_backlog=16384、net.core.netdev_max_backlog=16384
- 半连接保护:net.ipv4.tcp_syncookies=1
- 生效方式:将参数写入**/etc/sysctl.conf或/etc/sysctl.d/99-tune.conf**,执行sysctl -p使其生效。
三 资源限制与服务精简
- 文件描述符与进程数
- 系统级:fs.file-max按业务规模适度放大(如数十万级)。
- 用户级:在**/etc/security/limits.conf**设置
-
-
- root soft/hard nproc 65535
- 注意:部分服务(如通过systemd管理的)需在单元文件或**/etc/systemd/system.conf中设置DefaultLimitNOFILE**才能继承。
- 开机自启最小化
- 仅保留sshd、rsyslog、crond、network等必要服务,减少常驻后台进程对CPU/内存的占用。
- 安全与性能的平衡
- 不建议直接禁用SELinux;如确有兼容性问题,可先设为permissive定位,再精细化策略放行,避免安全退化为性能“捷径”。
四 存储与I/O 优化
- I/O调度器
- 机械盘:mq-deadline或cfq;SSD/NVMe:none/mq-deadline;可通过**/sys/block/sdX/queue/scheduler查看与临时切换,生产环境建议写入GRUB_CMDLINE_LINUX**并生成grub配置持久化。
- 调度与缓存策略
- 结合业务选择ionice(如批处理任务用best-effort:3),避免与关键业务争抢I/O。
- 合理设置read_ahead_kb(如128–256 KB起步),减少随机读放大。
- 文件系统与挂载
- 除noatime/nodiratime外,可按需使用barrier=0(仅电池保护或具掉电保护的存储),并控制journal大小与写入策略(权衡一致性与性能)。
五 监控验证与迭代
- 监控与瓶颈定位
- 资源全景:top/htop、vmstat、iostat -x 1、sar -n DEV 1;网络长连接与重传:ss -s、netstat -s。
- 内核与网络细节:/proc/interrupts(软/硬中断分布)、/proc/net/sockstat(套接字与TIME_WAIT等)。
- 压测与回归
- 使用ab、wrk、jmeter等进行压力测试,观察QPS、P95/P99延迟、错误率、带宽/pps;每次只变更一个参数并保留基线,便于回滚与对比。
- 重要提示
- 生产变更务必在灰度/测试环境验证;涉及内核参数、I/O调度器与SELinux策略的调整,需结合业务容忍度与SLA要求谨慎推进。