Shell开发实践:服务器的磁盘、CPU、内存的占用监控

在这里插入图片描述

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。
🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。
🎉欢迎 👍点赞✍评论⭐收藏

文章目录

  • 🚀一、前言
  • 🚀二、关于他们
    • 🔎2.1 CPU(中央处理器)
    • 🔎2.2 内存(也称为随机存取存储器RAM)
    • 🔎2.3 磁盘(硬盘驱动器)
  • 🚀三、监控实现
    • 🔎3.1 监控CPU
    • 🔎3.2 监控内存
    • 🔎3.3 监控磁盘
  • 🚀四、配置crontab
  • 🚀五、总结


🚀一、前言

CPU、内存和磁盘是计算机中重要且相互依赖的组件。CPU执行运算和控制指令,内存提供临时存储空间用于存储CPU需要处理的数据和指令,而磁盘则提供长期存储的功能。它们共同工作以实现计算机的正常运行和数据处理任务。

本文主要通过shell实现如何监控他们的使用情况。

在这里插入图片描述

🚀二、关于他们

🔎2.1 CPU(中央处理器)

是计算机的核心组件之一,负责执行计算机指令和控制计算机的操作。它是计算机的“大脑”,决定了计算机的运行速度和性能。CPU包含多个核心,每个核心可以执行一个或多个线程的指令。

在这里插入图片描述

🔎2.2 内存(也称为随机存取存储器RAM)

是计算机用于存储数据和指令的地方。它是临时存储器,这意味着当计算机关闭或断电时,其中的数据会丢失。内存以字节为单位存储数据,并具有不同的访问速度和容量。计算机将需要处理的数据和指令从磁盘加载到内存中,然后CPU从内存中获取数据并进行处理。
在这里插入图片描述

🔎2.3 磁盘(硬盘驱动器)

是计算机用于长期存储数据和程序的设备。相比内存,磁盘的容量更大,但读写速度较慢。磁盘通常是非易失性存储器,这意味着即使计算机关闭或断电,其中的数据也能保持不变。磁盘由一个或多个盘片组成,这些盘片通过磁头来读取和写入数据。计算机通过操作系统和文件系统来管理磁盘上的数据。

在这里插入图片描述

🚀三、监控实现

🔎3.1 监控CPU

要编写一个shell脚本来监控CPU占用大小,可以使用命令top来获取系统的CPU信息,并解析输出结果。

以下是一个示例的shell脚本代码,该脚本会循环读取CPU的占用情况,并在符合条件时输出提示信息。

#!/bin/bash# 设置阈值,当CPU占用超过该阈值时进行输出提示
threshold=80while true
do# 使用top命令获取CPU占用信息,并使用grep和awk筛选和解析输出结果cpu_usage=$(top -bn 1 | grep "%Cpu(s)" | awk '{print $2}')# 将浮点数转换为整数,以便进行比较cpu_usage=${cpu_usage%.*}echo "Current CPU Usage: ${cpu_usage}%"# 检查CPU占用是否超过阈值if [ $cpu_usage -gt $threshold ]thenecho "CPU Usage Exceeded Threshold!"# 在此处添加其他操作或通知机制fi# 定义间隔时间,以控制检查频率sleep 5
done

以上代码中,threshold变量定义了设定的阈值,如果CPU占用超过该阈值,将输出警告信息。top命令用于获取系统的CPU占用情况,grepawk用于筛选和解析输出结果。sleep命令定义了循环的间隔时间,这里设置为5秒。

你可以根据需求自定义脚本中的阈值、输出信息和其他操作。

🔎3.2 监控内存

你可以使用 free 命令来获取当前系统的内存占用情况,并使用 awk 命令来提取需要的信息。以下是一个示例代码:

#!/bin/bash# 设置阈值,当内存占用超过该阈值时发送警告
threshold=80while true; do# 使用 free 命令获取内存占用情况,并使用 awk 提取第三行的数据mem_info=$(free | awk 'NR==3{print $3/$2 * 100}')# 比较内存占用情况和阈值if (( $(echo "$mem_info > $threshold" | bc -l) )); thenecho "内存占用超过阈值($threshold%),当前占用为:$mem_info%"# 在此处添加发送警告的代码fi# 等待一段时间后再次监控sleep 5
done

在脚本中,free 命令用于获取内存占用情况,其中 awk 'NR==3{print $3/$2 * 100}' 表示提取 free 命令输出的第三行(包含内存占用信息),并计算内存占用百分比。与阈值进行比较后,如果超过阈值,则输出警告信息。你可以在警告部分加入发送邮件或其他通知的代码。

脚本中使用 sleep 5 表示每隔 5 秒重新检查一次内存占用情况,你可以根据需要更改该值。将以上代码保存为脚本文件(比如 memory_monitor.sh),并通过 chmod +x memory_monitor.sh 命令给予执行权限后,就可以运行该脚本来监控内存占用情况了。

🔎3.3 监控磁盘

你可以使用df命令来获取磁盘占用情况,然后编写一个shell脚本来监控磁盘占用大小。以下是一个示例代码:

#!/bin/bash# 设置阈值,当磁盘使用率超过该阈值时发送警报
THRESHOLD=90# 获取磁盘使用率,并提取百分比部分
usage=$(df -h | awk '$NF=="/"{printf "%s\n", $5}' | cut -d'%' -f1)# 检查磁盘使用率是否超过阈值
if [ $usage -gt $THRESHOLD ]; thenecho "磁盘使用率超过阈值,请及时清理!"
fi

将上述代码保存到一个文件(例如check_disk_usage.sh),然后通过运行 bash check_disk_usage.sh 或者 ./check_disk_usage.sh 来执行脚本。

请注意,即使这个脚本可以监控磁盘使用情况,但它并不会持续监控。你可能需要使用定时任务工具(如cron)来定期运行这个脚本,以便实现长期监控。

🚀四、配置crontab

这些脚本写好了,需要定时执行,可以通过crontab配置每天或者几个小时跑一次。下面是每8小时跑一次的配置。

* */8 * * * bash /你的代码基础路径/disk.sh

🚀五、总结

服务器的CPU磁盘内存是服务器运行和处理任务的关键组件,它们的正常运行状态对服务器的稳定性和性能至关重要。因此,监控服务器的CPU磁盘内存的使用情况是非常必要的。

在这里插入图片描述
希望本文对您有所帮助,我们下次见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/95872.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS开发Swift-4-IBAction,group,音乐播放器-木琴App

1.使用素材创建木琴App的UI。 2.连接IBAction。 其余按钮直接拖拽到play里边。 当鼠标置于1处时2处显示如图,表示成功。当用户按下任一按钮都会触发play中的内容。 3.将7个按钮的View中的Tag值分别调为1、2、3、4、5、6、7. 4.将音频文件拖入项目文件中。 Create gr…

Arcface部署应用实战

1、概述 人脸识别的一个比较常用的网络arcface,依赖于其特殊设计的loss函数,使得模型在训练的时候能够实现类间距离增大,类内的距离不断减小,最终使得所训练的backbone能够获取鉴别性很高的特征,便于人脸识别。 本文…

POI-TL制作word

本文相当于笔记,主要根据官方文档Poi-tl Documentation和poi-tl的使用(最全详解)_JavaSupeMan的博客-CSDN博客文章进行学习(上班够用) Data AllArgsConstructor NoArgsConstructor ToString EqualsAndHashCode public …

SpringBoot项目通过分词器生成词云

目录 前言一、词云是什么?二、使用步骤1.引入依赖2.application.yml3.Controller4.分词工具类4.词云生成工具类、支持输出文件和字节流 注意 前言 公司项目涉及到员工任务管理,需要从员工任务中获取任务信息生成个人词云图,可以把员工任务中…

排序算法问题

给你一个整数数组 nums,请你将该数组升序排列。 示例 1: 输入:nums [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums [5,1,1,2,0,0] 输出:[0,0,1,1,2,5] 代码如下: 1.插入排序(简…

容器技术Linux Namespaces和Cgroups

对操作系统了解多少,仅仅敲个命令吗 操作系统虚拟化(容器技术)的发展历程 1979 年,UNIX 的第 7 个版本引入了 Chroot 特性。Chroot 现在被认为是第一个操作系统虚拟化(Operating system level virtualization&#x…

2359. 找到离给定两个节点最近的节点;1781. 所有子字符串美丽值之和;2406. 将区间分为最少组数

2359. 找到离给定两个节点最近的节点 核心思想:统计node1和node2分别到每个点的距离,然后在枚举每个点统计结果。关键在于如何统计node到每个点的距离,首先是初始化为inf很重要,因为在枚举的时候,因为是inf代表了这个节点无法到达…

STM32--RTC实时时钟

文章目录 Unix时间戳时间戳转换BKPRTC简介RTC框图硬件电路RTC的注意事项RTC时钟实验工程 Unix时间戳 Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。 时间戳存储在一个秒计数器中,秒计数器为32位/64…

系列五、Java操作RocketMQ简单消息之同步消息

一、概述 同步消息的特征是消息发出后会有一个返回值,即RocketMQ服务器收到消息后的一个确认,这种方式非常安全,但是性能上却没有那么高,而且在集群模式下,也是要等到所有的从机都复制了消息以后才会返回,适…

数据结构(Java实现)-排序

排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序&#xff…

【微服务部署】08-监控与告警

文章目录 1. PrometheusOperator1.1 优势1.2 配置脚本1.3 部署脚本 2. Granfana实现监控看板2.1 Granfana核心特性2.2 部署文件 3. prometheus-net收集自定义指标3.1 组件包3.2 使用场景 目前Kubernetes中最流行的监控解决方案是使用Prometheus和AlertManager 1. PrometheusOpe…

(超简单)将图片转换为ASCII字符图像

将一张图片转换为ASCII字符图像 原图: 效果图: import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileWriter; import java.io.IOException;public class ImageToASCII {/*** 将图片转换为A…