Shell 脚本实现内存和磁盘监控
概述
在Linux系统中,你可以使用 /proc/meminfo 文件获取内存信息,meminfo 是Linux系统中一个用于提供内存使用信息的虚拟文件。它包含了系统内存各个方面的详细统计数据,包含:MemTotal:表示系统总的物理内存大,小单位是KB。 MemFree:指当前系统中尚未被使用的物理内存大小,单位为KB。MemAvailable:显示可供应用程序使用的内存数量,单位是KB。该值是一个估计值,考虑了系统中可回收的内存和缓存等因素,更能反映实际可用的内存情况。Buffers:用于存储文件系统元数据和块设备的块缓存等信息的内存大小,单位为KB。 Cached:表示被文件系统缓存所使用的内存大小,单位是KB。缓存的文件数据可以加快文件的读取速度,当系统需要更多内存时,这部分缓存可以被释放。SwapTotal:系统交换空间(虚拟内存)的总大小,单位为KB。SwapFree:当前未被使用的交换空间大小,单位是KB结合 awk 命令编写简单的内存检测脚本。该文件包含了系统内存使用情况的详细信息, awk 则用于处理和提取其中的数据。
你可以使用 df 命令获取磁盘空间信息,再结合Shell脚本实现磁盘空间监控。 df 命令用于显示文件系统的磁盘空间使用情况,通过对这些数据的提取和分析,就能监控磁盘空间。
实现
内存监控
监控脚本watch_mem.sh:
#!/bin/bash
watch_memory(){
# 获取内存总大小(单位KB)
total_mem=$(grep 'MemTotal' /proc/meminfo | awk '{print $2}')
# 可用内存大小(单位KB)
used_mem=$(grep 'MemAvailable' /proc/meminfo | awk '{print $2}')
used_mem=$((total_mem - used_mem)) # 已使用内存大小
# 交换空间大小
swap_total=$(cat /proc/meminfo |grep 'SwapTotal' | awk '{print $2}')
# 交换空间可用大小
swap_free=$(cat /proc/meminfo |grep 'SwapFree' | awk '{print $2}')
swap_used=$((swap_total-swap_free))
# 获取内存使用率
usage_percent=$((used_mem * 100 / total_mem))
echo "内存总大小: $total_mem KB === $((total_mem / 1024)) MB"
echo "已使用内存: $used_mem KB === $((used_mem / 1024)) MB"
echo "内存使用率: $usage_percent%"
# 判断内存使用率是否超过80%
if [ $usage_percent -gt 80 ]; then
echo "警告:内存使用率过高!"
fi
swap_usage=$((100 - swap_free * 100/ swap_total))
echo "交换空间总大小:$swap_total KB === $((swap_total / 1024)) MB"
echo "已使用交换空间:$swap_used KB === $((swap_used / 1024)) MB"
echo "交换空间使用率:$swap_usage%"
}
# 死循环,使用CTRL+C结束
while [ 1 -gt 0 ]
do
clear # 清屏
watch_memory
sleep 2 # 休眠两秒
done
运行脚本:
sh watch_mem.sh
磁盘监控
磁盘监控watch_disk.sh:
#!/bin/bash
# 定义要监控的磁盘分区,这里以根分区为例
partition="/"
# 获取磁盘总大小(单位GB)
total_size=$(df -BG $partition | awk 'NR==2 {print $2}' | sed 's/G//')
# 获取已使用大小(单位GB)
used_size=$(df -BG $partition | awk 'NR==2 {print $3}' | sed 's/G//')
# 获取磁盘使用率
usage_percent=$(df -h $partition | awk 'NR==2 {print $5}' | sed 's/%//')
echo "磁盘分区: $partition"
echo "磁盘总大小: $total_size GB"
echo "已使用大小: $used_size GB"
echo "磁盘使用率: $usage_percent%"
# 判断磁盘使用率是否超过80%
if [ $usage_percent -gt 80 ]; then
echo "警告:磁盘使用率过高!"
fi
运行脚本:
sh watch_disk.sh