线程转储:要查找什么来确定负责 100% CPU 的线程?
Thread Dump: What to look for to determine the thread responsible for 100% CPU?
试图解决大型系统 运行 上百个并发线程的 100% CPU 消耗问题,我在这篇 Oracle Diagnosing a Looping Process 文章的帮助下生成了一个线程转储。
要找出 哪个 线程导致了如此高的 CPU 消耗,我知道我应该关注 RUNNABLE
中的线程状态,但其中有 几十个 。所以大海捞针
在处于 RUNNABLE
状态的所有这些线程中,我还应该寻找什么,以专注于负责 100% CPU 消耗的特定线程?
在 linux:
1.可以通过命令获取最忙线程id:top -Hp $(pidof java)
2.然后将线程id转为十六进制:prinrf "%x\n" {the tid}
3. 现在,在thread-dump 中搜索十六进制id,即消耗最多的线程CPU。
在其他操作系统上,google如何找到进程中最忙的线程。
@meng的精彩回答Windows方面:
- 运行 微软的 Process Explorer 截屏 while:
- 在 Java 进程控制台通过 Ctrl+Break 进行线程转储。
- 在进程属性(在 Process Explorer 中)的 'Threads' 选项卡中找到最前面的 CPU 消耗 TID,并将这些数字转换为十六进制。
- 在线程转储中找到那些十六进制数字(显示为 'nid' == 本机 ID)。
试图解决大型系统 运行 上百个并发线程的 100% CPU 消耗问题,我在这篇 Oracle Diagnosing a Looping Process 文章的帮助下生成了一个线程转储。
要找出 哪个 线程导致了如此高的 CPU 消耗,我知道我应该关注 RUNNABLE
中的线程状态,但其中有 几十个 。所以大海捞针
在处于 RUNNABLE
状态的所有这些线程中,我还应该寻找什么,以专注于负责 100% CPU 消耗的特定线程?
在 linux:
1.可以通过命令获取最忙线程id:top -Hp $(pidof java)
2.然后将线程id转为十六进制:prinrf "%x\n" {the tid}
3. 现在,在thread-dump 中搜索十六进制id,即消耗最多的线程CPU。
在其他操作系统上,google如何找到进程中最忙的线程。
@meng的精彩回答Windows方面:
- 运行 微软的 Process Explorer 截屏 while:
- 在 Java 进程控制台通过 Ctrl+Break 进行线程转储。
- 在进程属性(在 Process Explorer 中)的 'Threads' 选项卡中找到最前面的 CPU 消耗 TID,并将这些数字转换为十六进制。
- 在线程转储中找到那些十六进制数字(显示为 'nid' == 本机 ID)。