领先一步
VMware提供培训和认证,以加快您的进度。
了解更多今天我使用Yourkit的体验非常好,我想写一篇简短的推荐。我已经几年没用它了,即使那时它也是我找到的最好的工具,但现在它真的非常流畅。我没有对市场进行详尽的调查,那也不是这次练习的目的:我只是想找个工具来解决问题。
这是我今天的故事;沮丧,然后是恼怒,最后是满意。我在Spring Batch中怀疑存在内存泄漏,我需要快速找到它。其背景是我见过很多内存泄漏,但我已经很久没有直接处理过这个问题了。我这些天都“生活”在STS中(有时还会在梦里出现),所以我需要一个在IDE中运行良好的工具。我尝试了两个工具,但只是因为第一个选择不起作用。我尝试的两个工具是TPTP和Yourkit。
我在JUnit中编写了一个简单的集成测试,并使用这两个工具对其进行了分析。我可以从任一工具的内存分析中看出,我的进程结束时堆中存在过多的JobExecution类型对象,而我只需要知道是谁保留了不应该保留的对它们的引用?这似乎是一个很简单的问题。
由于Eclipse是STS的核心,我认为我会看看Eclipse性能监控工具(TPTP)是否比我上次尝试时有所改进。经过半天的时间折腾,简短的答案是“它不行”。长篇大论是它根本无法运行,除非安装了晦涩的过时共享库(在Ubuntu Ibex上),即使它运行了,内存分析中几乎没有有用的信息来追踪泄漏。谷歌可以帮助你解决第一个问题(我不知道为什么TPTP文档在该方面如此糟糕),但第二个问题不行。我可以从TPTP中获得足够的信息来查看是否存在泄漏,但我仍然不知道它来自哪里。问题是报告只告诉你堆中有哪些对象以及最初分配它们的代码行,这对于知道进程结束时谁引用了它们来说太遥远了。结论:TPTP比几年前好很多个数量级,但在实际应用中仍然非常无用。
所以我转向Yourkit,知道它可以轻松解决这个问题,但对安装和工具感到担忧。我发现Eclipse工具现在非常出色(上次我看的时候它缺失了),更好的是,我大约在5分钟内就找到了内存泄漏的根源。还不错。如果你想知道杀手级功能是什么,那就是:能够浏览堆和所有对象引用。自动在进程结束时拍摄快照也有很大帮助,因此你可以编写一个简单的单元测试,从IDE中对其进行分析,并在几次点击中将堆加载到Yourkit UI中。
如果你想知道,Spring Batch问题很小(只影响快照版本),很容易修复。
我知道SpringSource的Mark、Filip和其他一些人都在使用Yourkit(例如,参见这篇博文),而且我问的每个人都很喜欢它。但是,如果我们在文章和咨询项目中提到它,它往往会被掩盖在很多其他内容中,所以我希望这篇小文章能让你注意到Yourkit。
免责声明:我对Yourkit没有个人或商业利益。