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

如何从/ proc / pid / stat获取应用程序的总CPU使用率?

郭元明
2023-03-14
问题内容

我想知道如何计算一个进程的总CPU使用率。

如果我这样做,我认为相关字段是(取自lindevdoc.org):cat /proc/ _pid_ /stat

  1. 用户代码中花费的CPU时间(以吉比特为单位)
  2. 花费在内核代码中的CPU时间(以吉比特为单位)
  3. 用户代码中花费的CPU时间,包括来自子代的时间
  4. 花费在内核代码上的CPU时间,包括来自子代的时间

那么总花费时间是14到17字段的总和?


问题答案:

要计算特定进程的CPU使用率,您需要执行以下操作:

  1. /proc/uptime
    • #1 系统正常运行时间(秒)
  2. /proc/[PID]/stat
    • #14 utime-用户代码中花费的CPU时间,以 时钟滴答数为单位
    • #15 stime-花费在内核代码中的CPU时间,以 时钟周期为单位
    • #16 cutime- 等待的儿童 花费在用户代码中 CPU时间(以 时钟滴答为单位
    • #17 cstime- 等待儿童的 CPU时间花费在内核代码中(以 时钟滴答为单位
    • #22 starttime-进程开始的时间,以 时钟滴答为单位
  3. 系统的赫兹(每秒的时钟滴答数)。
    • 在大多数情况下,getconf CLK_TCK可用于返回时钟滴答数。
    • sysconf(_SC_CLK_TCK)C函数调用也可以用来返回赫兹值。

计算方式

首先,我们确定该过程花费的总时间:

total_time = utime + stime

我们还必须决定是否要包括子进程中的时间。如果这样做,则将这些值添加到total_time

total_time = total_time + cutime + cstime

接下来,我们获取自该过程开始以来经过的总时间(以 秒为单位)

seconds = uptime - (starttime / Hertz)

最后,我们计算CPU使用率百分比:

cpu_usage = 100 * ((total_time / Hertz) / seconds)


 类似资料:
  • 问题内容: 关于如何使用/ proc / stat中的统计信息获取CPU利用率的文章和参考文献很多。但是,它们中的大多数仅使用7个以上的CPU统计信息中的四个(用户,nice,系统和空闲),而忽略了Linux2.6中存在的剩余jiffie CPU计数(iowait,irq,softirq)。 我的问题是:iowait / irq / softirq编号是否也计入前四个编号之一(用户/ nice /

  • 问题内容: 我希望能够启动活动或服务并尽快获取该进程的PID,这将是最好的情况。除了浏览/ proc目录外,我是否还有其他选择,否则会导致活动/服务启动到我在proc中找到所需时间之间的时间量竞争状态发生变化目录并开始观察? 问题答案: 我认为您需要使用ActivityManager:有关过程信息,请参见http://developer.android.com/reference/android/

  • 问题内容: 我遇到了一个问题。有时,当我的JUnit测试正在运行时,请命令webDriver.quit();。不会杀死chromedriver进程,因此下一个测试无法开始。在那种情况下,我想添加一些可以在Linux上手动终止进程的方法,但是我不知道如何获取chromedriver的PID,因此可以执行以下操作:Runtime.getRuntime()。exec(KILL + PID); 问题答案:

  • 问题内容: 我正在努力弄清标题中提到的两个文件。我查了一下是什么。但是,我无法理解如何从他们那里提取有用的信息(或者我只是以错误的方式来对待)。 让我解释一下:页面映射是一个相当新的“功能”伪文件,其中包含分配给当前[pid]的虚拟页面的物理框架信息。也就是说,给定一个从地址x开始的虚拟页面,比如说“ vas”代表虚拟地址开始,我可以使用vas为页面地图文件建立索引,以获取映射的物理页面框架的64

  • 问题内容: 大概有一个库或简单的asm blob,可以获取我正在执行的当前CPU的编号。 问题答案: 使用以确定在其上调用线程运行的CPU。请参阅(系统调用)和(库包装器)。但是,请注意其内容: 仅在调用时保证放置在cpu中的信息是最新的:除非已使用sched_setaffinity(2)修复了CPU关联性,否则内核可能随时更改CPU。(通常不会发生这种情况,因为调度程序会尝试最大程度地减少CPU

  • 我已经从谷歌阅读了这个标准描述:https://developer.android.com/training/sharing/receive 在此之后,我更新了我的AndroidManifest.xml,以包括一个意图过滤器来接受来自其他应用程序的共享(对于各种哑剧类型)。 我可以将我的应用程序视为其他应用程序中的共享选项,当我在其他应用程序中选择一个文件(例如,照片应用程序中的图像文件)并选择与