Phone: Email: cy23@vip.qq.com

Linux服务器查询cpu内存峰值平均值

2025-07-23 08:23:54 91

echo "====== 每日平均资源使用率 ======"
find /var/log/sa/sa[0-9]* -mtime -90 | sort | while read FILE; do
  DATE=$(stat -c %y "$FILE" | cut -d' ' -f1)
  
  # CPU
  CPU_AVG=$(sar -u -f "$FILE" 2>/dev/null | awk '
    {sum+=100-$NF; count++} 
    END {printf "%.1f", sum/count}
  ')
  
  # 内存
  MEM_AVG=$(sar -r -f "$FILE" 2>/dev/null | awk '
    /kbmemused/ {for(i=1;i<=NF;i++) if($i=="%memused") col=i}
    /^[0-9]/ && $col~/^[0-9]/ {sum+=$col; count++}
    END {printf "%.1f", sum/count}
  ')
  
  echo "$DATE | CPU平均: ${CPU_AVG}% | 内存平均: ${MEM_AVG}%"
done


 

echo "====== 90天内真实CPU/内存峰值 ======"
find /var/log/sa/sa[0-9]* -mtime -90 -exec sh -c '
    FILE="$1"
    DATE=$(date -d @$(stat -c %Y "$FILE") +%F)
    
    # CPU峰值(严格校验数据)
    CPU=$(sar -u -f "$FILE" 2>/dev/null | awk '\''
        BEGIN {max=0}
        /^[0-9]/ && $8 ~ /^[0-9]/ {  # 第8列为%idle(根据实际调整)
            usage = 100 - $8
            if (usage > max && usage <= 100) {
                max = usage
                time = $1
            }
        }
        END {if (max > 0) printf "%s %.1f%%", time, max}
    '\'')
    
    # 内存峰值
    MEM=$(sar -r -f "$FILE" 2>/dev/null | awk '\''
        BEGIN {max=0}
        /kbmemused/ {for(i=1;i<=NF;i++) if($i=="%memused") col=i}
        /^[0-9]/ && $col ~ /^[0-9]/ {
            if ($col > max && $col <= 100) {
                max = $col
                time = $1
            }
        }
        END {if (max > 0) printf "%s %.1f%%", time, max}
    '\'')
    
    # 只输出有数据的行
    if [ -n "$CPU" ] || [ -n "$MEM" ]; then
        echo "$DATE | CPU峰值: ${CPU:-无数据} | 内存峰值: ${MEM:-无数据}"
    fi
' sh {} \; | sort -t'|' -k3 -rn

 

 

 

echo "====== 历史资源总平均使用率 ======"

# CPU
find /var/log/sa/sa[0-9]* -exec sar -u -f {} \; 2>/dev/null | 
  awk '{sum+=100-$NF; count++} END {printf "CPU: %.1f%%\n", sum/count}'

# 内存
find /var/log/sa/sa[0-9]* -exec sar -r -f {} \; 2>/dev/null | 
  awk '
    /kbmemused/ {for(i=1;i<=NF;i++) if($i=="%memused") col=i}
    /^[0-9]/ && $col~/^[0-9]/ {sum+=$col; count++}
    END {printf "内存: %.1f%%\n", sum/count}
  '

# Swap
find /var/log/sa/sa[0-9]* -exec sar -S -f {} \; 2>/dev/null | 
  awk '
    /kbswpused/ {for(i=1;i<=NF;i++) if($i=="%swpused") col=i}
    /^[0-9]/ && $col~/^[0-9]/ {sum+=$col; count++}
    END {printf "Swap: %.1f%%\n", sum/count}
  '

Copyright © SIYUCMS 2019.All right reserved.Powered by SIYUCMS
备案号:辽ICP备18004531号-1

选择样式

选择布局
选择颜色
选择背景
选择背景