本文目录导读:

检测系统负载平均值(Load Average)的方法取决于你使用的编程语言和操作系统,以下是几种常见的实现方案:
Shell 脚本(Linux/Unix)
#!/bin/bash
# 方法1:使用 uptime 命令
load=$(uptime | awk -F 'load average:' '{print $2}')
echo "Load Average: $load"
# 方法2:直接从 /proc/loadavg 读取
load=$(cat /proc/loadavg | awk '{print $1, $2, $3}')
echo "1分钟: $(echo $load | awk '{print $1}')"
echo "5分钟: $(echo $load | awk '{print $2}')"
echo "15分钟: $(echo $load | awk '{print $3}')"
# 方法3:检查是否超过阈值(CPU 核心数)
cores=$(nproc)
current_load=$(cat /proc/loadavg | awk '{print $1}')
if (( $(echo "$current_load > $cores * 0.8" | bc -l) )); then
echo "警告:系统负载过高!"
fi
Python 脚本
import os
# Linux/Unix
def get_load_avg():
try:
with open('/proc/loadavg', 'r') as f:
load = f.read().split()[:3]
return {
'1min': float(load[0]),
'5min': float(load[1]),
'15min': float(load[2])
}
except FileNotFoundError:
return None
# 跨平台方案(使用 psutil)
import psutil
def get_cross_platform_load():
load = psutil.getloadavg()
return {
'1min': load[0],
'5min': load[1],
'15min': load[2]
}
# 使用示例
load = get_cross_platform_load()
print(f"Load Average: {load['1min']:.2f} / {load['5min']:.2f} / {load['15min']:.2f}")
# 检查是否需要告警
cpu_count = os.cpu_count()
if load['1min'] > cpu_count * 0.9:
print(f"⚠️ 系统负载过高!1分钟平均: {load['1min']:.2f} (CPU核心数: {cpu_count})")
Go 语言
package main
import (
"fmt"
"io/ioutil"
"strings"
"strconv"
"runtime"
)
func getLoadAverages() (float64, float64, float64, error) {
data, err := ioutil.ReadFile("/proc/loadavg")
if err != nil {
return 0, 0, 0, err
}
fields := strings.Fields(string(data))
load1, _ := strconv.ParseFloat(fields[0], 64)
load5, _ := strconv.ParseFloat(fields[1], 64)
load15, _ := strconv.ParseFloat(fields[2], 64)
return load1, load5, load15, nil
}
func main() {
load1, load5, load15, err := getLoadAverages()
if err != nil {
fmt.Printf("读取负载失败: %v\n", err)
return
}
fmt.Printf("Load Average: %.2f / %.2f / %.2f\n", load1, load5, load15)
cpuCores := runtime.NumCPU()
fmt.Printf("CPU核心数: %d\n", cpuCores)
if load1 > float64(cpuCores) * 0.9 {
fmt.Println("⚠️ 系统负载过高!")
}
}
Node.js
const os = require('os');
const fs = require('fs');
// 方法1:使用 os 模块
function getLoadFromOS() {
const load = os.loadavg();
return {
'1min': load[0],
'5min': load[1],
'15min': load[2]
};
}
// 方法2:从 /proc/loadavg 读取(Linux)
function getLoadFromProc() {
try {
const data = fs.readFileSync('/proc/loadavg', 'utf8');
const parts = data.split(' ').slice(0, 3).map(Number);
return {
'1min': parts[0],
'5min': parts[1],
'15min': parts[2]
};
} catch (err) {
return null;
}
}
// 使用示例
const load = getLoadFromOS();
console.log(`Load Average: ${load['1min'].toFixed(2)} / ${load['5min'].toFixed(2)} / ${load['15min'].toFixed(2)}`);
const cpus = os.cpus().length;
if (load['1min'] > cpus * 0.8) {
console.log(`⚠️ 警告:系统负载超过阈值!(${load['1min'].toFixed(2)} > ${cpus * 0.8})`);
}
负载阈值建议
- 正常范围:负载平均值 < CPU核心数 * 0.7
- 警告范围:CPU核心数 0.7 < 负载 < CPU核心数 1.0
- 危险范围:负载 > CPU核心数 * 1.0
注意事项
- Windows 系统:直接读取
/proc/loadavg不可用,需要使用wmic或性能计数器 - 权限问题:读取
/proc/loadavg通常不需要 root 权限 - 监控集成:可以结合告警系统(如 Prometheus、Zabbix)进行自动化监控
选择一个适合你开发环境的方案即可,如果需要在多平台运行,推荐使用带有跨平台支持的库(如 Python 的 psutil)。