3. 基础设施监控:CPU、内存、磁盘IO、网络带宽的监控指标与告警阈值设定

说到基础设施监控,我脑子里第一个蹦出来的画面,就是几年前一个深夜的线上事故。

那会儿我们刚上线一套新的因子计算集群,跑着跑着,突然所有任务都卡住了。我登录上去一看,CPU 使用率才 30%,内存也够,但磁盘 IO 等待时间飙到了 90% 以上。说白了,就是磁盘成了瓶颈,CPU 都在排队等数据。

从那以后,我对基础设施监控就再也不敢马虎了。今天咱们就聊聊,在因子工厂这种高频计算场景下,CPU、内存、磁盘 IO、网络带宽到底该怎么盯,阈值怎么设。

核心观点:基础设施监控不是为了看数据,而是为了在故障发生前,提前嗅到危险的味道。

3.1 CPU 监控:别只看使用率

很多人监控 CPU,就盯着一个「使用率」指标。其实这远远不够。

我个人的习惯是,至少看三个维度:

  • CPU 使用率(user + system):这个最直观,但要注意区分 user 和 system。如果 system 占比过高,说明系统调用太频繁,可能是锁竞争或者 IO 操作太多。
  • CPU 负载(load average):这个指标反映的是等待队列的长度。如果负载远高于 CPU 核心数,说明任务在排队,系统已经过载了。
  • 上下文切换次数(context switches):这个容易被忽略。我在项目中遇到过,某个因子计算模块用了大量短线程,上下文切换每秒几十万次,CPU 全耗在切换上了,实际计算效率极低。

我的经验:对于因子计算这种 CPU 密集型任务,CPU 使用率超过 85% 就要警惕了。超过 95% 基本意味着系统已经接近饱和,随时可能抖动。

告警阈值怎么设?我一般这样定:

指标 警告阈值 严重阈值 说明
CPU 使用率 > 80% 持续 5 分钟 > 95% 持续 2 分钟 因子计算通常吃 CPU,阈值可以适当放宽
CPU 负载/核心数 > 3.0 持续 5 分钟 > 5.0 持续 2 分钟 负载超过核心数 3 倍,基本已经卡死了
上下文切换 > 5 万次/秒 > 10 万次/秒 这个值因机器而异,需要根据基线调整

注意:不要用绝对值一刀切。不同 CPU 型号、不同内核版本,表现差异很大。我建议先跑一周基线数据,再动态调整阈值。

3.2 内存监控:小心 OOM 杀手

内存监控,很多人只看「已用内存」。但 Linux 的内存管理机制比较复杂,你看到的「已用」可能并不准确。

举个例子,Linux 会把空闲内存用作文件缓存(cache),这部分内存其实是可以被回收的。所以真正需要关注的,是 可用内存 = 空闲内存 + 缓存 + 缓冲区

我一般监控这几个指标:

  • 可用内存百分比:低于 20% 就要注意了。
  • Swap 使用率:如果 Swap 开始被大量使用,说明物理内存已经不够了。因子计算这种场景,一旦开始用 Swap,性能会断崖式下跌。
  • OOM Killer 事件:这个必须监控。一旦触发 OOM Killer,进程会被直接杀掉,数据可能丢失。

避坑指南:我曾经遇到过,某台机器内存使用率一直 70% 左右,看起来挺正常。但仔细一看,Swap 已经用了 4GB。原来是有个进程偷偷在泄漏内存,物理内存不够了就开始用 Swap。所以,内存监控一定要把 Swap 也盯上

阈值设定参考:

指标 警告阈值 严重阈值 说明
可用内存 < 20% 持续 5 分钟 < 10% 持续 2 分钟 因子计算内存需求大,建议预留更多
Swap 使用率 > 0% 持续 10 分钟 > 50% 持续 5 分钟 只要用了 Swap,基本就是异常
OOM Killer 发生即告警 这个必须 0 容忍

3.3 磁盘 IO:最容易被忽视的瓶颈

磁盘 IO 监控,说实话,是很多人的盲区。CPU 和内存用得好好的,但磁盘一慢,整个系统就跟着慢。

因子工厂里,大量因子数据需要读写磁盘。如果磁盘 IO 跟不上,CPU 再快也没用。

我重点看这几个指标:

  • IOPS(每秒读写次数):对于随机读写场景,IOPS 是关键。比如因子数据的小文件读取。
  • 吞吐量(MB/s):对于顺序读写场景,比如日志写入、大文件加载。
  • IO 等待时间(await):这个指标非常关键。它表示一次 IO 请求从发出到完成的时间。如果超过 100ms,说明磁盘已经严重过载。
  • 队列长度(avgqu-sz):等待处理的 IO 请求数量。如果长期大于 1,说明磁盘忙不过来了。

我的经验:SSD 和 HDD 的阈值完全不同。SSD 的 await 超过 50ms 就算异常,而 HDD 可能 200ms 都算正常。所以一定要根据磁盘类型来设定。

阈值参考:

指标 警告阈值 严重阈值 说明
await(SSD) > 50ms > 100ms SSD 延迟应该很低
await(HDD) > 200ms > 500ms HDD 机械结构,延迟高一些
avgqu-sz > 2 > 5 队列太长,IO 已经排队了
磁盘使用率 > 80% > 95% 磁盘快满了,会影响写入性能

3.4 网络带宽:别让数据堵在路上

因子工厂里,节点之间需要频繁交换数据。网络带宽不够,或者延迟太高,都会拖慢整体计算速度。

我主要监控这几个:

  • 带宽使用率(入站/出站):看看是不是快跑满了。如果长期超过 80%,说明网络可能是瓶颈。
  • 丢包率:这个很关键。哪怕丢包 0.1%,在大量数据传输时也会导致重传,严重影响性能。
  • TCP 重传率:如果重传率超过 1%,说明网络质量有问题,可能是链路不稳定或者带宽不够。
  • 连接数:特别是 ESTABLISHED 状态的连接数。如果连接数过多,可能是有连接泄漏。

我曾经踩过的坑:有一次,因子计算突然变慢,查了半天,发现是网络带宽被一个日志备份任务占满了。所以,网络监控一定要区分流量来源,知道是谁在吃带宽。

阈值设定:

指标 警告阈值 严重阈值 说明
带宽使用率 > 70% 持续 10 分钟 > 90% 持续 5 分钟 预留一些余量应对突发流量
丢包率 > 0.1% > 0.5% 丢包对性能影响很大
TCP 重传率 > 1% > 3% 重传意味着网络质量下降
连接数 超过基线 50% 超过基线 100% 需要根据业务场景设定基线

3.5 一张图看懂基础设施监控体系

说了这么多,我画了一张图,把整个监控体系串起来。你一看就明白了。

基础设施监控体系 CPU 监控 内存监控 磁盘 IO 监控 网络带宽监控 关键指标 • 使用率 (user+system) • 负载 (load average) • 上下文切换次数 • 等待队列长度 关键指标 • 可用内存百分比 • Swap 使用率 • OOM Killer 事件 • 缓存/缓冲区大小 关键指标 • IOPS (读写次数) • 吞吐量 (MB/s) • await (等待时间) • avgqu-sz (队列长度) 关键指标 • 带宽使用率 • 丢包率 • TCP 重传率 • 连接数 告警引擎 告警通知:邮件 / 短信 / 企业微信 / 钉钉

这张图把四个维度的监控指标和告警流程串在了一起。你想想看,任何一个环节出问题,告警引擎都能第一时间通知你。

3.6 一些实用的小建议

最后,分享几个我在实战中总结出来的经验:

  • 不要用默认阈值:很多监控工具都有默认阈值,但那些值不一定适合你的场景。因子计算是 CPU 密集型,和 Web 服务的阈值肯定不一样。
  • 先跑基线,再设阈值:新系统上线后,先跑一周数据,看看正常情况下的指标范围,再根据这个范围来设定告警阈值。
  • 告警要分级:不要所有问题都发告警。小问题发警告,大问题才发严重告警。否则运维人员会麻木的。
  • 关联分析很重要:单个指标异常可能说明不了什么。比如 CPU 高 + 磁盘 IO 高 + 网络带宽高,那可能是某个任务在大量读写数据。但如果只有 CPU 高,其他都正常,那可能是计算逻辑有问题。

嗯,这里要注意:告警不是越多越好。我曾经见过一个团队,一天收到上千条告警,结果真正重要的问题反而被淹没了。所以,告警要精,不要多

好了,基础设施监控这块就聊到这儿。记住,监控不是为了看数据,而是为了在故障发生前,提前发现风险。把 CPU、内存、磁盘 IO、网络带宽这四个维度盯好了,你的因子工厂就能稳定运行。