如何在Redhat Linux中获得线程CPU利用率指标

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

  • 操作系统= Redhat Linux
  • 编程语言=使用POSIX的C ++
  • 需求=需要每隔几秒取样一次,不仅仅是一次快照。
  • 约束=不允许在线程中写入额外的代码

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

提前感谢您的帮助。

你可以读取/proc/[your PID]/stat来获取整个进程的信息,如果你有一个2.6内核,还有/proc/[your PID]/task/[thread ID]/stat个别线程的信息。 (见这里 )

具体来说,你会发现这两个领域:

这个过程已经在用户模式下被调度的jiffies的数量。

stime%lu

这个进程已经在内核模式下被调度的jiffies的数量。

cutime%ld

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

如果你只需要一个特定的系统,你可以做一些测试或者看看你的内核头文件,并将这个值硬编码到你的程序中。 如果您想知道如何以更一般的方式来确定它,可以通过查看源代码来查看顶层工具是如何做的(请参阅old_Hertz_hack()函数和相关注释)

可能这样做的一个简单的方法是使用与RUSAGE_THREAD的Linux特定扩展的RUSAGE_THREAD 。 一旦你有这些时间,你可以减去你上次采样的时间,并除以自上次采样以来的实时。 这就是说你得到CPU使用率的百分比。

有关linux特定的文档,请参阅rusage liunx手册页 。

你可以用gnu gprof来做到这一点。 我相信他们声称支持线程化,但是这比在流程层面的分析更复杂,所以你可能得不到你要找的结果。

这是你的情况的一个howto 。

你可以使用“top”命令先找到进程ID。

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

 top -p {pid} 

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