一.现象线上接口非常卡顿,经查服务器负载很高
二.查看prometheus监控CPU使用率和负载
如下图所示CPU使用率达到60%左右,系统负载超过1。
需要注意的是:CPU利用率在60%的时候,系统负载已经接近或者突破1了。
当系统负载接近1的时候进程就会排队。
由于prometheus监控粒度比较粗,而且默认没有CPU的steal,虽然经过调整可以调出steal,和sar相比还是sar更强大一些,特别有时候可能没有prometheus的时候,使用sar就非常轻量。
三.使用Linux的 sar命令
#sar -u -s 07:00:00 -e 22:00:00
这里默认10分钟进行一次统计,可以粗略的看出系统的负载情况。
其中重点关注 %steal
(虚拟化环境中的 CPU 资源争抢情况)
关键指标分析
1. %steal
(CPU 窃取时间)
-
定义:虚拟机因宿主机资源不足被剥夺的 CPU 时间占比。
-
您的数据:
-
正常时段:0.12%~0.35%(绿色安全范围)
-
高峰时段:20:00-20:10 达 1.94%~2.39%(黄色警告范围)
-
-
结论:
-
宿主机在 20:00-20:10 存在资源争抢(可能邻居虚拟机繁忙或宿主机超卖 CPU)。
-
其他时段表现正常。
-
2. %user
+ %system
(CPU 总使用率)
-
20:00-20:10 高峰:
-
用户态 31.06% + 内核态 9.92% = 总使用率 ~41%
-
结合
%steal
升高,说明此时段既是 应用负载高峰,又是 资源争抢高峰。
-
3. %iowait
(I/O 等待)
-
全程接近 0%,说明 无磁盘 I/O 瓶颈。
4. %idle
(CPU 空闲)
-
空闲率与使用率呈镜像关系,20:00-20:10 空闲仅 57.07%,确认负载集中。
四.调整sar的监控间隔
传统的sar配置文件在/etc/cron.d/sysstat
#cat /etc/cron.d/sysstat
用这个没有输出说明不在。
# 检查 systemd timer systemctl list-timers | grep -i sysstat
通过这个可以找到。
直接vi修改。
[Unit]
Description=Run system activity accounting tool every 5 minutes
[Timer]
OnCalendar=*:00/10
[Install]
WantedBy=sysstat.service
直接调整OnCalendar=*:00/1 然后保持退出
重启systemctl daemon-reload
重新加载
#systemctl daemon-reload
再次打开sar就是以分钟为单位进行监控。