“CPU使用率超过80%就该扩容了“——这句话在不少运维团队里几乎是铁律。但真按这个标准操作,你会发现有些服务器CPU常年90%却运行平稳,有些60%就开始响应变慢。问题出在哪?因为你盯错了指标。
CPU利用率为什么不够用
CPU利用率只告诉你处理器在忙,但没告诉你它在忙什么。一个跑满CPU的加密计算任务和一个疯狂抢占锁的Web应用,利用率都是90%,但性质完全不同。前者是正常负载,后者是代码bug。如果只看利用率就触发告警,要么误报连连,要么漏掉真正的性能问题。
应该关注哪些指标
第一个是系统负载(load average)。它反映的是系统整体排队情况,不光看CPU,还包含等待IO的进程。一般经验值是负载不超过CPU核数的1.5倍。比如8核机器,负载在12以内算正常。
第二个是上下文切换频率。用vmstat看cs列,如果每秒上下文切换超过5万次,说明进程在频繁争抢资源,这时候CPU利用率可能不高,但系统性能已经下降。
第三个是IO等待时间。vmstat里的wa列如果持续超过20%,说明磁盘IO是瓶颈,加CPU没用,得换SSD或做读写分离。
怎样设置合理的告警
建议采用多维条件触发的方式。比如:CPU利用率大于85%且负载超过核数2倍,持续5分钟,才发告警。或者IO等待大于30%且磁盘队列长度大于2,才判定磁盘瓶颈。单独一个指标超线只做记录不告警,减少无效通知。
监控的价值不在数据多而在判断准。与其每天收到几十条CPU告警然后全部忽略,不如把告警条件设严格一点,让每一条都值得看一眼。