【问题标题】:How to get thread CPU utilization metrics in Redhat Linux如何在 Redhat Linux 中获取线程 CPU 利用率指标
【发布时间】:2009-04-19 17:43:15
【问题描述】:

我需要获取进程中所有线程的 CPU 利用率指标。

  • 操作系统 = Redhat linux
  • 编程语言 = 使用 POSIX 的 C++
  • 要求 = 需要每隔几秒不明确地采样一次,而不仅仅是一个及时的快照。
  • 约束 = 不允许在线程中编写额外的代码

    我知道你可以使用“top”命令,但是还有什么其他的方法呢?有没有“ps”的标志?

提前感谢您的所有帮助。

【问题讨论】:

    标签: linux performance multithreading cpu utilization


    【解决方案1】:

    您可以阅读/proc/[your PID]/stat 的内容以获取整个进程的信息,如果您有一个2.6 内核,那么/proc/[your PID]/task/[thread ID]/stat 也包含各个线程的信息。 (见here

    具体来说,你会发现这两个字段:

    此进程已在用户模式下调度的 jiffies 数。

    时间 %lu

    此进程在内核模式下已调度的 jiffies 数。

    cutime %ld

    这里有问题的部分是给出值的单位。一个 jiffy 是 1/HZ 秒,其中 HZ 是内核时钟滴答速率,确定这个时钟速率是困难的部分。

    如果您只需要一个特定的系统,您可以做一些测试或查看您的内核头文件并将这个值硬编码到您的程序中。如果您想知道如何以更一般的方式确定它,您可以通过查看its source code 来了解像 top 这样的工具是如何做到的(参见old_Hertz_hack() 函数和相关的 cmets)

    【讨论】:

    • 我找到了一种在特定机器上获取 Hz 值的方法:cat /boot/config-uname -r | grep HZ
    【解决方案2】:

    可能更简单的方法是使用getrusageRUSAGE_THREAD 的Linux 特定扩展名。一旦有了这些时间,您就可以减去上次采样的时间,然后除以自上次采样以来经过的实际时间。也就是说,您以百分比形式获得 CPU 使用率。

    有关 linux 特定文档,请参阅rusage liunx man page

    【讨论】:

      【解决方案3】:

      您可以使用 Linux 中提供的gnu gprof 来执行此操作。我相信他们声称支持线程,但这比进程级别的分析更复杂,因此您可能无法获得您想要的结果。

      这是一个howto,适合您的情况。

      【讨论】:

        【解决方案4】:

        您可以先使用“top”命令查找进程ID。

        之后,您可以使用以下命令仅显示进程的 CPU/Memory 使用情况

        top -p {pid}
        

        之后,你可以按“Shift”+“h”来显示线程

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-05
          • 2013-01-04
          • 1970-01-01
          • 2016-03-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多