diff --git a/moniter.sh b/moniter.sh index d0a13f9..186b80e 100755 --- a/moniter.sh +++ b/moniter.sh @@ -1,7 +1,84 @@ #!/bin/bash -while true; do + +# 设置颜色变量 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[0;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# 获取CPU核心数 +CPU_CORES=$(nproc) + +# 清屏并显示标题 +header() { clear - echo "CPU 使用率: $(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')%" - echo "内存使用率: $(free -m | awk 'NR==2{printf "%.2f%%\n", $3 * 100/$2 }')" - sleep 1 + echo -e "${BLUE}=============================================${NC}" + echo -e "${BLUE} Ubuntu 系统资源监控 (CPU & 内存) ${NC}" + echo -e "${BLUE}=============================================${NC}" + echo -e "CPU 核心数: ${CPU_CORES} 刷新间隔: 5秒" + echo -e "${BLUE}---------------------------------------------${NC}" +} + +# 获取CPU使用率 +get_cpu_usage() { + # 获取总体CPU使用率 + CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}') + + # 获取每个核心的使用率 + CORE_USAGE=$(mpstat -P ALL 1 1 | awk '/Average:/ && $2 ~ /[0-9]/ {print "Core "$2": "$3"%"}') + + # 获取负载平均值 + LOAD_AVG=$(uptime | awk -F 'load average: ' '{print $2}') +} + +# 获取内存使用情况 +get_mem_usage() { + # 获取内存使用率 + MEM_USAGE=$(free -m | awk 'NR==2{printf "%.2f%%\n", $3 * 100/$2 }') + + # 获取详细内存信息 + MEM_TOTAL=$(free -m | awk 'NR==2{print $2 "MB"}') + MEM_USED=$(free -m | awk 'NR==2{print $3 "MB"}') + MEM_FREE=$(free -m | awk 'NR==2{print $4 "MB"}') + + # 获取交换空间信息 + SWAP_TOTAL=$(free -m | awk 'NR==3{print $2 "MB"}') + SWAP_USED=$(free -m | awk 'NR==3{print $3 "MB"}') +} + +# 显示CPU信息 +show_cpu_info() { + echo -e "${GREEN}CPU 使用率: ${RED}${CPU_USAGE}%${NC}" + echo -e "${GREEN}系统负载: ${YELLOW}${LOAD_AVG}${NC}" + echo -e "${GREEN}各核心使用率:${NC}" + echo -e "${CORE_USAGE}" +} + +# 显示内存信息 +show_mem_info() { + echo -e "${GREEN}内存使用率: ${RED}${MEM_USAGE}${NC}" + echo -e "${GREEN}内存总量: ${YELLOW}${MEM_TOTAL}${NC} ${GREEN}已用: ${RED}${MEM_USED}${NC} ${GREEN}空闲: ${YELLOW}${MEM_FREE}${NC}" + echo -e "${GREEN}交换空间: ${YELLOW}${SWAP_TOTAL}${NC} ${GREEN}已用: ${RED}${SWAP_USED}${NC}" +} + +# 显示进程信息 +show_process_info() { + echo -e "${BLUE}---------------------------------------------${NC}" + echo -e "${GREEN}占用CPU最多的进程:${NC}" + ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 6 + echo -e "${BLUE}---------------------------------------------${NC}" + echo -e "${GREEN}占用内存最多的进程:${NC}" + ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 6 +} + +# 主循环 +while true; do + header + get_cpu_usage + get_mem_usage + show_cpu_info + show_mem_info + show_process_info + sleep 5 done \ No newline at end of file