实时Linux性能监控脚本:周期性自动统计CPU、内存和IO使用情况

本文主要是介绍实时Linux性能监控脚本:周期性自动统计CPU、内存和IO使用情况,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Linux Shell 脚本实现每3秒钟统计 CPU 占用率、内存空间、IO、单核 CPU 占用率、CPU 占用率最高的前10个应用进程以及指定目录 /opt 的磁盘空间变化。

Shell脚本

#!/bin/bash# 输出文件路径
OUTPUT_FILE="/var/log/system_monitor.log"# 创建/清空输出文件
> $OUTPUT_FILE# 获取 CPU 核心数量
NUM_CPUS=$(grep -c ^processor /proc/cpuinfo)# 获取 CPU 占用率
function get_cpu_usage() {# 使用 `mpstat` 工具获取所有 CPU 的占用率CPU_USAGE=$(mpstat 1 1 | awk '/^Average:/ {print 100 - $NF}')echo "CPU Usage: ${CPU_USAGE}%"
}# 获取内存使用情况
function get_memory_usage() {# 使用 `free` 命令获取内存使用情况MEM_INFO=$(free -m | awk '/Mem:/ {print $3 "MB used, " $4 "MB free"}')echo "Memory Usage: ${MEM_INFO}"
}# 获取 IO 使用情况
function get_io_usage() {# 使用 `iostat` 获取 IO 使用率IO_INFO=$(iostat -dx 1 1 | awk '/^Device:/ {getline; print $1 " IO Utilization: " $NF"%"}')echo "IO Usage: ${IO_INFO}"
}# 获取单核 CPU 占用率
function get_per_cpu_usage() {# 使用 `mpstat` 工具获取每个 CPU 核心的占用率PER_CPU_USAGE=$(mpstat -P ALL 1 1 | awk '/^Average:/ && $2 ~ /[0-9]+/ {print "CPU" $2 ": " 100 - $NF "%"}')echo "Per CPU Usage:"echo "$PER_CPU_USAGE"
}# 获取 CPU 占用率最高的前 10 个进程
function get_top_10_cpu_processes() {# 使用 `ps` 命令按 CPU 占用率排序,列出前10个进程TOP_PROCESSES=$(ps -eo pid,user,comm,%cpu,%mem --sort=-%cpu | head -n 11)echo "Top 10 CPU-consuming processes:"echo "$TOP_PROCESSES"
}# 获取指定目录的磁盘空间使用情况
function get_disk_usage() {# 使用 `df` 命令获取指定目录的磁盘使用情况DISK_USAGE=$(df -h /opt | awk 'NR==2 {print "Disk Usage on /opt: " $3 " used, " $4 " free, " $5 " utilized"}')echo "$DISK_USAGE"
}# 循环每3秒钟采集一次数据
while true; do# 获取当前时间echo "-----------------------------------------" >> $OUTPUT_FILEecho "Timestamp: $(date)" >> $OUTPUT_FILEecho "-----------------------------------------" >> $OUTPUT_FILE# 获取并输出 CPU 占用率echo "$(get_cpu_usage)" >> $OUTPUT_FILE# 获取并输出内存使用情况echo "$(get_memory_usage)" >> $OUTPUT_FILE# 获取并输出 IO 使用情况echo "$(get_io_usage)" >> $OUTPUT_FILE# 获取并输出每个核心的 CPU 占用率echo "$(get_per_cpu_usage)" >> $OUTPUT_FILE# 获取并输出 CPU 占用率最高的前10个进程echo "$(get_top_10_cpu_processes)" >> $OUTPUT_FILE# 获取并输出指定目录的磁盘空间使用情况echo "$(get_disk_usage)" >> $OUTPUT_FILE# 等待3秒钟再执行下一次采集sleep 3
done

实现思路

  1. 输出文件路径:将统计信息写入 /var/log/system_monitor.log 文件中。

  2. 清空输出文件:每次脚本启动时,清空输出文件,以避免将新数据追加到旧数据之后。

  3. 获取 CPU 核心数量:通过读取 /proc/cpuinfo 文件中的信息,统计 CPU 核心数量。

  4. 获取 CPU 占用率:使用 mpstat 命令计算所有 CPU 的平均占用率。mpstat 1 1 表示采样1秒钟,并获取平均数据。

  5. 获取内存使用情况:使用 free -m 命令获取内存使用情况。free 命令可以显示系统中内存的使用情况,-m 表示以 MB 为单位显示。

  6. 获取 IO 使用情况:使用 iostat 命令获取磁盘 IO 使用率。iostat -dx 1 1 表示采样1秒钟,并获取详细的设备级别的 IO 使用情况。

  7. 获取单核 CPU 占用率:使用 mpstat -P ALL 命令获取每个 CPU 核心的占用率。-P ALL 表示显示所有 CPU 核心的统计信息。

  8. 获取 CPU 占用率最高的前 10 个进程:使用 ps 命令按 CPU 占用率排序,并列出前10个进程。ps -eo pid,comm,%cpu,%mem 显示进程ID、命令名、CPU占用率、内存占用率。--sort=-%cpu 表示按CPU占用率降序排序,head -n 11 显示前10个进程,包含标题行。

  9. 获取指定目录的磁盘空间使用情况:使用 df -h 命令获取指定目录 /opt 的磁盘使用情况。df -h /opt 显示 /opt 目录所在分区的已用空间、可用空间和利用率。

  10. 循环每3秒钟采集一次数据:使用 while true 循环和 sleep 3 命令,确保脚本每3秒钟采集一次数据。

日志文件

日志文件 system_monitor.log 会被持续更新,每次采集到的数据会被追加到该文件中。通过 tail -f /var/log/system_monitor.log 实时查看监控数据。

总结

Shell脚本实现每3秒钟监控系统的 CPU 占用率、内存使用情况、IO使用情况、每个 CPU 核心的占用率、CPU 占用率最高的前10个进程以及 /opt 目录的磁盘空间变化。这有助于实时了解系统和指定目录的性能表现,并在必要时采取措施。

这篇关于实时Linux性能监控脚本:周期性自动统计CPU、内存和IO使用情况的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1120731

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块