Linux系统下实现每小时CPU与内存自动监控方案

admin
本方案基于Linux系统,通过结合top、free等系统命令与cron定时任务,实现每小时自动采集CPU使用率、内存占用率等关键指标,采集数据按时间戳存储至日志文件,支持后续分析与趋势追踪,方案无需额外依赖,通过简单脚本即可完成配置,有效满足系统资源长期监控需求,及时发现异常波动,保障系统稳定运行。

在Linux系统运维中,CPU和内存是核心性能指标,实时监控其使用情况能帮助管理员及时发现系统瓶颈、异常进程或潜在故障,本文将介绍如何通过Linux内置工具和定时任务,实现每小时自动检查CPU与内存使用率,并将监控结果记录到日志文件,为系统性能优化和故障排查提供数据支持。

监控需求与工具选择

监控目标

  • CPU使用率:包括用户态(%us)、系统态(%sy)、IO等待(%wa)等关键指标,判断CPU是否过载或存在瓶颈。
  • 内存使用率:包括已使用内存(used)、空闲内存(free)、可用内存(available)、缓冲/缓存(buff/cache)等,避免内存不足导致系统卡顿或进程OOM(Out of Memory)。

工具选择

  • 基础命令topfreevmstat(无需安装,系统自带,适合快速获取实时数据)。
  • 专业工具sysstat(包含mpstatsar等命令,可收集历史数据,生成趋势报告)。
  • 定时任务crontab(Linux内置定时工具,用于设置每小时自动执行监控脚本)。

基础方案:crontab+Shell脚本实现每小时监控

监控脚本设计

首先编写一个Shell脚本,通过topfree命令提取CPU与内存使用率,并将结果按时间格式记录到日志文件,脚本示例如下(/usr/local/bin/check_resources.sh):

#!/bin/bash
# 日志路径(建议创建专用目录,权限设为755)
LOG_DIR="/var/log/resource_monitor"
mkdir -p "$LOG_DIR"
LOG_FILE="$LOG_DIR/resource_check_$(date +%Y%m%d).log"
# 时间戳(格式:2023-10-01 12:00:00)
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
# 获取CPU使用率(取用户态+系统态,排除IO等待和空闲)
# top -bn1:批处理模式,只刷新1次;grep "Cpu(s)":过滤CPU行;awk提取百分比并计算
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2+$4}' | cut -d'%' -f1)
# 获取内存使用率(已使用内存占比,排除buff/cache)
# free -m:以MB为单位显示内存;awk提取已使用和总内存,计算百分比
MEMORY_TOTAL=$(free -m | awk '/Mem:/ {print $2}')
MEMORY_USED=$(free -m | awk '/Mem:/ {print $3}')
MEMORY_USAGE=$(awk "BEGIN {printf \"%.2f\", $MEMORY_USED/$MEMORY_TOTAL*100}")
# 获取可用内存(推荐关注,包含可回收的buff/cache)
MEMORY_AVAILABLE=$(free -m | awk '/Mem:/ {print $7}')
MEMORY_AVAILABLE_PERCENT=$(awk "BEGIN {printf \"%.2f\", $MEMORY_AVAILABLE/$MEMORY_TOTAL*100}")
# 写入日志文件(格式:时间戳|CPU使用率|内存使用率|可用内存(MB)|可用内存百分比)
echo "$TIMESTAMP|CPU: ${CPU_USAGE}%|Memory: ${MEMORY_USAGE}%|Available: ${MEMORY_AVAILABLE}MB|Available: ${MEMORY_AVAILABLE_PERCENT}%" >> "$LOG_FILE"
# 日志文件轮转(可选:保留30天日志,避免占用过多磁盘)
find "$LOG_DIR" -name "resource_check_*.log" -mtime +30 -exec rm {} \;

脚本权限与测试

  • 给脚本添加执行权限:
    chmod +x /usr/local/bin/check_resources.sh
  • 手动执行测试,确认日志文件生成:
    /usr/local/bin/check_resources.sh
    cat /var/log/resource_monitor/resource_check_$(date +%Y%m%d).log

    预期输出示例:

    Linux系统下实现每小时CPU与内存自动监控方案

    
    2023-
文章版权声明:除非注明,否则均为xmsdn原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码