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
文件(如果该文件不存在),并将内容写入到该文件中。