inodesusedpercent_Go 每日一库之 gopsutil:获取各种系统和硬件信息

gopsutil是Python库psutil的Golang版本,提供跨平台的系统和硬件信息获取功能,无需使用cgo。通过它,可以方便地获取内存、CPU、磁盘、网络等信息,简化了不同系统间代码的差异处理。例如,使用gopsutil可以获取内存使用百分比、CPU核数和使用率、磁盘使用情况等。此外,库还包含了针对Windows服务的相关操作。
摘要由CSDN通过智能技术生成

简介

gopsutil是 Python 工具库psutil 的 Golang 移植版,可以帮助我们方便地获取各种系统和硬件信息。gopsutil为我们屏蔽了各个系统之间的差异,具有非常强悍的可移植性。有了gopsutil,我们不再需要针对不同的系统使用syscall调用对应的系统方法。更棒的是gopsutil的实现中没有任何cgo的代码,使得交叉编译成为可能。

快速使用

先安装:

$ go get github.com/shirou/gopsutil

由于gopsutil库用到了golang.org/x/sys,后者在墙外,如果有类似下面的报错:

cannot find package "golang.org/x/sys/windows"

可使用下面的命令下载golang.org/x/sys在 GitHub 上的镜像:

$ git clone git@github.com:golang/sys.git $GOPATH/src/golang.org/x/sys

使用:

package main

import (

"fmt"

"github.com/shirou/gopsutil/mem"

)

func main() {

v, _ := mem.VirtualMemory()

fmt.Printf("Total: %v, Available: %v, UsedPercent:%f%%\n", v.Total, v.Available, v.UsedPercent)

fmt.Println(v)

}

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(),将返回信息输出。程序输出:

Total: 8526921728, Available: 3768975360, UsedPercent:55.000000%

{"total":8526921728,"available":3768975360,"used":4757946368,"usedPercent":55,"free":0,"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}

单位为字节,我的电脑内存 8GB,当前使用百分比为 55%,可用内存 3768975360B(即 3.51GB)。

CPU

我们知道 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.6424

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值