日期:2014-05-16  浏览次数:20741 次

如何查找CPU占用率较高的线程是哪一个?
某一个线程CPU占用率较高,导致应用程序响应缓慢,如何才能够找到罪魁祸首?

在/proc文件系统中,有该进程的相关信息,进入task子目录,里面是所有的线程信息。
依次进入各个线程的子目录,打开status文件,里面有SleepAVG的字样,如果后面的值较小则说明线程比较繁忙。

我这里有一个线程的SleepAVG是0%,持续的,感觉像是死循环。
但是没法儿找到具体是哪一个线程,有没有好办法?

------解决方案--------------------
你用top命令看不到吗?
------解决方案--------------------
我想了一下还真没找到办法,期待高手,主要是要知道pthread_t和task里面的文件夹名是如何对应的
------解决方案--------------------
不会开发 不太懂
如果是自己写的代码 多斟酌一些自己的代码啊

------解决方案--------------------
为什么不用gdb调试下呢?
------解决方案--------------------
为什么不用gdb调试下呢?
------解决方案--------------------
top -H
H 开关可以列出线程. PID将是线程ID.
不加选项起动top后, 再键入'H'也可以.
------解决方案--------------------
一般情况下,可以通过top或者ps指令获取某进程相关的线程信息,这取决于你具体使用的线程库(如:NTPL)。
同时,这里也存在限制,你很难知道具体是对应你的代码中的哪个线程。

1. 简单做就是线程中dead loop时的打印,通过打印的频度就可以知道哪个线程负荷较重;
·实现简单,也比较笨。
2. 比较根本的办法是为每个线程设定一个名称,然后在proc文件系统中查看线程的信息,根据线程名称来定位
·实现简单,比较根本。
C/C++ code

// 在线程入口处执行下面代码
prctl ( PR_SET_NAME, ( unsigned long ) "yourTask" );