2013-11-04 53 views
0

我使用jstack获得具有最高cpu利用率的PID线程转储。它指向带有0x4974的线程。100%cpu利用率需要帮助分析线程转储

“VM线程” PRIO = 10 TID = 0x00007ffc60068800 NID = 0x4974可运行 “VM 周期性任务线程” PRIO = 10 TID = 0x00007ffc60098000 NID = 0x497b 条件JNI等待全局引用:1182

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

感谢那些回复。好的,我可以学习如何使用武士,tda和ibm线程转储工具。看来问题在于正在创建的线程数量,等待监视的线程,锁定和阻塞。但我想知道你们是否有额外的投入。这是我从TDA有:

当它以100%的CPU利用率

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%是在监视器上睡觉。

这可能表示他们正在等待一些超载或不可用的外部资源(例如数据库)或者正在等待执行某些操作(空闲线程)。您应该使用不包含所有空闲线程的筛选器检查睡眠线程。

我们只有约60个客户。

我在cpu利用率为100%并重置后上传了线程转储。我还包括我使用的工具(武士,tda和ibm线程和显示器转储分析器) http://www.mediafire.com/?901mduvodm97d8v,x72cdixp8fltabu,fhfw4e50c7fzu4t,1oq2npaxmtxz0dq,i0u997fhvxfagd3,cdewe4de6x3rhe4,w2ndwqw2ekwixkd,qsbst5ow6f59p75,9fx8w8qpfdhjmyx,levpqppb3ouh71q

+0

我会使用visualvm加载线程转储并分析它。 –

+0

您可以发布整个线程转储吗?这将提供更多的线索,因为造成真正问题的原因。 – CuriousMind

+0

如果我发布整个线程转储,它真的会好吗?它相当长。 – user2939830

回答

0

转至IBM Thread and Monitor Dump Analyzer for Java从IBM下载该工具。但出于您的目的,您可能能够自己分析线程转储,并将您在jstack中发现的ID与线程堆栈跟踪映射到线程转储中。要获得线程转储:

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

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

1

这些内部线程没有Java线程堆栈,因此没有常规工具可以提供帮助。如果这些消耗过多的CPU,我会首先怀疑您使用的Java版本中存在一个错误。我会尝试使用Java 6更新45或Java 7更新45.

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