当前位置: 首页 > 面试题库 >

如何获得CPU使用率

齐迪
2023-03-14
问题内容

我的Go程序需要知道所有系统和用户进程的当前cpu使用率。

我如何获得?


问题答案:

我遇到了类似的问题,但从未找到轻量级的实现。这是我的解决方案的精简版,可以回答您的特定问题。我按照/proc/stattylerl的建议对文件进行采样。您会注意到,我在两次采样之间等待3秒以匹配top的输出,但是在1或2秒的情况下我也取得了不错的结果。我在go例程中的循环中运行类似的代码,然后在需要其他go例程时访问cpu用法。

您也可以解析输出top -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



 类似资料:
  • 问题内容: 我正在尝试获取%的总CPU使用率。首先,我首先要说“ top”根本不会做,因为cpu转储之间会有延迟,它需要2个转储和几秒钟的时间,这使我的程序挂起(我不想给它自己的线程) 我尝试的下一件事情是“ ps”,它是即时的,但总的总数总是很高(超过20),当我实际上让我的cpu做某事时,它保持在20左右… 还有其他方法可以获取总的CPU使用率吗?超过一秒还是更长的时间都没有关系……但是更长的

  • 问题内容: 我发现这篇较旧的文章“ 如何在Java中监视计算机的 Cpu内存和磁盘使用情况”,并想问一下Java 7中是否有新内容。我想获取当前的CPU- ,我的应用程序的RAM,netzwork和netzwork的使用情况。它必须适用于linux(mac)和Windows。数据不能太详细,三个值就足够了(cpu:10%,Ram 4%,Network 40%)。如果数据仅用于应用程序而不是整个操作

  • 问题内容: 在Python中获取当前系统状态(当前CPU,RAM,可用磁盘空间等)的首选方式是什么?* nix和Windows平台的奖励积分。 似乎有几种方法可以从我的搜索中提取出来: 使用PSI之类的库(目前似乎尚未积极开发并且在多个平台上不受支持)或pystatgrab之类的库(自2007年以来一直没有活动,它似乎也不支持Windows)。 使用特定于平台的代码,例如对于* nix系统使用a

  • 我是Java新手。在发布这个问题之前,我已经搜索了这个网站。如果我的问题看起来很愚蠢,请原谅我。 下面给出了我正在寻找答案的代码。 我打算让4名选手参加100米赛跑。主线程以最高优先级运行,因此它可以检查每个玩家的进度。我在主线程和子线程中都编写了Yield方法,认为主线程和子线程都将获得相当多的CPU时间。 该程序为每次运行产生以下三种不同的输出。 > 它产生"Gun is Fired"消息,之

  • 本文向大家介绍Linux下使用python调用top命令获得CPU利用率,包括了Linux下使用python调用top命令获得CPU利用率的使用技巧和注意事项,需要的朋友参考一下 本文定位:想通过python调用top命令获取cpu使用率但暂时没有思路的情况。 如果单纯为了获得cpu的利用率,通过top命令重定向可以轻松实现,命令如下: 或 这个就不解释了,不懂的朋友查询下top的帮助文档。这里要

  • 问题内容: 我正在尝试使用Java获取当前正在运行的Java虚拟机使用的CPU百分比。我的研究指出我要使用该类。通过在线示例,我编写了以下内容: 在两台计算机上对此进行测试后,我无法停止获得两个调用的结果。我尝试通过各种方法使用Java 7和6的64位和32位版本运行此代码。不过,我得到的是打印出的该,根据的Javadoc, 我不知道还要在这里做什么。获取CPU负载至关重要,我想避免使用其他库,例