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

时间:2009-04-19 17:43:16

标签: linux performance multithreading cpu utilization

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

  • 操作系统= Redhat linux
  • 使用POSIX编程语言= C ++
  • 要求=需要每隔几秒钟采样一次,而不仅仅是一次快照。
  • constraints =不允许在线程中编写其他代码

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

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:6)

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

具体来说,您会发现以下两个字段:

  

此进程已在用户模式下安排的jiffies数。

     

stime%lu

     

此进程已在内核模式下安排的jiffies数。

     

cutime%ld

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

如果您只需要一个特定的系统,您可以只做一些测试或查看内核头文件并将此值硬编码到您的程序中。如果您想知道如何以更一般的方式确定它,您可以通过查看its source code来查看top之类的工具是如何做到的(请参阅old_Hertz_hack()函数和相关注释)< / p>

答案 1 :(得分:1)

可能更简单的方法是使用getrusageRUSAGE_THREAD的linux特定扩展名。一旦你有这些时间,你可以减去你最后一次采样的次数,然后除以你上一次采样后的实际时间。也就是说,你将CPU使用率作为一个百分比。

有关特定于Linux的文档,请参阅rusage liunx man page

答案 2 :(得分:0)

您可以使用Linux中提供的gnu gprof执行此操作。我相信他们声称支持线程,但这比在流程级别进行分析更复杂,所以你可能无法得到你正在寻找的结果。

根据您的情况,这是howto

答案 3 :(得分:0)

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

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

top -p {pid}

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