核心指标详解:CPU、内存、磁盘、网络四大基础指标

监控告警体系里,最基础也最容易被忽视的,就是这四大件。我见过不少团队,一上来就搞什么业务链路追踪、APM,结果CPU被打爆了都不知道。说白了,地基没打好,上层再花哨也是空中楼阁。

今天咱们就把这四大基础指标彻底聊透。我会结合USE方法和RED方法,把每个指标拆开揉碎了讲。嗯,这些都是我这些年踩坑踩出来的经验,希望能帮你少走弯路。

一、CPU指标:你的服务器在忙什么?

CPU是服务器的“大脑”。它忙不忙,忙在哪里,直接决定了系统的响应速度。

1. 利用率(Utilization)

利用率就是CPU在工作的时间占比。比如80%的利用率,意味着CPU有80%的时间在执行指令,20%的时间在空闲。

我个人的习惯:看CPU利用率,不能只看平均值。我曾经遇到过一台服务器,平均利用率只有30%,但业务高峰期却卡得要死。后来一查,原来是4核CPU里,有3个核在跑批处理任务,只有1个核在处理用户请求。那个核的利用率已经飙到95%了。

关键点:要按CPU核心分别监控,而不是只看整体平均值。

2. 饱和度(Saturation)

饱和度,说白了就是CPU的“排队长度”。当CPU忙不过来时,任务就会排队等待。这个队列越长,说明CPU越饱和。

在Linux里,我们可以用vmstat命令看r列(运行队列)。如果这个值持续大于CPU核心数,那就要警惕了。

# 查看CPU运行队列
vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0      0 123456  7890 456789    0    0    10    20  100  200 30 10 60  0  0

你看,这里的r值是3,如果这台机器只有2个CPU核心,那就说明有任务在排队了。

我曾经踩过的坑:有一次线上告警说CPU利用率只有60%,但接口响应时间却飙升。我排查了半天,才发现是运行队列已经堆积到20多了。利用率不高,不代表CPU不饱和。记住,饱和度和利用率是两个维度。

3. 错误数(Errors)

CPU错误比较少见,但一旦出现,基本就是硬件问题。比如CPU温度过高、缓存错误、机器检查异常(Machine Check Exception)等。

监控CPU错误,主要看/var/log/mcelog或者dmesg里的硬件错误日志。

二、内存指标:别让OOM Killer找上门

内存是服务器的“工作台”。工作台不够大,东西就得往硬盘上搬,那速度就慢得多了。

1. 利用率(Utilization)

内存利用率就是已使用的内存占总内存的比例。但这里有个坑:Linux会把空闲内存用作文件缓存(Cache),这部分内存其实是可以回收的。

我建议:监控内存利用率时,要关注可用内存,而不是空闲内存。可用内存 = 空闲内存 + 可回收的缓存。

# 查看内存使用情况
free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi       5.6Gi       2.1Gi       1.2Gi       7.3Gi       8.9Gi

你看,虽然used是5.6G,但available还有8.9G,说明内存其实还够用。

2. 饱和度(Saturation)

内存饱和度的直接体现就是交换分区(Swap)的使用。当物理内存不够时,系统会把不常用的内存页换到磁盘上。这个过程叫“换页”(Swapping)。

一旦开始大量换页,性能就会急剧下降。因为磁盘的读写速度比内存慢几个数量级。

关键指标si(从磁盘换入内存)和so(从内存换出到磁盘)。这两个值如果持续大于0,说明内存已经饱和了。

3. 错误数(Errors)

内存错误主要是OOM Killer(内存溢出杀手)。当系统内存耗尽时,内核会杀掉一些进程来释放内存。

监控OOM Killer,可以看dmesg或者/var/log/kern.log。一旦出现OOM,说明内存已经严重不足,需要立即扩容或优化。

小技巧:我习惯在监控系统里设置一个告警:当available内存低于总内存的10%时,就触发预警。这样可以在OOM发生前,给我们留出处理时间。

三、磁盘指标:IO才是真正的瓶颈

很多人以为磁盘只看空间就够了。其实,磁盘的IO性能才是真正的瓶颈。你想想看,CPU和内存都是纳秒级的,磁盘是毫秒级的,差了三个数量级。

1. 利用率(Utilization)

磁盘利用率,指的是磁盘处理IO请求的时间占比。注意,不是磁盘空间的使用率。

在Linux里,可以用iostat查看%util列。如果这个值接近100%,说明磁盘已经满负荷工作了。

# 查看磁盘IO
iostat -x 1
Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
sda              10.0    20.0     100.0     200.0     0.0     0.0   0.00   0.00   5.00   10.00   0.30    10.00    10.00   3.33  10.00

这里的%util是10%,说明磁盘还有余量。

我曾经踩过的坑:有一次数据库响应变慢,我看%util只有60%,觉得磁盘没问题。后来才发现,那台机器用的是SSD,60%的利用率对于SSD来说已经很高了。因为SSD的并发能力很强,60%的利用率意味着内部队列已经很长了。所以,不同类型的磁盘,利用率阈值是不一样的。

2. 饱和度(Saturation)

磁盘饱和度,看的是IO等待队列长度aqu-sz)和IO等待时间await)。

如果await持续升高,说明IO请求在排队等待处理。这时候,即使%util不高,也说明磁盘已经饱和了。

3. 错误数(Errors)

磁盘错误包括:IO错误、磁盘坏道、文件系统错误等。这些错误通常会在/var/log/messagesdmesg里留下记录。

监控磁盘错误,我建议重点关注IO错误磁盘重新分配扇区数(SMART指标)。一旦出现,说明磁盘快挂了,需要立即更换。

四、网络指标:别让带宽成为瓶颈

网络是服务器的“血管”。血管堵了,再强的CPU和内存也白搭。

1. 利用率(Utilization)

网络利用率,就是当前流量占带宽的比例。比如你的网卡是1Gbps,当前流量是500Mbps,那利用率就是50%。

我个人的习惯:网络利用率要按方向分别监控。入向流量和出向流量的瓶颈可能完全不同。比如,Web服务器通常是出向流量大(响应数据),而数据库服务器可能是入向流量大(接收查询请求)。

2. 饱和度(Saturation)

网络饱和度的体现是丢包重传。当网络带宽不够时,数据包会被丢弃,或者因为超时而重传。

监控网络饱和度,主要看netstat里的dropoverrun,以及TCP的重传率。

# 查看网络接口统计
netstat -i
Kernel Interface table
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0      1500  123456      0      0      0   654321      0      0      0 BMRU

这里的RX-DRPTX-DRP就是丢包数。如果持续增长,说明网络已经饱和了。

3. 错误数(Errors)

网络错误包括:CRC校验错误、帧错误、冲突等。这些错误通常意味着物理层有问题,比如网线接触不良、网卡故障等。

小技巧:我习惯在监控系统里设置一个告警:当TCP重传率超过1%时,就触发预警。因为重传率升高,通常意味着网络质量下降,或者带宽不足。

五、USE方法与RED方法:两种思维框架

聊完了四大指标,咱们再来说说两种经典的监控方法论:USE和RED。

1. USE方法(利用率、饱和度、错误数)

USE方法是由Brendan Gregg提出的,适用于基础设施资源的监控。它要求对每个资源,都从利用率、饱和度、错误数三个维度去分析。

说白了,USE方法就是回答三个问题:

  • 这个资源忙不忙?(利用率)
  • 这个资源有没有排队?(饱和度)
  • 这个资源有没有出错?(错误数)

刚才我们讲的CPU、内存、磁盘、网络,都可以用USE方法来分析。这也是我日常排查问题时最常用的方法。

2. RED方法(速率、错误、持续时间)

RED方法是由Tom Wilkie提出的,适用于服务的监控。它关注的是:

  • 速率(Rate):每秒处理多少请求?
  • 错误(Errors):请求失败的比例是多少?
  • 持续时间(Duration):请求处理需要多长时间?

RED方法更适合微服务架构。比如,你监控一个API服务,就可以看:

  • QPS(每秒请求数)
  • 错误率(5xx比例)
  • P99延迟(99%的请求在多少毫秒内完成)

我的经验:USE方法看“资源”,RED方法看“服务”。两者结合,才能全面掌握系统的健康状况。我通常先用USE方法排查资源瓶颈,再用RED方法评估服务质量。

六、知识体系总览

下面这张图,把四大基础指标和两种方法论的关系梳理清楚了。你可以把它当作一个快速参考。

监控告警核心指标知识体系 CPU指标 内存指标 磁盘指标 网络指标 USE方法:利用率(Utilization)→ 饱和度(Saturation)→ 错误数(Errors) 利用率:资源忙不忙? 饱和度:有没有排队? 错误数:有没有出错? RED方法:速率(Rate)→ 错误(Errors)→ 持续时间(Duration) 速率:每秒处理多少? 错误:失败比例多少? 持续时间:响应多快? USE方法看资源,RED方法看服务,两者结合全面掌握系统健康

这张图里,上半部分是四大基础指标,中间是USE方法,下面是RED方法。你可以看到,USE方法更关注资源层面的健康,而RED方法更关注服务层面的质量。

在实际工作中,我通常先用USE方法快速定位资源瓶颈,再用RED方法评估对业务的影响。比如,CPU利用率高了,我会看是哪个进程在吃CPU,然后看这个进程对应的服务,它的QPS和延迟有没有变化。这样就能把“资源问题”和“业务影响”关联起来。


公众号:蓝海资料掘金营,微信deep3321