#!/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
版权属于:
mrui
评论 (0)