我需要获取进程中所有线程的CPU利用率指标。
constraints =不允许在线程中编写其他代码
我知道你可以使用“top”命令,但还有其他方法吗?是否有“ps”的标志?
提前感谢您的帮助。
答案 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)
可能更简单的方法是使用getrusage和RUSAGE_THREAD
的linux特定扩展名。一旦你有这些时间,你可以减去你最后一次采样的次数,然后除以你上一次采样后的实际时间。也就是说,你将CPU使用率作为一个百分比。
有关特定于Linux的文档,请参阅rusage liunx man page。
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以使用“top”命令首先查找进程ID。
之后,您可以使用以下命令仅显示进程的CPU /内存使用情况
top -p {pid}
之后,您可以按“Shift”+“h”来显示线程