我正在调用供应商的 Java API,在某些服务器上,JVM 在登录 API 后似乎进入了低优先级轮询循环(CPU 使用率为 100%)。其他服务器上的同一应用程序不会出现此行为。这发生在 WebSphere 和 Tomcat 上。环境设置起来很棘手,因此很难尝试在 Eclipse 中进行分析。
有没有办法分析(或其他检查方法)在 Tomcat 中运行的现有 Java 应用程序,以找出处于这种 spinwait 状态时正在执行的方法?当应用程序处于此状态时,它只执行一种方法(供应商的方法)。供应商无法复制该行为(当然)。
更新:
使用 JConsole,我能够确定谁在运行以及他们在做什么。我花了几个小时才弄清楚它为什么这样做。问题最终是正在使用的供应商 API jar 与它正在使用的数据库配置不完全匹配。默认情况下,在配置略有不匹配的服务器上启用跟踪和性能监控。我用了一个不同的罐子,一切都很好。
所以,谢谢,约书亚,你的回答。JConsole 非常易于设置和用于监控现有应用程序。
@Cringe - 我对您建议的一些选项进行了一些试验。我在设置 JProfiler 时遇到了一些问题,它看起来不错(但价格昂贵)。展望未来,我继续添加了 Eclipse Profiler 插件,我将查看不同的开源分析器以比较功能。