我正在尝试使用 jvisualvm 分析应用程序。该应用程序包含一个循环,其中从数据库加载数据,然后对数据执行一些复杂的计算。处理完一组数据后,将加载并计算下一组数据。
当我启动我的应用程序并附加 jvisualvm 时,我在 CPU 分析页面上设置了一个过滤器(“Sart profiling from classes”和“Do not profile classes”),因为我对与数据库相关的任何事情都不感兴趣访问和其他输入/输出相关的东西。
过滤器工作 - 几乎。我的问题是,探查器报告大部分时间花在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run()
中,即使 sun.* 被输入到“Do not配置文件类”过滤器。这是 sun.* 中唯一出现在我的分析结果中的方法。
有没有人以前见过这个并且知道如何摆脱它?问题是,所有其他方法在“Self Time”列中只显示少量 (<1%),大多数显示为 0%。
使用的jvisualvm版本是1.3.2。
提前致谢, 阿克塞尔
最佳答案
听起来大部分时间都花在了等待数据库上。如果你想分析其余的东西,你可以
- stub 数据库以便它快速返回(从而使其余代码花费大部分时间),或者
- 使用更好的分析器,如 YourKit 或 JProfiler(付费,绝对支持你想要的)或 TPTP(免费,但我不确定它有多强大)
关于java - jvisualvm 不会从 CPU 分析中排除某些方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7189899/