Java - 没有堆栈跟踪可用
问题描述:
我的应用程序消耗100%的CPU - 超过200%。当我通过调用Thread.getAllStackTraces()
或kill -3
创建线程转储时,我发现有线程会占用大量CPU时间,但是它们的堆栈跟踪不可用。 CPU分析时不显示它们。Java - 没有堆栈跟踪可用
线程为:HandshakeCompletedNotify-Thread
,Keep-Alive-Timer
和process reaper
。但是它们的堆栈跟踪不可用。据我所知,
Keep-Alive-Timer
和HandshakeCompletedNotify-Thread
不应该是原生的。另外,我们在jre中的java.policy或java.security文件中没有特殊的权限。
如何获得这些线程的堆栈跟踪以解决高CPU消耗?
答
使用分析工具像visual vm
它具有CPU的采样和分析支持,以显示其中CPU消耗。
+0
试过了。由于没有可用的堆栈跟踪,因此Profiler不会看到这些线程 – 2011-04-27 17:54:49
你已经[试过这个,对不对?](http://*.com/questions/266373/one-could-use-a-profiler-but-why-not-just-halt-the-program/ 317160)#317160) – 2011-04-27 17:49:58
据我所知,Ctrl + Break对Windows有好处,对于linux来说,同样的选择是kill -3,这就是我试过的 – 2011-04-27 17:53:51
这三个CPU消耗很多很奇怪。我怀疑有些网络问题,比如打开/关闭SSL连接的DDoS或类似的东西。 – 2011-04-27 18:06:15