在进行应用部署、系统调试或资源压力测试时,实时掌握系统资源的使用情况至关重大。虽然市面上有许多优秀的开源监控平台(如 Prometheus + Grafana、Zabbix、Netdata 等),但对于临时性、轻量级的监控需求而言,借助 Bash 脚本快速搭建一个简易监控工具,不仅高效实用,更是系统管理员手中的一把利器。
本文将详尽介绍如何使用不足 10 行的 Bash 脚本,在 Linux 环境下实现对 CPU、内存和磁盘使用率的实时监控。该脚本每秒输出一次资源占用信息,并可将结果输出到日志文件中,方便后续导入 Excel 进行可视化分析。适用于测试环境、资源评估以及新应用上线前的压力分析。
一、监控方案概览
本脚本主要分为三部分:
- 内存使用率监控
- 磁盘使用率监控
- CPU 使用率监控
并通过 while 循环定时刷新数据,每次输出一行三列的数据表,记录系统资源使用情况。
二、监控内存使用率:free + awk
我们使用如下命令提取当前系统的内存使用百分比:
free -m | awk 'NR==2{printf "%.2f%% ", $3*100/$2 }'

原理解析:
- free -m 会输出以 MB 为单位的内存使用情况。

- awk 'NR==2{…}' 取第二行(Mem 行)。
- $3 为已用内存,$2 为总内存,$3*100/$2 即计算使用率。
三、监控磁盘使用率:df + awk
命令如下:
df -h | awk '$NF=="/"{printf "%s ", $5}'

原理解析:
- df -h 输出所有挂载点的磁盘使用情况。
- $NF==”/” 表明匹配挂载在根目录 / 的那一行。
- $5 是使用率字段,形如 7%。
示例输出:

四、监控 CPU 使用率:top + grep + awk top -bn1 | grep load | awk '{printf “%.2f%%
“, $(NF-2)}'

原理解析:
- top -bn1:一次性以 batch 模式运行 top 命令。
- grep load:筛选包含 load average 的行。
- $(NF-2):倒数第三个字段,即 1 分钟平均负载(例如 0.00),我们将其近似表明为 CPU 使用率。

注意:此方法虽不能精准反映 CPU 百分比,但在轻量级监控中具有代表性,适合趋势观察。
五、组装脚本核心逻辑
将三个子命令分别封装到变量中,并构建一个持续运行的循环:
MEMORY=$(free -m | awk 'NR==2{printf "%.2f%% ", $3*100/$2 }')
DISK=$(df -h | awk '$NF=="/"{printf "%s ", $5}')
CPU=$(top -bn1 | grep load | awk '{printf "%.2f%%
", $(NF-2)}')
定义运行时长,并以 5 秒为间隔输出数据:
end=$((SECONDS+3600)) # 运行 1 小时
while [ $SECONDS -lt $end ]; do
echo "$MEMORY$DISK$CPU"
sleep 5
done
六、完整 Bash 脚本(stats.sh)
#!/bin/bash
printf "Memory Disk CPU
"
end=$((SECONDS+3600)) # 运行一小时,可修改为任意秒数
while [ $SECONDS -lt $end ]; do
MEMORY=$(free -m | awk 'NR==2{printf "%.2f%% ", $3*100/$2 }')
DISK=$(df -h | awk '$NF=="/"{printf "%s ", $5}')
CPU=$(top -bn1 | grep load | awk '{printf "%.2f%%
", $(NF-2)}')
echo "$MEMORY$DISK$CPU"
sleep 5
done

执行方式:
chmod +x stats.sh
./stats.sh


七、保存数据到日志文件以供分析
若希望将监控结果保存:
./stats.sh >> resource_log.txt

可在 Excel 中打开 resource_log.txt,使用制表符分隔进行图表分析。

© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...