0
点赞
收藏
分享

微信扫一扫

go读取Linux下cpu占用率、cpu温度、内存占用率及磁盘占用率


go读取Linux下cpu占用率、cpu温度、内存占用率及磁盘占用率

文章目录

  • ​​go读取Linux下cpu占用率、cpu温度、内存占用率及磁盘占用率​​
  • ​​1. 前言​​
  • ​​2. 代码​​
  • ​​3. 测试结果​​
  • ​​4. 编译​​

1. 前言

后续会利用相关界面库来开发一个跨平台的小工具,这里的内容是该小工具的一部分,但是也挺常用的。

2. 代码

package main

import (
"bytes"
"fmt"
"os/exec"
"strconv"
"strings"
"time"

"github.com/shirou/gopsutil/cpu"
"github.com/shirou/gopsutil/disk"
"github.com/shirou/gopsutil/mem"

"github.com/wonderivan/logger"
)

//获取CPU使用率
func GetCpuPercent() (float64, error) {
percent, err := cpu.Percent(time.Second, false)
if err != nil {
logger.Error(err)
return 0, err
}
return percent[0], nil
}

//获取CPU温度
func GetCpuTemp() (string, error) {
cmd := exec.Command("cat", "/sys/class/thermal/thermal_zone0/temp")
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
logger.Error(err)
return "", err
}
logger.Debug(out.String())
tempStr := strings.Replace(out.String(), "\n", "", -1)
temp, err := strconv.Atoi(tempStr)
if err != nil {
logger.Error(err)
return "", err
}
temp = temp / 1000
logger.Debug(temp)
return strconv.Itoa(temp), nil
}

//获取内存使用率
func GetMemPercent() (float64, error) {
memInfo, err := mem.VirtualMemory()
if err != nil {
logger.Error(err)
return 0, err
}
return memInfo.UsedPercent, nil
}

//获取硬盘使用率
func GetDiskPercent() (float64, error) {
parts, err := disk.Partitions(true)
if err != nil {
logger.Error(err)
return 0, err
}
diskInfo, err := disk.Usage(parts[0].Mountpoint)
if err != nil {
logger.Error(err)
return 0, err
}
return diskInfo.UsedPercent, nil
}

func main() {
cpuPer, err := GetCpuPercent()
if err != nil {
logger.Error(err)
} else {
cpuPer, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", cpuPer), 64)
cpuPerStr := strconv.FormatFloat(cpuPer, 'f', -1, 64)
logger.Debug("cpu:", cpuPerStr)
}

cpuTemp, err := GetCpuTemp()
if err != nil {
logger.Error(err)
} else {
logger.Debug("cpuTemp:", cpuTemp)
}

diskPer, err := GetDiskPercent()
if err != nil {
logger.Error(err)
} else {
diskPer, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", diskPer), 64)
diskPerStr := strconv.FormatFloat(diskPer, 'f', -1, 64)
logger.Debug("diskPer:", diskPerStr)
}
memPer, err := GetMemPercent()
if err != nil {
logger.Error(err)
} else {
memPer, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", memPer), 64)
memPerStr := strconv.FormatFloat(memPer, 'f', -1, 64)
logger.Debug("memPer:", memPerStr)
}
}

3. 测试结果

2021-08-27 09:48:48 [DEBG] [test.go:82] cpu: 1.01
2021-08-27 09:48:49 [DEBG] [test.go:38] 58000

2021-08-27 09:48:49 [DEBG] [test.go:46] 58
2021-08-27 09:48:49 [DEBG] [test.go:89] cpuTemp: 58
2021-08-27 09:48:49 [DEBG] [test.go:98] diskPer: 23.34
2021-08-27 09:48:49 [DEBG] [test.go:106] memPer: 5.95

4. 编译

$ ./compile.sh "arm"

简单的测试项目上传

举报

相关推荐

0 条评论