栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何获得CPU使用率

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何获得CPU使用率

我遇到了类似的问题,但从未找到轻量级的实现。这是我的解决方案的精简版,可以回答您的特定问题。我按照

/proc/stat
tylerl的建议对文件进行采样。您会注意到,我在两次采样之间等待3秒以匹配top的输出,但是在1或2秒的情况下我也取得了不错的结果。我在go例程中的循环中运行类似的代码,然后在需要其他go例程时访问cpu用法。

您也可以解析输出

top -n1 | grep -icpu
以获取cpu的使用情况,但是它在我的Linux机器上仅采样了半秒钟,在繁重的工作中已经消失了。当我将其与以下程序同步时,常规顶部似乎非常匹配:

package mainimport (    "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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/399186.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号