cpu相关参数的理解

简介

  最近在线上跑的的业务,同事跟我说zabbix没有告警,当时机器上cpu 占用很高,idle已经很低了,但是cpu确实没有报警出来。然后我开始分析cpu的告警条件触发器等,做下这次的总结分析过程。

首先我查看该机器上告警触发条件,触发器配置的是

{base_template:system.cpu.util[,user].count(#3,85,"ge")}>1 

  该触发器表示用户空间占用的百分比三次监测超过85%进行告警。然后我通过机器上的top命令查看该值都是多少

看了这图之后我发现跟我的认知有些不一样了,我之前的理解cpus 应该是各个进程占用的总和才对呢,实际上并不是这样。

先看下这两条的基础含义:

Cpu(s):表示用户空间占用CPU的百分比。

%CPU:表示上次更新到现在的CPU时间占用百分比。

在看下每个逻辑cpu核占用的百分比

   实际上Cpu(s) 表示所有用户进程占用整个cpu的平均值,因为每一个核心占用的百分比不同,所以来看平均值。

  %CPU显示的是进程占用一个核的百分比,而不是整个cpu(16核)的百分比,有时候可能大于100,那是因为该进程启用了多线程占用了多个核心,所以有时候我们看该值得时候会超过100%,但不会超过总核数*100。

  这样来看的话,监控的触发器确实就不会被触发了,为了能监控实际的数据进行告警,所以监控的策略触发器需要调整下,将之前的触发器上在添加一个或的条件进行触发

{base_template:system.cpu.util[,idle].avg(1m)}<15

  就是判断空闲的百分比,当空闲小于15%即使用超过85%进行告警通知。

ps:cpu压测触发小事例

先用一个小一点的数字测试,观察图形之后再逐步加大

echo "scale=500; 4*a(1)" | bc -l -q
该命令是计算圆周率后面的500位

  

猜你喜欢

转载自www.cnblogs.com/Jabe/p/11882526.html