当前位置: 首页 > news >正文

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

相关文章:

  • C语言踩坑题:int8_t类型数据的移位或运算
  • (五)Dart 数据类型
  • 嵌入式人工智能应用- 第十章街景分类
  • 现在有分段、句子数量可能不一致的中英文文本,如何用python实现中英文对照翻译(即每行英文对应相应的中文)
  • C# 建造者模式(Builder Pattern)详细讲解
  • 一文了解CAS
  • 图片标注及流程
  • 如何使用Python的matplotlib.pyplot绘制热图和损失图
  • 二进制数(十进制转二进制)
  • ObjC NSString字符串常量编码格式是编译器决定还是ObjC语言规范决定?字符串默认编码?
  • 【VUE】day02-vue过滤器、计算属性、vue-cli、vue组件
  • ST电机库电流采样 三电阻单ADC
  • 【论文笔记】FFA-Net: Feature Fusion Attention Network for Single Image Dehazing
  • Powershell如何查询 windows defender是否开启
  • 数据库小练习
  • 函数式编程定义
  • 【Msq8.0无需登陆进行重置密码】
  • 数学建模 第一节
  • PAT甲级(Advanced Level) Practice 1019 General Palindromic Number
  • Next.js项目MindAI教程 - 第六章:在线咨询功能
  • 中央宣传部、全国总工会联合发布2025年“最美职工”先进事迹
  • 云南铁路:打造“铁路+金融+产业”融合发展生态
  • 海尔智家一季度营收791亿元:净利润增长15%,海外市场收入增超12%
  • 中国人保一季度业绩“分化”:财险净利增超92%,寿险增收不增利
  • 民生银行一季度净利127.42亿降逾5%,营收增7.41%
  • 民生访谈|规范放生活动、提升供水品质……上海将有这些举措