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) } }
|