我分析了一个包含很多类的大型 jboss 服务器。当我分析 CPU 时,结果总是类似于 java.util.TimerThread.run() = 62% 和 java.util.concurrent.ThreadPoolExecutor$Worker.run() = 34,8%。
在这两种方法下,其他数千种方法为 0%。
我认为这是一个糟糕的错误,因为这些方法中的大多数都在这些线程中运行。但是我怎么看出来是哪一个...
ThreadDump - 函数对此也无用。
最佳答案
如果不知道代码的哪一部分慢,最好从CPU采样开始。一旦您更好地了解(基于采样结果)出了什么问题,您就可以只分析 jboss 服务器的一部分。见 Profiling With VisualVM, Part 1和 Profiling With VisualVM, Part 2获取有关分析以及如何设置分析根和检测过滤器的更多信息。
关于VisualVM 配置 CPU 但 run() - 方法干扰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9326113/