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

6 linux cpu performance multithreading utilization

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

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

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

提前感谢您的帮助.

小智 6

您可以阅读内容/proc/[your PID]/stat以获取整个过程的信息,如果您有2.6内核,还可以获得/proc/[your PID]/task/[thread ID]/stat各个线程的信息.(见这里)

具体来说,您将找到以下两个字段:

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

stime%lu

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

cutime%ld

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

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


Dan*_*ane 0

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

这是适合您情况的操作方法。