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