服务器 CPU 使用率并没有一个绝对的“警戒线”,因为它高度依赖于业务类型、核心数以及负载的持续时间。不过,我们可以根据通用的运维经验,将不同场景下的阈值划分为几个关注级别:
1. 通用参考标准(单核/平均视角)
对于大多数通用计算任务(如 Web 服务、数据库后端、应用服务器),可以参考以下区间:
- < 50%:健康状态。系统有充足的余量应对突发流量。
- 50% – 70%:观察状态。如果持续维持在这个水平,建议开始关注趋势。如果是周期性高峰(如每天中午),通常无需干预;如果是持续缓慢上升,则需排查是否有内存泄漏或异常进程。
- 70% – 85%:警告状态。此时系统响应时间可能开始变慢,用户可能会感到轻微卡顿。需要立即分析是哪个进程在占用资源,并评估是否需要扩容或优化代码。
- > 85%:危险状态。极大概率会导致服务延迟飙升、超时甚至崩溃。必须立即介入处理。
- > 95% – 100%:紧急状态。系统处于饱和或过载状态,新请求可能被排队丢弃,严重时可导致服务不可用。
2. 关键考量因素(为什么不能只看数字?)
单纯看“平均值”往往会掩盖真相,必须结合以下维度判断:
A. 核心数量与并发能力
现代服务器通常是多核的(如 32 核、64 核)。
- 误区:看到总使用率 80% 就报警。
- 真相:如果是一个 64 核的服务器,总使用率 80% 意味着还有大量空闲核心。真正需要警惕的是单核使用率是否长期接近 100%,或者高负载核心数占比过高。
- 指标建议:关注
Load Average(平均负载)。如果 Load Average 超过 CPU 核心数(例如 8 核机器,Load > 8),说明队列中等待执行的进程过多,性能已受影响。
B. 持续时间 vs. 瞬时峰值
- 瞬时峰值(几秒到几分钟):在秒杀活动、批量数据处理开始时出现短暂的 100% 是正常的,只要不持续即可。
- 持续高位(几十分钟以上):如果 CPU 长期维持在 80% 以上,说明资源不足以支撑当前的业务模型,必须优化或扩容。
C. 业务类型差异
- 计算密集型(如视频转码、AI 推理、科学计算):这类任务设计目标就是让 CPU 跑满。如果 CPU 使用率只有 30%,反而说明硬件资源浪费,不需要报警。
- IO 密集型(如数据库、文件服务):这类任务主要受限于磁盘读写或网络。如果 CPU 很高,通常意味着程序在处理逻辑上遇到了瓶颈(如死循环、低效算法)或者发生了频繁的上下文切换。
- 交互式服务(如 API 网关、Web 前端):对延迟极其敏感。CPU 一旦超过 60-70%,用户体验就会明显下降,需要更早介入。
3. 如何排查与应对?
当发现 CPU 使用率异常升高时,建议按以下步骤操作:
- 区分用户态 (us) 和内核态 (sy):
- 通过
top命令查看%us(用户空间) 和%sy(内核空间)。 - 如果
%sy过高(例如 > 30%),可能是由于大量的系统调用、上下文切换、中断风暴或锁竞争导致的,而非业务逻辑本身的问题。
- 通过
- 定位具体进程:
- 使用
top按P键排序,找到占用最高的 PID。 - 进一步使用
pidstat或perf工具分析该进程的具体线程行为。
- 使用
- 检查是否存在“惊群效应”或死循环:
- 常见原因包括代码中的无限循环、未优化的 SQL 查询、正则表达式回溯过深等。
- 制定策略:
- 短期:重启异常服务、限流降级、临时扩容。
- 长期:代码重构、引入缓存、增加数据库索引、升级硬件架构。
总结建议
对于大多数生产环境,建议设置如下监控告警规则:
- 一级告警(黄色):CPU 平均使用率持续 5 分钟 > 70%。提示运维人员介入观察。
- 二级告警(红色):CPU 平均使用率持续 5 分钟 > 85% 或 Load Average > CPU 核心数。提示立即处理,防止服务雪崩。
记住:最好的监控不是盯着一个数字,而是结合业务 QPS(每秒请求数)和响应时间(RT)来综合判断。
CLOUD技术笔记