Java 线程转储:寻找什么来确定负责100%CPU的线程?
为了解决并发运行数百个线程的大型系统上100%的CPU消耗问题,我在这篇Oracle文章的帮助下生成了一个线程转储 为了找出哪个线程是造成这种高CPU消耗的原因,我知道我应该关注处于可运行状态的线程,但是有几十个线程。所以这就像大海捞针 在所有处于可运行状态的线程中,我还应该寻找什么来关注负责100%CPU消耗的特定线程?在linux上: 1.您可以通过命令top-Hp$pidof java获得最繁忙的线程id 2.然后将线程id转换为十六进制:prinrf%x\n{the tid} 3.现在,在线程转储中搜索十六进制id,即消耗最多CPU的线程 在其他操作系统上,谷歌如何查找进程中最繁忙的线程。在linux上: 1.您可以通过命令top-Hp$pidof java获得最繁忙的线程id 2.然后将线程id转换为十六进制:prinrf%x\n{the tid} 3.现在,在线程转储中搜索十六进制id,即消耗最多CPU的线程Java 线程转储:寻找什么来确定负责100%CPU的线程?,java,multithreading,thread-dump,Java,Multithreading,Thread Dump,为了解决并发运行数百个线程的大型系统上100%的CPU消耗问题,我在这篇Oracle文章的帮助下生成了一个线程转储 为了找出哪个线程是造成这种高CPU消耗的原因,我知道我应该关注处于可运行状态的线程,但是有几十个线程。所以这就像大海捞针 在所有处于可运行状态的线程中,我还应该寻找什么来关注负责100%CPU消耗的特定线程?在linux上: 1.您可以通过命令top-Hp$pidof java获得最繁忙的线程id 2.然后将线程id转换为十六进制:prinrf%x\n{the tid} 3.现在,
在其他操作系统上,谷歌如何在一个进程中找到最繁忙的线程。关于@meng出色答案的Windows方面: 运行Microsoft并拍摄其屏幕截图,同时: 在Java进程控制台上通过Ctrl+Break进行线程转储。 在process Explorer中的“进程属性”的“线程”选项卡中找到消耗CPU最多的TID,并将这些数字转换为十六进制。 找到线程转储中显示为'nid'==本机id的十六进制数。
@meng极好答案的窗口部分: 运行Microsoft并拍摄其屏幕截图,同时: 在Java进程控制台上通过Ctrl+Break进行线程转储。 在process Explorer中的“进程属性”的“线程”选项卡中找到消耗CPU最多的TID,并将这些数字转换为十六进制。 找到线程转储中显示为'nid'==本机id的十六进制数。