go获取linux信息,linux – 使用golang获取CPU使用率

我有一个类似的问题,从来没有找到一个轻量级的实现。这是解决您的具体问题的解决方案的一个减肥版本。我像tylerl推荐的那样对/ proc / stat文件进行抽样。你会注意到,我在样品之间等待3秒钟,以匹配顶部的输出,但是我也有1或2秒的效果。我在一个循环程序中运行类似的代码,然后当我需要其他程序时访问cpu的使用。

您也可以解析顶部-n1 |的输出grep -i cpu来获取cpu的使用情况,但是它只在我的linux盒子上采样了半秒钟,而且它在重负载的时候已经关闭了。当我同步它和以下程序时,常规顶部似乎非常紧密地匹配:

package main

import (

"fmt"

"io/ioutil"

"strconv"

"strings"

"time"

)

func getCPUSample() (idle, total uint64) {

contents, err := ioutil.ReadFile("/proc/stat")

if err != nil {

return

}

lines := strings.Split(string(contents), "\n")

for _, line := range(lines) {

fields := strings.Fields(line)

if fields[0] == "cpu" {

numFields := len(fields)

for i := 1; i < numFields; i++ {

val, err := strconv.ParseUint(fields[i], 10, 64)

if err != nil {

fmt.Println("Error: ", i, fields[i], err)

}

total += val // tally up all the numbers to get total ticks

if i == 4 { // idle is the 5th field in the cpu line

idle = val

}

}

return

}

}

return

}

func main() {

idle0, total0 := getCPUSample()

time.Sleep(3 * time.Second)

idle1, total1 := getCPUSample()

idleTicks := float64(idle1 - idle0)

totalTicks := float64(total1 - total0)

cpuUsage := 100 * (totalTicks - idleTicks) / totalTicks

fmt.Printf("CPU usage is %f%% [busy: %f, total: %f]\n", cpuUsage, totalTicks-idleTicks, totalTicks)

}

看来我被允许链接到我在bitbucket上写的完整的实现;如果没有,请随意删除。到目前为止,它只适用于linux,但是:systemstat.go

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值