这是一个非常好的问题,答案并非一个简单的百分比,而是取决于服务器的类型、工作负载和配置。
简单来说,没有一个适用于所有服务器的“正常”最高值。关键在于理解上下文和监控趋势。
我们可以从以下几个层面来理解:
1. 按服务器类型和角色分析(最常见的情况)
-
Web/应用服务器:
- 正常范围:通常认为 70% – 80% 的平均使用率是健康且资源利用充分的。短暂峰值达到 90%-95% 是可以接受的,例如在应对突发流量时。
- 关注点:需要警惕的是持续高于80-85% 的使用率,这可能意味着服务器即将成为瓶颈,需要扩容或优化代码。
-
数据库服务器:
- 正常范围:通常更保守一些。50% – 70% 的平均使用率可能更理想。数据库的瓶颈往往先在I/O(磁盘读写) 和内存上,持续高CPU可能意味着查询需要优化(如缺少索引、复杂连接)。
- 关注点:突然的、持续的CPU 100%很可能是有问题的慢查询或锁争用。
-
文件/存储服务器:
- 正常范围:CPU通常不是主要瓶颈,除非在进行加密、压缩或病毒扫描。30% – 50% 的使用率可能就算较高了,重点应监控网络和磁盘I/O。
-
虚拟化/云计算主机:
- 正常范围:这取决于宿主机上虚拟机的数量和负载。管理员会关注整体负载。单个虚拟机CPU使用率可以很高,但需要关注宿主机是否过载(
CPU Ready时间是一个关键指标)。
- 正常范围:这取决于宿主机上虚拟机的数量和负载。管理员会关注整体负载。单个虚拟机CPU使用率可以很高,但需要关注宿主机是否过载(
-
高性能计算/批处理服务器:
- 正常范围:目标是尽可能接近100%!这类服务器运行科学计算、渲染、大数据分析等任务,持续的高CPU使用率正是其工作目的,表明计算资源被充分利用。
2. 关键概念:区分“平均使用率”和“峰值”
- 平均使用率:一段时间(如5分钟、1小时)内的平均值。这是评估容量规划的主要指标。
- 峰值:瞬间达到的极高值(如100%)。短暂的峰值(几秒到几分钟)通常是正常的,例如服务启动、定时任务执行、应对一个小流量洪峰。关键是峰值过后CPU能否回落。
3. 比绝对百分比更重要的指标
单纯看CPU百分比可能产生误导,必须结合其他指标:
- Load Average(系统负载):在Linux/Unix系统中,负载平均值(如
1.05, 0.80, 0.60)反映了等待CPU的进程数。规则是:负载平均值持续高于CPU核心数,说明系统过载。例如,4核CPU,负载持续高于4,就需要警惕。 - CPU Steal Time(窃取时间):对于云服务器/VPS非常重要。它表示你的虚拟机在等待物理CPU的时间。如果这个值持续很高(如>10%),说明你的邻居太“吵”了,需要考虑更换更稳定的主机或升级计划。
- I/O Wait(I/O等待):表示CPU在等待磁盘I/O的时间。高
iowait加上低CPU使用率,通常意味着磁盘是瓶颈,CPU在“空等”。 - 用户态 vs 系统态:
%us高通常是应用问题;%sy高可能意味着系统调用频繁或内核有瓶颈。 - 应用性能指标:响应时间、错误率、吞吐量。即使CPU不高,但响应时间变慢,同样意味着有问题。
总结与建议
- 建立基线:监控你的服务器在正常业务时段的CPU使用率,了解它的“正常模式”。每个系统都是独特的。
- 关注趋势和持续性:持续数小时的高使用率比短暂的100%峰值更值得担忧。
- 结合多指标判断:一定要看负载、内存、磁盘I/O、网络和应用性能,综合判断。
- 设置智能告警:
- 不要简单地对“CPU > 90%”告警。
- 更有效的告警规则可能是:“CPU平均使用率(5分钟)持续超过85% 且 系统负载持续高于CPU核心数,持续10分钟”。
- 或者:“CPU使用率突然比基线上升了50%以上”。
- 根本原因分析:当CPU过高时,使用
top,htop,pidstat,perf等工具定位是哪个进程、哪个线程、甚至哪段代码导致的。
最终答案:对于大多数面向事务的在线服务(如网站、API),将CPU平均使用率维持在70%-80%以下,并能平稳处理短暂峰值,通常被认为是正常和高效的。对于计算密集型任务,100%才是理想状态。
CLOUD技术笔记