我正在尝试为在 unix 上运行的独立 Java 程序确定内存泄漏问题。我已经设置了端口和参数,以便我可以使用 JMX 和 JConsole 或 VisualVM 连接到它。
这些有点帮助,但不幸的是,它不会告诉您内存去了哪里,它只会告诉您使用了多少内存。我正在寻找一个更详细的分析器来帮助我找到占用我记忆的对象。有人有想法么?最好是在 JMX 端口上进行对话,这样我就不必重新配置程序。谢谢!
我正在尝试为在 unix 上运行的独立 Java 程序确定内存泄漏问题。我已经设置了端口和参数,以便我可以使用 JMX 和 JConsole 或 VisualVM 连接到它。
这些有点帮助,但不幸的是,它不会告诉您内存去了哪里,它只会告诉您使用了多少内存。我正在寻找一个更详细的分析器来帮助我找到占用我记忆的对象。有人有想法么?最好是在 JMX 端口上进行对话,这样我就不必重新配置程序。谢谢!
如果有问题的机器安装了 X11 客户端库,以及允许 X11 转发的可访问 ssh 服务器,以及在本地机器上运行的 X11 服务器(可能是http://sourceforge.net/projects/xming/)并且您使用Sun Java 6u10 或更高版本,您可以通过 ssh(使用 -X 或 -Y)进入 Linux 机器,并在那里运行 jvisualvm ,同时在本地机器上显示其 GUI 界面。
在同一台机器上运行允许 jvisualvm 直接附加到正在运行的 Java 进程,而不是做各种配置巫术。
NetBeans Java Profiler支持对远程 JVM 进行分析。可以让 NetBeans 使用 JMX 连接到远程 JVM。
JavaPassion 站点上的演示文稿提供了一些关于如何开始的指示。
我看了几个,最喜欢YourKit。
它是迄今为止最容易使用的,并且与 JMX 配合得很好。
嗯...实际上,VisualVM 有一个出色的内存分析器,它不仅可以告诉您哪些对象占用了您的内存,还可以告诉您(可能是无意中)引用它们的位置。
只需按下监视器选项卡上的“堆转储”按钮,就会感到惊讶!