本文目录导读:

我来介绍几种获取系统负载的脚本方法,涵盖不同操作系统和场景:
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
使用建议
-
选择适合的方法:
- 简单查询:使用
uptime或cat /proc/loadavg - 详细监控:使用 Python 或完整 bash 脚本
- 实时监控:使用循环刷新脚本
- 简单查询:使用
-
性能考虑:
- 生产环境避免频繁调用(建议最小间隔1秒)
- 对于监控系统,考虑使用成熟工具如
nagios、zabbix
-
权限要求:
- 大多数命令不需要root权限
- 访问
/proc/loadavg需要一定权限
-
跨平台:
如果需要跨平台,推荐使用 Python + psutil
选择最适合你需求的方法即可,如果还有其他特定场景需求,欢迎告诉我!