利用mpstat命令收集系统的CPU利用率

 mpstat 命令通过分析 /proc/stat 文件实时监控系统 CPU 利用率

1. mpstat 命令需要安装 sysstat 包才能正常工作。如果您的系统上没有安装该包,请使用以下命令将其安装:

sudo apt-get install sysstat

2. 要使用 mpstat 收集 CPU 利用率数据,请在终端中运行以下命令: 

mpstat -P ALL 1

3. 这将启动 mpstat 命令,并以每秒钟一次的频率显示 CPU 利用率数据。-P ALL 参数表示显示所有 CPU 核心的利用率,数字 1 参数表示刷新间隔为 1 秒钟。

mpstat -P ALL 1 命令的输出显示了每个 CPU 核心的实时统计信息,包括以下信息:

  • CPU: 表示当前统计指标所属的处理器编号;
  • %usr:表示在用户空间运行的进程消耗 CPU 时间的百分比;
  • %nice:表示运行在用户空间,但拥有较高优先级的进程消耗 CPU 时间的百分比;
  • %sys:表示在内核空间运行的进程消耗 CPU 时间的百分比;
  • %iowait:表示等待 I/O 完成而处于空闲状态的时间比例;
  • %irq:表示用于处理硬件中断的 CPU 时间百分比;
  • %soft:表示用于处理软件中断的 CPU 时间百分比;
  • %steal:表示因为被 hypervisor 等其他物理 CPU 抢占而无法使用的虚拟 CPU 百分比;
  • %guest:表示虚拟机内部运行的客户操作系统所使用的 CPU 时间百分比;
  • %idle:表示当前 CPU 空闲状态的时间百分比。

具体来说,对于每个 CPU 核心,mpstat -P ALL 1 命令将在终端中输出一个表,其中包含每秒钟的以上内容,以及所有 CPU 核心的平均值。例如,对于一个 8 核心的处理器,将显示 9 行表。每秒钟更新一次,直到按 Ctrl-C 停止为止。

编写脚本监测CPU利用率,监测间隔为30秒。结果包含四个指标:%usr、%sys、%iowait、%idle。并将结果按照日期记录到日志文件中。

#!/bin/bash

# 获取当前日期和日志文件路径
current_date=$(date +%Y-%m-%d)
log_dir="/var/log/system_usage"
log_file="$log_dir/system_usage_$current_date.log"

# 如果日志目录不存在,则创建目录
if [ ! -d $log_dir ]; then
  mkdir -p $log_dir
fi

# 设置监测时长
monitor_time=$((8*24*3600))

# 获取起始时间戳和终止时间戳
start_timestamp=$(date +%s)
end_timestamp=$((start_timestamp+monitor_time))

while [ $(date +%s) -lt $end_timestamp ]; do
  # 获取当前时间并输出
  timestamp=$(date +"%Y-%m-%d %T")
  
  # 如果日志文件不存在,则在第一行写入列标题
  if [ ! -f $log_file ]; then
    echo "[$timestamp] usr sys iowait idle" >> $log_file
  fi
  
  # 利用 mpstat 获取 CPU 利用率数据并输出 all 行的数据
  mpstat -P ALL 1 1 | awk -v ts="[$timestamp]" '/^all/ {print ts, $4, $6, $7, $12}' >> $log_file

  # 等待 30 秒后继续下一轮监控
  sleep 30
done

如果 log_file 文件不存在,>> 重定向符会自动创建该文件,并将数据写入到该文件中。

在 Bash 中,>> 重定向符用于将输出内容追加到指定文件末尾。如果该文件不存在,则会自动创建该文件并将内容写入其中。而 > 重定向符则会将输出内容覆盖指定文件,如果该文件不存在,则会自动创建该文件。

所以在我们的脚本中,无论是 echo "timestamp,usr,sys,iowait,idle" > $log_file 还是 echo "$timestamp,$cpu_data" >> $log_file,都会自动创建 log_file 文件(如果该文件不存在),并将内容写入到该文件中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值