获取每个线程的CPU统计信息


17

我对特定应用程序中每个线程的cpu当前使用情况-精确地是cpu%和wait%-感兴趣。是否可以从某处获取该信息?

我知道top可以按每个实际线程(带有pid的线程)拆分信息,但是它没有显示针对每个线程的系统/用户/等待cpu用法拆分。我还想以某种方式记录该信息。您是否知道可以执行此操作的任何应用程序(或API)?

Answers:


4

我会研究SystemTap。该工具肯定会给您您想要的。有这种谱的线程例子; 不知道它是否具有您想要的所有功能,但是您可以对其进行修改以使其具有所需的功能。



12

您可以通过以下ps命令获得的每个线程的cpu使用率百分比:

 ps -emo %cpu,pid,user,args

计算方法的说明ps manpage如下:

当前,它是所用的CPU时间除以进程已运行的时间(cputime /实时比率),以百分比表示。


我对cpu时间和io-wait时间都非常感兴趣。ps不能处理第二个。
viraptor

自我注意:在Java应用中,将-e用-C Java替换为pid并用spid替换pid来替换Java应用程序中的线程ID
kellogs 2015年

2
关于自己的更多说明:ps -To pcpu,tid -C java | sort -r -k1 | more用于Java应用程序中的猪线程。ps --sort=pcpu一无所获 更好地依靠外壳进行分类。
kellogs,2015年

@kellogs非常有用,谢谢。我将添加-n-g排序,以使“ 10”显示在“ 2”上方。
EM0

0

也许看看htop,您可以使用它进行很多配置。


不幸的是,它无法将cpu在用户/系统/等待时间上分配给特定线程-仅针对整个机器
-viraptor

是的,但是我该怎么做呢?
rmobis

0

您尝试过sar吗?即使在pid级别,它也可以获取很多信息。



0

我在嵌入式系统上偶然发现了这个问题,在该系统上我们没有花哨的工具来研究这些东西。

为此,我使用了cpuacct cgroup每个线程并将其放置在自己的文件夹中。这样,我就可以衡量它们的使用情况。

层次结构看起来像这样:

my-app.service
|-tid1
|-tid2
|-tid3

然后我将其更改为

my-app.service
|-dir1
|  -tid1
|-dir2
|  -tid2
|-dir3
|  -tid3
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.