怎么用脚本获取系统负载

wen 实用脚本 2

本文目录导读:

怎么用脚本获取系统负载

  1. Linux 系统负载获取
  2. Python 脚本(跨平台)
  3. 高级实时监控脚本
  4. Windows 批处理脚本
  5. 使用系统内置命令
  6. 监控并记录到日志
  7. 使用建议

我来介绍几种获取系统负载的脚本方法,涵盖不同操作系统和场景:

Linux 系统负载获取

Bash 脚本基础版

#!/bin/bash
# 获取系统负载信息
echo "=== 系统负载信息 ==="
echo "1. 当前负载:"
uptime
echo ""
echo "2. 详细负载(1/5/15分钟):"
cat /proc/loadavg

更完整的 Bash 脚本

#!/bin/bash
# 完整的系统负载监控脚本
# 获取负载
load=$(uptime | awk -F'load average:' '{print $2}')
load1=$(echo $load | cut -d, -f1)
load5=$(echo $load | cut -d, -f2)
load15=$(echo $load | cut -d, -f3)
# 获取 CPU 核数
cores=$(nproc)
echo "系统负载:"
echo "1分钟 负载: $load1"
echo "5分钟 负载: $load5"
echo "15分钟负载: $load15"
echo "CPU核心数: $cores"
# 计算相对负载
load_percent=$(echo "scale=2; $load1 / $cores * 100" | bc)
echo "CPU使用率: $load_percent%"
# 判断负载状态
if (( $(echo "$load_percent > 75" | bc -l) )); then
    echo "⚠️  警告:系统负载过高!"
elif (( $(echo "$load_percent > 50" | bc -l) )); then
    echo "ℹ️  提示:系统负载中等"
else
    echo "✅ 系统负载正常"
fi

Python 脚本(跨平台)

#!/usr/bin/env python3
# 获取系统负载信息
import os
import platform
import psutil
def get_linux_load():
    """Linux系统负载"""
    try:
        with open('/proc/loadavg', 'r') as f:
            load = f.read().split()
        return {
            '1min': float(load[0]),
            '5min': float(load[1]),
            '15min': float(load[2])
        }
    except:
        return None
def get_windows_load():
    """Windows系统负载"""
    return {
        'cpu_percent': psutil.cpu_percent(interval=1),
        'memory_percent': psutil.virtual_memory().percent
    }
def main():
    system = platform.system()
    print(f"操作系统: {system}")
    if system == "Linux":
        load = get_linux_load()
        if load:
            print(f"负载 1分钟: {load['1min']:.2f}")
            print(f"负载 5分钟: {load['5min']:.2f}")
            print(f"负载 15分钟: {load['15min']:.2f}")
            # 获取CPU核心数
            cores = os.cpu_count()
            print(f"CPU核心数: {cores}")
            # 计算CPU使用率
            cpu_percent = load['1min'] / cores * 100
            print(f"CPU使用率: {cpu_percent:.1f}%")
    elif system == "Windows":
        load = get_windows_load()
        print(f"CPU使用率: {load['cpu_percent']}%")
        print(f"内存使用率: {load['memory_percent']}%")
if __name__ == "__main__":
    main()

高级实时监控脚本

#!/bin/bash
# 实时监控系统负载
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
show_load() {
    clear
    echo "=== 系统负载实时监控 ==="
    date '+%Y-%m-%d %H:%M:%S'
    echo "-------------------------"
    # 获取负载值
    read load1 load5 load15 < /proc/loadavg
    # 获取CPU核心数
    cores=$(nproc)
    # 显示负载
    printf "1分钟负载: %.2f\n" $load1
    printf "5分钟负载: %.2f\n" $load5
    printf "15分钟负载: %.2f\n" $load15
    # 计算使用率
    usage=$(echo "scale=2; $load1 / $cores * 100" | bc)
    printf "CPU使用率: %.1f%%\n" $usage
    # 显示颜色状态
    if (( $(echo "$usage > 75" | bc -l) )); then
        echo -e "${RED}状态: 高负载${NC}"
    elif (( $(echo "$usage > 50" | bc -l) )); then
        echo -e "${YELLOW}状态: 中等负载${NC}"
    else
        echo -e "${GREEN}状态: 正常${NC}"
    fi
    echo "-------------------------"
    echo "按 Ctrl+C 退出"
}
# 每2秒刷新
while true; do
    show_load
    sleep 2
done

Windows 批处理脚本

@echo off
:: Windows 系统负载获取
echo === Windows 系统负载 ===
:: 获取CPU使用率
wmic cpu get loadpercentage /value
:: 获取内存使用
wmic OS get FreePhysicalMemory,TotalVisibleMemorySize /value
:: 获取系统运行时间
net stats srv | find "Statistics since"
pause

使用系统内置命令

Linux/macOS

# 简单一行命令
uptime                    # 最常用
top -bn1 | head -20      # top命令
cat /proc/loadavg         # 读取负载文件
mpstat 1 5               # CPU统计
# macOS 使用
sysctl -n vm.loadavg     # macOS获取负载

使用 w 命令

#!/bin/bash
w | head -1 | awk '{print "当前负载:" $9, $10, $11}'

监控并记录到日志

#!/bin/bash
# 定时记录系统负载到日志文件
LOG_FILE="/var/log/system_load.log"
log_load() {
    timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    load=$(uptime | awk -F'load average:' '{print $2}')
    echo "$timestamp - Load: $load" >> $LOG_FILE
}
# 创建定时任务
while true; do
    log_load
    sleep 300  # 每5分钟记录一次
done

使用建议

  1. 选择适合的方法

    • 简单查询:使用 uptimecat /proc/loadavg
    • 详细监控:使用 Python 或完整 bash 脚本
    • 实时监控:使用循环刷新脚本
  2. 性能考虑

    • 生产环境避免频繁调用(建议最小间隔1秒)
    • 对于监控系统,考虑使用成熟工具如 nagioszabbix
  3. 权限要求

    • 大多数命令不需要root权限
    • 访问 /proc/loadavg 需要一定权限
  4. 跨平台

    如果需要跨平台,推荐使用 Python + psutil

选择最适合你需求的方法即可,如果还有其他特定场景需求,欢迎告诉我!

抱歉,评论功能暂时关闭!