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