0


实时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 占用率functionget_cpu_usage(){# 使用 `mpstat` 工具获取所有 CPU 的占用率CPU_USAGE=$(mpstat 11|awk'/^Average:/ {print 100 - $NF}')echo"CPU Usage: ${CPU_USAGE}%"}# 获取内存使用情况functionget_memory_usage(){# 使用 `free` 命令获取内存使用情况MEM_INFO=$(free-m|awk'/Mem:/ {print $3 "MB used, " $4 "MB free"}')echo"Memory Usage: ${MEM_INFO}"}# 获取 IO 使用情况functionget_io_usage(){# 使用 `iostat` 获取 IO 使用率IO_INFO=$(iostat -dx11|awk'/^Device:/ {getline; print $1 " IO Utilization: " $NF"%"}')echo"IO Usage: ${IO_INFO}"}# 获取单核 CPU 占用率functionget_per_cpu_usage(){# 使用 `mpstat` 工具获取每个 CPU 核心的占用率PER_CPU_USAGE=$(mpstat -P ALL 11|awk'/^Average:/ && $2 ~ /[0-9]+/ {print "CPU" $2 ": " 100 - $NF "%"}')echo"Per CPU Usage:"echo"$PER_CPU_USAGE"}# 获取 CPU 占用率最高的前 10 个进程functionget_top_10_cpu_processes(){# 使用 `ps` 命令按 CPU 占用率排序,列出前10个进程TOP_PROCESSES=$(ps-eo pid,user,comm,%cpu,%mem --sort=-%cpu |head-n11)echo"Top 10 CPU-consuming processes:"echo"$TOP_PROCESSES"}# 获取指定目录的磁盘空间使用情况functionget_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秒钟采集一次数据whiletrue;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秒钟再执行下一次采集sleep3done

实现思路

  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 性能优化 bash

本文转载自: https://blog.csdn.net/promise524/article/details/141660435
版权归原作者 promise524 所有, 如有侵权,请联系我们删除。

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

还没有评论