用 10 行 Bash 脚本打造轻量级 Linux 系统资源监控工具

360影视 国产动漫 2025-05-19 14:33 2

摘要:在进行应用部署、系统调试或资源压力测试时,实时掌握系统资源的使用情况至关重要。虽然市面上有很多优秀的开源监控平台(如 Prometheus + Grafana、Zabbix、Netdata 等),但对于临时性、轻量级的监控需求而言,借助 Bash 脚本快速搭建

在进行应用部署、系统调试或资源压力测试时,实时掌握系统资源的使用情况至关重要。虽然市面上有很多优秀的开源监控平台(如 Prometheus + Grafana、Zabbix、Netdata 等),但对于临时性、轻量级的监控需求而言,借助 Bash 脚本快速搭建一个简易监控工具,不仅高效实用,更是系统管理员手中的一把利器。

本文将详尽介绍如何使用不足 10 行的 Bash 脚本,在 Linux 环境下实现对 CPU、内存和磁盘使用率的实时监控。该脚本每秒输出一次资源占用信息,并可将结果输出到日志文件中,方便后续导入 Excel 进行可视化分析。适用于测试环境、资源评估以及新应用上线前的压力分析。

本脚本主要分为三部分:

内存使用率监控磁盘使用率监控CPU 使用率监控

并通过 while 循环定时刷新数据,每次输出一行三列的数据表,记录系统资源使用情况。

我们使用如下命令提取当前系统的内存使用百分比:

free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }'free -m 会输出以 MB 为单位的内存使用情况。awk 'NR==2{...}' 取第二行(Mem 行)。$3 为已用内存,$2 为总内存,$3*100/$2 即计算使用率。

命令如下:

df -h | awk '$NF=="/"{printf "%s\t\t", $5}'df -h 输出所有挂载点的磁盘使用情况。$NF=="/" 表示匹配挂载在根目录 / 的那一行。$5 是使用率字段,形如 7%。

示例输出:

四、监控 CPU 使用率:top + grep + awktop -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(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%%\t\t", $3*100/$2 }')DISK=$(df -h | awk '$NF=="/"{printf "%s\t\t", $5}')CPU=$(top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}')

定义运行时长,并以 5 秒为间隔输出数据:

end=$((SECONDS+3600)) # 运行 1 小时while [ $SECONDS -lt $end ]; do echo "$MEMORY$DISK$CPU" sleep 5done#!/bin/bashprintf "Memory\t\tDisk\t\tCPU\n"end=$((SECONDS+3600)) # 运行一小时,可修改为任意秒数while [ $SECONDS -lt $end ]; do MEMORY=$(free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }') DISK=$(df -h | awk '$NF=="/"{printf "%s\t\t", $5}') CPU=$(top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}') echo "$MEMORY$DISK$CPU" sleep 5done

执行方式:

chmod +x stats.sh./stats.sh./stats.sh >> resource_log.txt

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

来源:wljslmz一点号

相关推荐