系统指标的意义:Load、CPU、Memory

当系统存在异常告警时,如果排除了业务异常,第一时间需要关注到系统的各个指标水位,能够快速定有一个定位方向,是应急和找根因的前提。Load、CPU、Memory这些最常用的系统监控指标需要非常了解。在执行压测时,这些也是考察系统瓶颈的指标;

Load

Load:单位时间内系统处于「可运行状态」和「不可中断状态」的进程平均数;通常有3个单位指标:1/5/15分钟;

如果 Load值持续高于系统的CPU核心数,说明系统负载过重,CPU 资源不足,无法及时处理所有任务,任务会在队列中等待,导致系统响应变慢。如4核CPU的服务器,

LOAD=4
表示满负荷,
LOAD>4
表示过载。

如突发的流量通常会导致短期(1分)Load过载;如果5分钟甚至15分钟持续过载,应当关注,采取措施,比如机器扩容;

级别正常水位异常水位分析
1分≤ CPU核心数≥CPU核心数短期突发流量,可以关注
5分≤ CPU核心数≥CPU核心数可能引发持续高负载,需要关注,根据业务准备应急
15分≤ CPU核心数≥CPU核心数已经持续高负载,需要介入处理
  • 高流量引发的Load飙高属于正常,可考虑设置限流、机器扩容等;
  • 非流量引发,需要关注Load飙高期间的热点代码问题;
  • 偶现的Load飙高问题不大,有规律的Load飙高需要关注;

CPU利用率

CPU利用率通常大致有2个级别:

  • 用户态:应用程序代码消耗的CPU,一般对应业务逻辑;
  • 系统态:操作系统内核消耗的CPU;一般是系统调用、中断等;

|级别|正常水位|宽松水位|异常水位|分析| |---|---|---|---| | 用户态 | ≤ 50% | 50% ~ 70% | ≥ 80% | 存在计算密集逻辑,此时CPU可能是瓶颈 | | 系统态 | ≤ 10% | 10% ~ 20% | ≥ 20% | 在web应用中比较少见,通常意味着网络连接、IO请求频繁、文件读写频繁 |

Memory

内存需要关注物理内存和Swap使用量;

  • 物理内存:应用程序实际占用的内存;通过JVM进程的内存占用比较稳定,大涨大跌都是不正常的。
  • Swap使用量:物理内存不足时启用的虚拟内存;Swap使用量持续增长是内存不足的早期信号;
级别正常水位异常水位分析
物理内存≤ 70%≥ 90%关注是否流量异常、内存泄露,可能会引发FullGC
Swap使用量≤ 1次秒≥ 10次秒物理内存不足,可能影响性能,需扩容,或重启pod

压测找到系统瓶颈

1. 明确压测目标

  • 容量规划:确定系统能支撑的最大并发用户数(如双十一峰值流量)。
  • 瓶颈定位:发现代码逻辑、数据库查询、缓存或网络链路的性能问题。
  • 验证优化效果:对比优化前后的吞吐量(TPS/QPS)、延迟(Latency)等指标。

2. 设计压测场景

  • 基准测试:单接口/单服务的性能基线(如 API 的平均响应时间)。
  • 负载测试:逐步增加压力,观察系统的各个指标的状态
  • 压力测试:超过系统设计容量的极限测试(如 200% 峰值流量),观察降级或崩溃点。
  • 稳定性测试:长时间(如 24 小时)持续压力,检测内存泄漏或资源耗尽问题。

3. 环境与数据隔离

  • 独立压测环境:避免影响生产环境,尽量模拟生产配置(如相同的 CPU、内存、网络带宽)。
  • 数据隔离与预热
    • 数据库预填充真实规模的数据(避免空表测试失真)。
    • 缓存预热(如 Redis 提前加载热点数据)。