我不幸遇到了寻找未确认的内存泄漏的任务。这是我第一次使用YourKit,所以虽然我知道我要寻找的东西,却不知道在哪里寻找以及如何寻找。
我的理解是,随着时间的推移,内存消耗会增加,因为某些对象没有被释放。在Rails中很难做到这一点,但是我想有人想出了办法。
这是内存遥测的样子:
忽略GC随时间增加的事实周期,似乎Old Gen内存正在增加...也许。
现在我们可能需要知道什么物体堆积在上面以及产生了什么。
到目前为止,我已采取的步骤:
触发CG
开始“对象分配记录”(每100个...我觉得这可能对某些事情有用)
等待了片刻
触发了另一个CG
是否进行了内存转储
在YourKit中打开内存快照后,我不知道该找什么。
分配中有呼叫树。展开树会给我一些正在运行的Rails代码的提示,但是我不知道我正在查看的内容实际上是否是我所需要的。
任何Java分析,Yourkit都可以使用,有人可以向我指出正确的方向吗?
编辑:我可以在合并路径视图中看到的示例:
最佳答案
1)不要使用对象分配记录。它对于发现内存泄漏几乎没有用。
2)我建议定期推进对象生成(这非常快并且不会增加开销)。看看http://www.yourkit.com/docs/java/help/generations.jsp
您将能够按“年龄”分割对象并了解堆为何增长。
由于您使用的是Tomcat,因此查看“ Web应用程序”可能会有所帮助。http://www.yourkit.com/docs/java/help/web_applications.jsp如果您的应用程序在类重新加载/重新部署方面遇到问题,则可以在其中看到它。
最好的祝福,
弗拉基米尔·康德拉捷夫(Vladimir Kondratyev)
YourKit,LLC