0%

gopsutil 获取系统信息

gopsutil 获取系统信息

1 简介

gopsutil 是 python 工具库 psutil 的 golang 移植版,可以方便地获取各种系统和硬件信息。gopsutil屏蔽了各个系统之间的差异,具有很好的移植性。

2 安装

1
go get github.com/shirou/gopsutil

3 获取系统和硬件信息

3.1 CPU

3.1.1 CPU 硬件信息

1
2
3
4
5
6
7
8
cpuInfos, err := cpu.Info()
if err != nil {
logrus.Errorf("get cpu info error: %w", err)
return
}
for _, info := range cpuInfos {
fmt.Println(info)
}

3.1.2 CPU 实时使用率

1
2
3
4
for {
precent, _ := cpu.Percent(time.Second, true)
fmt.Printf("cpu precent:%v\n", precent)
}
  • 上面的代码每秒获取一次各 CPU 核心的实时使用率

3.1.3 CPU 负载

1
2
3
4
func getCPULoad() {
info, _ := load.Avg()
fmt.Printf("%v\n", info)
}

程序输出,

1
{"load1":0.11,"load5":0.13,"load15":0.09}
  • load1、load5、load15 分别表示1分钟、5分钟、15分钟内系统的平均负荷
  • 当系统负荷持续大于0.7,你必须开始调查了,问题出在哪里,防止情况恶化
  • 当系统负荷持续大于1.0,你必须动手寻找解决办法,把这个值降下来
  • 当系统负荷达到5.0,就表明你的系统有很严重的问题,长时间没有响应,或者接近死机了
  • 以上指标都是基于单CPU的,但是现在很多电脑都是多核的。所以,对一般的系统来说,是根据cpu 数量去判断系统是否已经过载(Over Load)的。如果我们认为 0.7 算是单核机器负载的安全线的话,那么四核机器的负载最好保持在 3(4*0.7 = 2.8) 以下

3.2 内存

1
2
3
4
func getMemInfo() {
memInfo, _ := mem.VirtualMemory()
fmt.Printf("mem info: %v\n", memInfo)
}

3.3 主机

1
2
3
4
func getHostInfo() {
hInfo, _ := host.Info()
fmt.Printf("host info:%v uptime:%v boottime:%v\n", hInfo, hInfo.Uptime, hInfo.BootTime)
}

3.4 磁盘

3.4.1 分区信息

1
2
3
4
5
6
7
8
9
10
parts, err := disk.Partitions(true)
if err != nil {
fmt.Printf("get Partitions failed, err:%v\n", err)
return
}
for _, part := range parts {
fmt.Printf("part:%v\n", part.String())
diskInfo, _ := disk.Usage(part.Mountpoint)
fmt.Printf("disk info:used:%v free:%v\n", diskInfo.UsedPercent, diskInfo.Free)
}

3.4.2 磁盘IO

1
2
3
4
ioStat, _ := disk.IOCounters()
for k, v := range ioStat {
fmt.Printf("%v:%v\n", k, v)
}

3.5 网络 IO

1
2
3
4
5
6
func getNetInfo() {
info, _ := net.IOCounters(true)
for index, v := range info {
fmt.Printf("%v:%v send:%v recv:%v\n", index, v, v.BytesSent, v.BytesRecv)
}
}