自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

還在自己寫(xiě) Go 系統(tǒng)監(jiān)控函數(shù)嗎?

開(kāi)發(fā) 前端
gopsutil 庫(kù)有非常全面的覆蓋單元,包括主機(jī)、磁盤(pán)、內(nèi)存、CPU、網(wǎng)絡(luò)、進(jìn)程、docker等模塊,它能很好地幫助我們獲取系統(tǒng)信息。

如果有個(gè) Go 開(kāi)發(fā)需求:獲取主機(jī)的硬盤(pán)、CPU、內(nèi)存、進(jìn)程等使用情況,你會(huì)怎么做?比較樸素的想法是通過(guò) os/exec 去執(zhí)行某些例如 ps、cd、top 命令,之后解析它們的執(zhí)行結(jié)果。當(dāng)然,基于 Linux 的一切皆文件思想,更直接地做法是去讀取相關(guān)文件內(nèi)容,例如 /proc 目錄下的文件。

上面的方式能夠完成需求,但是我們大不必重復(fù)造輪子,因?yàn)橐呀?jīng)有相當(dāng)完善的三方庫(kù)為我們實(shí)現(xiàn)了這些采集需求,它就是 gopsutil。

gopsutil 簡(jiǎn)介

psutil (process and system utilities,)是一個(gè)跨平臺(tái)庫(kù),用于在 Python 中獲取進(jìn)程和系統(tǒng)利用率(CPU、內(nèi)存、磁盤(pán)、網(wǎng)絡(luò)、傳感器)的信息,而 gopsutil 是它的 Go 語(yǔ)言版本。

gopsutil 為我們屏蔽了各系統(tǒng)差異,具有很好的移植性。

已支持列表

  • FreeBSD i386/amd64/arm
  • Linux i386/amd64/arm(raspberry pi)
  • Windows i386/amd64/arm/arm64
  • Darwin i386/amd64
  • OpenBSD amd64
  • Solaris amd64

部分支持列表

  • CPU on DragonFly BSD
  • host on Linux RISC-V

另外,該項(xiàng)目通過(guò)將 C 結(jié)構(gòu)移植到 Go 結(jié)構(gòu),它的實(shí)現(xiàn)中沒(méi)有 cgo 的代碼,這樣就更有利于交叉編譯了。

使用

gopsutil 現(xiàn)有 v3 和 v2 版本,且沒(méi)有向后兼容性保證,因此有兩種使用方式

import (
// "github.com/shirou/gopsutil/v3/mem" // to use v3
"github.com/shirou/gopsutil/mem"
)

例如我們想查看系統(tǒng)內(nèi)存使用信息,可以通過(guò)以下方式獲取

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("Total: %v, Free:%v, UsedPercent:%f%%\n", v.Total, v.Free, v.UsedPercent)

// convert to JSON. String() is also implemented
fmt.Println(v)
}

其結(jié)果為

Total: 8589934592, Free:138248192, UsedPercent:76.416254%
{"total":8589934592,"available":2025828352,"used":6564106240,"usedPercent":76.4162540435791,"free":138248192,"active":1949327360,"inactive":1887580160,"wired":2214510592,"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}

gopsutil 包有一點(diǎn)比較友好的是,絕大多數(shù)的采集函數(shù)返回的都是一個(gè)結(jié)構(gòu)體對(duì)象,它們都實(shí)現(xiàn)了 fmt.Stringer 接口,因此在打印時(shí)它們將會(huì)以 json 格式進(jìn)行輸出。

例如,上例中 mem.VirtualMemory 返回的是 VirtualMemoryStat 結(jié)構(gòu)體,它在 String() 方法中調(diào)用了 json.Marshal() 函數(shù)。

type VirtualMemoryStat struct {
Total uint64 `json:"total"`
Available uint64 `json:"available"`
Used uint64 `json:"used"`
UsedPercent float64 `json:"usedPercent"`
Free uint64 `json:"free"`
Active uint64 `json:"active"`
Inactive uint64 `json:"inactive"`
Wired uint64 `json:"wired"`

func (m VirtualMemoryStat) String() string {
s, _ := json.Marshal(m)
return string(s)
}

gopsutil 通過(guò)不同采集單元?jiǎng)澐譃椴煌淖影?,在使用中通過(guò)引入不同的子包,即可調(diào)用相關(guān)的方法。

import (
"github.com/shirou/gopsutil/v3/mem"
"github.com/shirou/gopsutil/v3/cpu"
"github.com/shirou/gopsutil/v3/disk"
"github.com/shirou/gopsutil/v3/docker"
"github.com/shirou/gopsutil/v3/host"
"github.com/shirou/gopsutil/v3/internal"
"github.com/shirou/gopsutil/v3/load"
"github.com/shirou/gopsutil/v3/mem"
"github.com/shirou/gopsutil/v3/net"
"github.com/shirou/gopsutil/v3/process"
"github.com/shirou/gopsutil/v3/winservices"
)

例如我們想要獲取主機(jī)信息,就需要引入 github.com/shirou/gopsutil/v3/host 子包

import (
"fmt"
"github.com/shirou/gopsutil/v3/host"
)

func main() {
hostInfo, _ := host.Info()
fmt.Println(hostInfo)
}

輸出

{"hostname":"MacBook-Pro.local","uptime":1619284,"bootTime":1644332729,"procs":301,"os":"darwin","platform":"darwin","platformFamily":"Standalone Workstation","platformVersion":"10.15.5","kernelVersion":"19.5.0","kernelArch":"x86_64","virtualizationSystem":"","virtualizationRole":"","hostId":"7a1a74f2-30fc-4cc1-b439-6b7aef22e45d"}

總結(jié)gopsutil 庫(kù)有非常全面的覆蓋單元,包括主機(jī)、磁盤(pán)、內(nèi)存、CPU、網(wǎng)絡(luò)、進(jìn)程、docker等模塊,它能很好地幫助我們獲取系統(tǒng)信息。并且 gopsutil 處理了跨平臺(tái)兼容性問(wèn)題,對(duì)外接口基本保持一致,使用起來(lái)比較友好。

在信息采集、系統(tǒng)監(jiān)控、資源限制、進(jìn)程管理等場(chǎng)景下,該庫(kù)將助你一臂之力。

責(zé)任編輯:武曉燕 來(lái)源: Golang技術(shù)分享
相關(guān)推薦

2021-11-22 23:42:02

Go監(jiān)控程序

2022-11-28 07:32:46

迭代器remove數(shù)據(jù)庫(kù)

2020-08-06 09:03:44

Go語(yǔ)言獲取文件代碼

2023-03-28 07:46:46

go語(yǔ)言kubernetes

2020-12-18 05:55:52

Activiti7流程

2022-09-04 23:24:45

Go語(yǔ)言監(jiān)控

2017-03-02 13:31:02

監(jiān)控系統(tǒng)

2023-07-11 08:46:38

閉包函數(shù)Rust

2021-12-27 08:53:23

Go函數(shù) Nil

2022-06-24 08:20:56

requests爬蟲(chóng)Python

2012-07-11 11:05:16

編程

2012-07-19 10:03:32

2022-02-24 07:03:13

JavaScrip語(yǔ)言

2023-11-06 01:39:02

Go語(yǔ)言開(kāi)發(fā)

2021-10-15 10:26:56

代碼項(xiàng)目Mapper

2020-12-07 08:43:55

代碼軟件開(kāi)發(fā)

2018-05-05 14:18:22

蘋(píng)果MacWindows

2010-11-23 10:53:40

騎驢找馬

2021-11-02 16:44:40

部署DevtoolsJRebel
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)