Files
basics/system/load_linux.go
spiritlhl 52bb9b9db6 update
2024-05-04 08:17:38 +00:00

57 lines
1.3 KiB
Go

package system
import (
"bufio"
"os"
"runtime"
"strconv"
"strings"
"github.com/shirou/gopsutil/load"
)
// 获取系统负载信息
func getSystemLoad() (float64, float64, float64, error) {
var load1, load5, load15 float64
var err error
if runtime.GOOS == "linux" {
// 尝试从 /proc/loadavg 文件获取负载信息
load1, load5, load15, err = getLoadFromProc()
if err != nil {
load1, load5, load15 = 0, 0, 0
}
}
// 使用 gopsutil 获取负载
avg, err := load.Avg()
if err != nil {
load1, load5, load15 = 0, 0, 0
} else {
if avg.Load1 != 0 && avg.Load5 != 0 && avg.Load15 != 0 {
load1, load5, load15 = avg.Load1, avg.Load5, avg.Load15
}
}
return load1, load5, load15, nil
}
// getLoadFromProc 从 /proc/loadavg 文件中获取负载信息
func getLoadFromProc() (float64, float64, float64, error) {
file, err := os.Open("/proc/loadavg")
if err != nil {
return 0, 0, 0, err
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fields := strings.Fields(scanner.Text())
// 解析负载信息并转换为 float64 类型
load1, _ := strconv.ParseFloat(fields[0], 64)
load5, _ := strconv.ParseFloat(fields[1], 64)
load15, _ := strconv.ParseFloat(fields[2], 64)
return load1, load5, load15, nil
}
if err := scanner.Err(); err != nil {
return 0, 0, 0, err
}
return 0, 0, 0, nil
}