我的应用程序消耗了 100% CPU - 200%。当我通过调用 Thread.getAllStackTraces()
或 kill -3
创建线程转储时,我发现有些线程消耗大量 CPU 时间,但它们的堆栈踪迹不可用。 CPU 分析时不会显示它们。
线程是:HandshakeCompletedNotify-Thread
、Keep-Alive-Timer
和process reaper
。然而,它们的堆栈跟踪不可用。
Keep-Alive-Timer
和 HandshakeCompletedNotify-Thread
不应该是 native 的。此外,我们对 jre 中的 java.policy 或 java.security 文件没有特殊权限。
如何获取这些线程的堆栈跟踪以解决高 CPU 消耗问题?
最佳答案
使用类似 visual vm 的分析工具
它具有 CPU 采样和分析支持,可显示 CPU 消耗情况。
关于Java - 没有可用的堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5808293/