实时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

相关文章

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹