当前位置: 首页 > 知识库问答 >
问题:

100%cpu利用率需要帮助分析线程转储

艾国安
2023-03-14

我使用jack获取具有最高cpu利用率的PID的线程转储。它指向nid 0x4974的线程。

"VM线程"prio=10 tid=0x00007ffc60068800 nid=0x4974可运行"VM定期任务线程"prio=10 tid=0x00007ffc60098000 nid=0x497b等待条件JNI全局引用:1182

我在分析过程中遇到了问题,因为它没有线程的状态以及正在执行的代码,这与我在网络上看到的示例线程转储不同。有没有最好在线的免费软件可以分析. txt线程转储文件?

感谢那些回复的人。好的,所以我能够学习如何使用samurai、tda和ibm线程转储工具。问题似乎在于正在创建的线程数、等待监视的线程数、锁定和阻塞。但我想知道你们是否有其他意见。这是我从TDA得到的:

当其cpu利用率达到100%时

Overall Thread Count    1001
Overall Monitor Count   644
Number of threads waiting for a monitor  50
Number of threads locking a monitor 636
Number of threads sleeping on a monitor 0
Number of deadlocks 0
Number of Monitors without locking threads 0

在我重置之后

Overall Thread Count  32
Overall Monitor Count  13
Number of threads waiting for a monitor  0
Number of threads locking a monitor  13
Number of threads sleeping on a monitor  13
Number of deadlocks 0
Number of Monitors without locking threads 0

40%的线程正在监视器上Hibernate。

这可能表明他们正在等待一些过载或不可用的外部资源(例如数据库),或者只是在等待做某事(空闲线程)。您应该使用过滤器检查Hibernate线程,排除所有空闲线程。

我们只有大约60个客户。

上传了线程转储时,cpu利用率是在100%和重置后。我还包括了我使用的工具(samurai、tda和ibm thread and monitor dump analyzer)http://www.mediafire.com/?901mduvodm97d8v,x72cdixp8fltabu,fhfw4e50c7fzu4t,1oq2npaxmtxz0dq,i0u997fhvxfagd3,CDEWE4DE6X3RHH4,w2ndwqw2ekwixkd,qsbst5ow6f59p75,9fx8w8qpfdhjmyx,LEVPPPB3OUH71Q

共有2个答案

湛财
2023-03-14

转到IBM线程和监视器转储分析器Java从IBM下载该工具。但出于您的目的,您可以自己分析线程转储,并将从jack找到的ID与线程转储中的线程堆栈跟踪进行映射。要获取线程转储:

on Linux: kill -3 pid
on Windows: Ctrl-Break (not Ctrl-C)

之后,您可以从命令窗口或标准输出复制线程转储。

古凌
2023-03-14

这些内部线程没有Java线程堆栈,因此任何普通工具都没有帮助。如果这些占用了过多的CPU,我首先会怀疑您使用的Java版本中存在错误。我会在Java 6 update 45或Java 7 update 45中尝试这一点。

要诊断这个问题,您需要本机堆栈转储和对JVM内部的良好理解。

 类似资料:
  • 我需要一些帮助用JSOUP解析这个html。我正在尝试从表中的每一列获取数据值。我一直在看JSoup文档,试图弄清楚我到底需要做什么,但还是不确定。看起来网站使用了CSS和内联格式的组合;其中大部分可以转换为CSS并减小页面大小。 这是html文件的一个小片段(实际上差不多有5 MB大小)。 更新:我已经更新了源代码,以更准确地显示html的结构。我假定tbody将位于表元素中是一个给定的条件。我

  • 谁能解释一下这两种方法的真正区别 vm。GetTotalizationofCPU(CloudSim.clock()); 和 cloudlet.get利用OfCpu(CloudSim.clock()); 提前感谢

  • 问题内容: 在Linux中是否有命令或任何其他方式来获取当前或平均 CPU使用率 (对于多处理器环境)? 我在小型系统中使用嵌入式Linux。基本上,我需要确定CPU利用率,以便在CPU利用率很高的情况下,可以将新进程转移到系统中的另一个控制器,而不是在可能忙于执行更重要进程的主处理器上执行。 这个问题不仅仅在于对进程进行优先级排序,另一个控制器可以充分处理新进程,只是当主处理器不忙时,我希望它来

  • 首先,我是C、C++、C#、Android和Swift的开发人员,但我绝对没有JavaScript、PHP或Web开发经验。 即只接受整数值的输入。 这是刀片代码:

  • /**程序可以将十进制转换为二进制并报告是否使用了非法字符*程序不能将二进制转换为十进制*/import java.util.scanner; /***这个类包含一个完整的程序,只有一个main()方法,用于*将非负十进制整数(即以10为基数的整数)转换为*正二进制整数(即以2为基数的整数)。要*转换的值是从命令行读入的。*/public class BaseConversions2{public

  • 很抱歉打扰你们,我是编程新手,一直在这个程序上有问题。 谢了! *********编辑***************我从BMI中删除了int值,但有损转换错误仍然存在。有什么办法解决这个问题吗?