1. CPU性能优化实战

1.1 定位CPU瓶颈的必备工具

# 查看实时CPU使用率(按1展开多核视图)
top -d 1
# 生成指定进程的火焰图(需提前安装perf)
sudo perf record -F 99 -p <PID> -g -- sleep 30
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg

实际案例:某PHP-FPM服务出现200%的CPU使用率(双核满负载)。通过perf分析发现XML解析函数占用了85%的CPU时间,最终发现是未启用SimpleXML缓存配置导致重复解析。

1.2 进程调度优化技巧

# 修改进程的调度策略为实时调度(慎用)
chrt -f -p 99 <PID>
# 查看进程上下文切换频率
pidstat -w -p <PID> 5

某高频交易系统通过调整SCHED_FIFO策略,将订单处理延迟从8ms降低到1.3ms。但需要注意这种调整会抢占系统关键进程,必须配合cgroup限制CPU配额。

1.3 中断平衡实战

# 设置网络中断的CPU亲和性(需要多队列网卡支持)
echo 3 > /proc/irq/<irq_num>/smp_affinity
# 查看软中断分布
watch -n 1 "grep NET_RX /proc/softirqs"

某视频流服务器在万兆网络环境下,通过配置RPS将网络中断分散到8个CPU核心,使吞吐量提升270%。关键技术在于/proc/sys/net/core/rps_sock_flow_entries参数调优。


2. 内存优化深度解析

2.1 Swap问题定位方法

# 检测内存回收压力
watch -n 1 "grep -E 'pgscan|pgsteal' /proc/vmstat"
# 跟踪页交换事件
sar -W 5

某Redis服务器频繁触发OOM killer,使用vmstat发现kswapd进程持续运行。解决方案是调整vm.swappiness=1并增加透明大页配置,将内存碎片率降低70%。

2.2 内存泄漏排查工具

# 按内存使用增量排序进程
smem -t -k -u -p | grep -v "0.00"
# 内核级内存审计(需要编译时开启CONFIG_KMEMLEAK)
echo scan > /sys/kernel/debug/kmemleak

某Go服务程序运行三天后RSS达到32GB,使用pprof内存分析发现是误用的全局缓存字典未设置过期策略,引入LRU缓存策略后内存增长曲线恢复平稳。


3. 磁盘I/O性能攻坚

3.1 存储延迟分析技巧

# 查看设备级IO延迟(iostat增强版)
iostat -xmdz 1
# 跟踪块设备请求队列
blktrace -d /dev/sda -o trace | blkparse -i trace

某MySQL实例的UPDATE操作延迟波动明显,使用biosnoop工具发现某个ext4日志写入操作频繁触发屏障请求。解决方案是优化挂载参数data=writeback,使IOPS提升3倍。

3.2 文件系统调优指南

# EXT4日志模式性能对比测试
hdparm -tT /dev/sdb
# XFS在线碎片整理
xfs_fsr /dev/sdc

某大数据分析平台通过调整XFS的allocsize=64m参数,使HDFS写入吞吐量提升120%。同时配合deadline调度器参数调整,处理长尾延迟问题。


4. 网络性能调优手册

4.1 TCP协议栈调优

# 动态调整TCP缓冲区(需内核支持autotuning)
sysctl -w net.ipv4.tcp_rmem='4096 87380 6291456'
# 跟踪TCP重传事件
ss -eip state established | grep retrans

某视频会议系统通过设置net.core.netdev_max_backlog=300000,成功解决万兆网络下的丢包问题。配合TSQ(TCP Small Queues)功能,端到端延迟降低40%。

4.2 网络中断优化

# 启用RSS(Receive Side Scaling)
ethtool -L eth0 combined 16
# 检查GRO/GSO设置
ethtool -k eth0 | grep generic-segmentation

某云计算平台在升级到25G网卡后,通过配置RFS(Receive Flow Steering),将网络吞吐量从15Gbps提升到23Gbps。关键参数是设置合理的rps_cpus映射。


5. 应用场景与技术选型

5.1 高并发Web服务

  • 核心优化:TCP fastopen + SO_REUSEPORT
  • 典型案例:Nginx使用sendfile + aio_write实现零拷贝
  • 避坑指南:注意close_wait状态的监控与处理

5.2 大数据处理集群

  • HDFS调优:vm.dirty_ratio=80 + vm.dirty_background_ratio=60
  • Spark配置:关闭透明大页 + 调整numa内存策略
  • 存储建议:XFS vs ext4日志模式对比

6. 技术优缺点分析

6.1 常用工具对比

  • perf:功能强大但学习曲线陡峭
  • bpftrace:灵活但依赖新内核特性
  • sysdig:容器友好但资源消耗较大

6.2 优化策略利弊

  • CPU隔离技术提升确定性但降低利用率
  • 内存过量使用提升密度但增加OOM风险
  • 激进预读提升顺序IO性能但影响随机访问

7. 调优注意事项

  1. 监控先行原则:持续采集基线数据
  2. 变更控制策略:单次只调整一个参数
  3. 回退机制准备:使用tuned-adm快速恢复
  4. 硬件差异处理:新旧处理器采用不同调度参数
  5. 安全边界意识:禁用swap时需保留应急内存

8. 实践经验总结

经过对数百台生产服务器的调优实践,总结出性能优化的"3D"法则:

  • 方向(Direction):明确优化指标(吞吐量/延迟/利用率)
  • 数据(Data):建立完整的监控指标体系
  • 深度(Depth):理解从应用到硬件的完整栈

典型收益案例:

  • 某AI训练集群通过NUMA绑核优化,周期缩短30%
  • CDN节点采用TCP BBR拥塞控制算法,带宽利用率提升25%
  • OLTP数据库通过O_DIRECT模式突破存储瓶颈