一、性能调优概述:为什么要做性能调优?

说实话,我刚开始做Linux运维那会儿,对性能调优这事儿挺不屑的。

觉得系统能跑就行,干嘛要折腾?直到有一次线上服务半夜挂了,老板电话打过来,我盯着监控面板上那根飙红到顶的CPU曲线,后背全是冷汗。那次事故之后,我才真正明白——性能调优不是炫技,是保命用的

1.1 为什么要做性能调优?

说白了,就三个字:省成本、保稳定、提体验

  • 省成本:同样的硬件,调优后能多扛50%的并发。我见过一家公司,没做任何调优就急着加服务器,一年白花了几十万。你想想看,这钱省下来干点啥不好?
  • 保稳定:系统不会莫名其妙卡死。我在项目中遇到过,一个内存泄漏的问题拖了三个月,最后发现是内核参数没调对。嗯,这种坑踩一次就够了。
  • 提体验:用户点一下按钮,0.1秒响应和3秒响应,区别大了去了。说白了,用户体验就是钱。

核心观点:性能调优的本质,是用最小的资源成本,换取最大的系统吞吐和最低的响应延迟。

1.2 性能调优的通用方法论

我个人习惯把调优流程总结成五步,简单粗暴,但管用:

  1. 发现问题:监控告警、用户投诉、日志报错,都是线索。
  2. 定位瓶颈:用工具看CPU、内存、IO、网络,哪个先爆。
  3. 分析根因:为什么爆?代码问题?配置问题?架构问题?
  4. 动手优化:改配置、改代码、改架构,一步步来。
  5. 验证效果:改完必须压测,数据说话,别靠感觉。

我的经验:千万别一上来就瞎调。我曾经见过有人把内核参数改得面目全非,结果系统直接起不来了。记住:一次只改一个变量,改完必须验证

1.3 核心指标:CPU、内存、IO、网络

这四个指标,是性能调优的四大金刚。你不管遇到什么问题,先看它们准没错。

1.3.1 CPU

CPU是系统的脑子。脑子不够用,啥都慢。

  • 关键指标user(用户态)、system(内核态)、iowait(IO等待)、idle(空闲)
  • 常用工具tophtopmpstatperf
  • 常见问题:CPU跑满但IO很低,多半是代码死循环或计算密集。CPU不高但系统慢,那问题可能在别处。

避坑指南:我曾经遇到过iowait飙到80%,以为是CPU问题,折腾了半天才发现是磁盘坏了。记住:iowait高不代表CPU不行,它说明CPU在等磁盘干活。

1.3.2 内存

内存是系统的临时仓库。仓库太小,数据就得往磁盘搬,一搬就慢。

  • 关键指标total(总量)、used(已用)、free(空闲)、buff/cache(缓存)、swap(交换分区)
  • 常用工具free -hvmstatsmem
  • 常见问题swap使用率过高,说明物理内存不够了。我建议你监控swap,一旦持续增长,就得加内存或优化应用。

核心观点:内存调优的目标,是让数据尽量留在内存里,别往磁盘写。说白了,就是减少swappage fault

1.3.3 IO

IO是系统的读写能力。磁盘慢,整个系统都得等。

  • 关键指标r/s(读请求)、w/s(写请求)、await(平均等待时间)、%util(磁盘利用率)
  • 常用工具iostatiotopdstat
  • 常见问题%util接近100%但await不高,说明磁盘在满负荷工作。如果await很高,那可能是磁盘本身性能不行,或者有坏道。

我的经验:数据库服务器最怕IO瓶颈。我记得有一次MySQL慢查询,查了半天发现是磁盘RAID卡缓存没开。开了之后,IO性能直接翻倍。嗯,这种细节很容易被忽略。

1.3.4 网络

网络是系统的血管。血管堵了,数据传不出去。

  • 关键指标rx/tx(收发流量)、drop(丢包)、overrun(溢出)、error(错误)
  • 常用工具sar -n DEVnloadiftoptcpdump
  • 常见问题dropoverrun增加,说明网卡或内核缓冲区不够了。我建议你检查一下net.core.rmem_defaultnet.core.wmem_default这两个内核参数。

避坑指南:我曾经遇到过网络延迟忽高忽低,查了三天,最后发现是交换机端口协商成了半双工。你想想看,一个千兆网卡跑在半双工模式下,性能能好才怪。

1.4 总结一下

性能调优这事儿,说白了就是四个字:对症下药

CPU、内存、IO、网络,这四个指标就像人的体温、血压、心率、呼吸。任何一个异常,都得重视。但别急着动手,先搞清楚问题在哪,再想怎么治。

我个人习惯是:先看CPU,再看内存,然后IO,最后网络。这个顺序不是绝对的,但大多数场景下管用。

记住一句话:调优不是一次性的活儿,它是持续的过程。系统在变,业务在变,你的调优策略也得跟着变。

好了,第一章就聊到这儿。下一章我们开始动手,讲讲怎么用topvmstat这些工具,把系统的底裤扒干净。