您的位置 首页 shell案例

内存监控脚本

写一个脚本呢文件 :内存使用率达到98% 后重启 docker 服务

monitor_docker_memory.sh

#!/bin/bash

# 配置项
THRESHOLD=98          # 内存使用率阈值 (%)
LOG_FILE="/var/log/docker_memory_monitor.log"
DOCKER_SERVICE="docker"

# 获取内存信息 (单位: kB)
get_memory_usage() {
    local mem_total=$(grep '^MemTotal:' /proc/meminfo | awk '{print $2}')
    local mem_available=$(grep '^MemAvailable:' /proc/meminfo | awk '{print $2}')
    
    # 如果系统内核较老没有 MemAvailable,则用 Free + Buffers + Cached 估算
    if [ -z "$mem_available" ]; then
        local mem_free=$(grep '^MemFree:' /proc/meminfo | awk '{print $2}')
        local buffers=$(grep '^Buffers:' /proc/meminfo | awk '{print $2}')
        local cached=$(grep '^Cached:' /proc/meminfo | awk '{print $2}')
        mem_available=$((mem_free + buffers + cached))
    fi

    local mem_used=$((mem_total - mem_available))
    local usage_percent=$((mem_used * 100 / mem_total))
    
    echo $usage_percent
}

# 主逻辑
current_usage=$(get_memory_usage)
timestamp=$(date '+%Y-%m-%d %H:%M:%S')

echo "[$timestamp] 当前内存使用率:${current_usage}%" >> $LOG_FILE

if [ "$current_usage" -ge "$THRESHOLD" ]; then
    echo "[$timestamp] 警告:内存使用率 (${current_usage}%) 超过阈值 (${THRESHOLD}%),正在重启 Docker 服务..." >> $LOG_FILE
    
    # 尝试释放页缓存以争取重启所需的少量内存 (可选优化)
    sync; echo 3 > /proc/sys/vm/drop_caches 2>/dev/null
    
    # 重启 Docker 服务
    if systemctl restart $DOCKER_SERVICE; then
        echo "[$timestamp] 成功:Docker 服务已重启。" >> $LOG_FILE
    else
        echo "[$timestamp] 错误:Docker 服务重启失败,请手动检查。" >> $LOG_FILE
    fi
fi

 

创建日志文件并授权

    touch /var/log/docker_memory_monitor.log
    chmod 644 /var/log/docker_memory_monitor.log
    

 

vi /etc/crontab

* * * * * root sh /mnt/data/zzy/scripts/monitor_docker_memory.sh

 

欢迎来撩 : 汇总all

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章