系统性能数据gopsutil库
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统性能数据gopsutil库相关的知识,希望对你有一定的参考价值。
系统性能数据gopsutil库
0.介绍
psutil是一个跨平台进程和系统监控的Python库,而gopsutil是其Go语言版本的实现。本文介绍了它的基本使用。
Go语言部署简单、性能好的特点非常适合做一些诸如采集系统信息和监控的服务,本文介绍的gopsutil库是知名Python库:psutil的一个Go语言版本的实现。
gopsutil
将不同的功能划分到不同的子包中:
cpu
:CPU 相关;disk
:磁盘相关;docker
:docker 相关;host
:主机相关;mem
:内存相关;net
:网络相关;process
:进程相关;winservices
:Windows 服务相关。
想要使用对应的功能,要导入对应的子包。例如,上面代码中,我们要获取内存信息,导入的是mem
子包。mem.VirtualMemory()
方法返回内存信息结构mem.VirtualMemoryStat
,该结构有丰富的字段,我们最常使用的无外乎Total
(总内存)、Available
(可用内存)、Used
(已使用内存)和UsedPercent
(内存使用百分比)。mem.VirtualMemoryStat
还实现了fmt.Stringer
接口,以 JSON 格式返回内存信息。语句fmt.Println(v)
会自动调用v.String()
,将返回信息输出。程序输出:
1.安装
go get github.com/shirou/gopsutil
2.简单使用
查看内存相关信息。
package main
import (
"fmt"
"github.com/shirou/gopsutil/v3/mem"
// "github.com/shirou/gopsutil/mem" // to use v2
)
func main()
v, _ := mem.VirtualMemory()
// almost every return value is a struct
fmt.Printf("Used:%v,Available:%v,Total: %v, Free:%v, UsedPercent:%f%%\\n", v.Used, v.Available, v.Total, v.Free, v.UsedPercent)
// convert to JSON. String() is also implemented
fmt.Println(v)
结果
Used:11107000320,Available:4869570560,Total: 15976570880, Free:4869570560, UsedPercent:69.000000%
"total":15976570880,"available":4869570560,"used":11107000320,"usedPercent":69,"free":4869570560,"active":0,"inactive":0,"wired":0,"laundry":0,"buffers":0,"cached":0,"writeBack":0,"dirty":0,"writeBackTmp":0,"shared":0,"slab":0,"sreclaimable":0,"sunreclaim":0,"pageTables":0,"swapCached":0,"commitLimit":0,"committedAS":0,"highTotal":0,"highFree":0,"lowTotal":0,"lowFree":0,"swapTotal":0,"swapFree":0,"mapped":0,"vmallocTotal":0,"vmallocUsed":0,"vmallocChunk":0,"hugePagesTotal":0,"hugePagesFree":0,"hugePageSize":0
这里UsedPercent= Used Total = ( 1 − Free Total ) × 100 % \\dfrac\\textUsed\\textTotal=(1-\\dfrac\\textFree\\textTotal)\\times100\\% TotalUsed=(1−TotalFree)×100%
单位为字节,我的电脑内存 8GB,当前使用百分比为 55%,可用内存 3768975360B(即 3.51GB)。
CPUT使用率
我们知道 CPU 的核数有两种,一种是物理核数,一种是逻辑核数。物理核数就是主板上实际有多少个 CPU,一个物理 CPU 上可以有多个核心,这些核心被称为逻辑核。gopsutil
中 CPU 相关功能在cpu
子包中,cpu
子包提供了获取物理和逻辑核数、CPU 使用率的接口:
Counts(logical bool)
:传入false
,返回物理核数,传入true
,返回逻辑核数;Percent(interval time.Duration, percpu bool)
:表示获取interval
时间间隔内的 CPU 使用率,percpu
为false
时,获取总的 CPU 使用率,percpu
为true
时,分别获取每个 CPU 的使用率,返回一个[]float64
类型的值。
func main()
physicalCnt, _ := cpu.Counts(false)
logicalCnt, _ := cpu.Counts(true)
fmt.Printf("physical count:%d logical count:%d\\n", physicalCnt, logicalCnt)
totalPercent, _ := cpu.Percent(3*time.Second, false)
perPercents, _ := cpu.Percent(3*time.Second, true)
fmt.Printf("total percent:%v per percents:%v", totalPercent, perPercents)
上面代码获取物理核数和逻辑核数,并获取 3s 内的总 CPU 使用率和每个 CPU 各自的使用率,程序输出(注意每次运行输出可能都不相同):
physical count:4 logical count:8
total percent:[30.729166666666668] per percents:[32.64248704663213 26.94300518134715 44.559585492227974 23.95833333333
package main
import (
"fmt"
"github.com/shirou/gopsutil/v3/cpu"
"time"
// "github.com/shirou/gopsutil/mem" // to use v2
)
// cpu info
func getCpuInfo()
cpuInfos, err := cpu.Info()
if err != nil
fmt.Printf("get cpu info failed, err:%v", err)
for _, ci := range cpuInfos
fmt.Println(ci)
// CPU使用率
for
percent, _ := cpu.Percent(time.Second, false)
fmt.Printf("cpu percent:%v\\n", percent)
func main()
getCpuInfo()
3.参考文章
以上是关于系统性能数据gopsutil库的主要内容,如果未能解决你的问题,请参考以下文章
Go使用gopsutil 和 go-echarts 生成系统状态图表