Java - 没有堆栈跟踪可用

问题描述:

我的应用程序消耗100%的CPU - 超过200%。当我通过调用Thread.getAllStackTraces()kill -3创建线程转储时,我发现有线程会占用大量CPU时间,但是它们的堆栈跟踪不可用。 CPU分析时不显示它们。Java - 没有堆栈跟踪可用

线程为:HandshakeCompletedNotify-Thread,Keep-Alive-Timerprocess reaper。但是它们的堆栈跟踪不可用。据我所知,

Keep-Alive-TimerHandshakeCompletedNotify-Thread不应该是原生的。另外,我们在jre中的java.policy或java.security文件中没有特殊的权限。

如何获得这些线程的堆栈跟踪以解决高CPU消耗?

+0

你已经[试过这个,对不对?](http://*.com/questions/266373/one-could-use-a-profiler-but-why-not-just-halt-the-program/ 317160)#317160) – 2011-04-27 17:49:58

+1

据我所知,Ctrl + Break对Windows有好处,对于linux来说,同样的选择是kill -3,这就是我试过的 – 2011-04-27 17:53:51

+1

这三个CPU消耗很多很奇怪。我怀疑有些网络问题,比如打开/关闭SSL连接的DDoS或类似的东西。 – 2011-04-27 18:06:15

使用分析工具像visual vm

它具有CPU的采样和分析支持,以显示其中CPU消耗。

+0

试过了。由于没有可用的堆栈跟踪,因此Profiler不会看到这些线程 – 2011-04-27 17:54:49