标签搜索

实用系统监控脚本

mrui
2025-09-11 / 0 评论 / 3 阅读 / 正在检测是否收录...
#!/bin/bash
# 系统资源监控脚本

THRESHOLD_CPU=80
THRESHOLD_MEM=85
THRESHOLD_DISK=90

check_system() {
    echo "=== 系统监控报告 $(date) ==="
    
    # CPU检查
    local cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | sed 's/%us,//')
    echo "CPU使用率: ${cpu_usage}%"
    
    if (( $(echo "$cpu_usage > $THRESHOLD_CPU" | bc -l) )); then
        echo "CPU使用率超过阈值 ($THRESHOLD_CPU%)"
        echo "TOP 5 CPU消耗进程:"
        ps aux | awk 'NR>1 {print $11, $3, $2}' | sort -k2 -nr | head -5 | \
        awk '{printf "%-20s CPU: %6.2f%% PID: %s\n", $1, $2, $3}'
    fi
    
    # 内存检查
    local mem_info=$(free | awk 'NR==2{printf "%.2f %.2f %.2f", $3*100/$2, $3, $2}')
    local mem_usage=$(echo $mem_info | awk '{print $1}')
    local mem_used=$(echo $mem_info | awk '{print $2}')
    local mem_total=$(echo $mem_info | awk '{print $3}')
    
    echo "内存使用率: ${mem_usage}% ($(echo "scale=1; $mem_used/1024/1024" | bc)G/$(echo "scale=1; $mem_total/1024/1024" | bc)G)"
    
    if (( $(echo "$mem_usage > $THRESHOLD_MEM" | bc -l) )); then
        echo "内存使用率超过阈值 ($THRESHOLD_MEM%)"
        echo "TOP 5 内存消耗进程:"
        ps aux | awk 'NR>1 {print $11, $4, $2}' | sort -k2 -nr | head -5 | \
        awk '{printf "%-20s MEM: %6.2f%% PID: %s\n", $1, $2, $3}'
    fi
    
    # 磁盘检查
    echo "磁盘使用情况:"
    df -h | awk 'NR>1 && $1 !~ /tmpfs|devtmpfs/ {
        usage = $5
        gsub(/%/, "", usage)
        printf "%-20s %8s/%8s (%s)\n", $1, $3, $2, $5
        if (usage > '$THRESHOLD_DISK') {
            printf " %s 使用率超过阈值 ('$THRESHOLD_DISK'%%)\n", $1
        }
    }'
    
    # 网络连接检查
    local tcp_connections=$(ss -t | wc -l)
    local established=$(ss -t state established | wc -l)
    echo "网络连接: TCP总数 $tcp_connections, 已建立 $established"
    
    # 负载检查
    local load_avg=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | sed 's/,//')
    echo "系统负载: $load_avg"
    
    # 检查是否有僵尸进程
    local zombie_count=$(ps aux | awk '$8 ~ /^Z/ {count++} END {print count+0}')
    if [ $zombie_count -gt 0 ]; then
        echo "发现 $zombie_count 个僵尸进程"
    fi
}

check_system
0

评论 (0)

取消