我想为我在unix上运行的独立Java程序设置一个内存泄漏问题。我有端口和参数设置,以便我可以使用带JConsole或VisualVM的JMX连接到它。是否有Java的远程分析器? (最好使用JMX)
这些帮助一点点,但不幸的是,它不告诉你内存已经走了,它只告诉你有多少内存使用。我正在寻找更详细的探查器来帮助我找到正在消耗我的记忆的物体。有人有主意吗?最好在JMX端口上进行会谈,因此我不必重新配置程序。谢谢!
我想为我在unix上运行的独立Java程序设置一个内存泄漏问题。我有端口和参数设置,以便我可以使用带JConsole或VisualVM的JMX连接到它。是否有Java的远程分析器? (最好使用JMX)
这些帮助一点点,但不幸的是,它不告诉你内存已经走了,它只告诉你有多少内存使用。我正在寻找更详细的探查器来帮助我找到正在消耗我的记忆的物体。有人有主意吗?最好在JMX端口上进行会谈,因此我不必重新配置程序。谢谢!
NetBeans Java Profiler支持分析远程JVM。可以让NetBeans使用JMX连接到远程JVM。
A presentation available on the JavaPassion site提供了一些关于如何入门的指南。
呃......实际上,VisualVM有一个excellent memory profiler,它可以告诉你不只是哪些对象吃掉了你的记忆,而且还可以告诉你它们在哪里(可能是无意中)被引用。
只需按监视器选项卡上的“堆转储”按钮,并感到惊讶!
堆转储不适用于远程JVM – erotsppa 2009-09-23 20:05:33
嗯,这是一个耻辱。你不能在同一台机器上运行VisualVM吗? – 2009-09-23 20:10:04
在这种情况下,只需从命令行使用jmap来转储堆,然后在任何你想要的机器上分析它。 – 2009-09-23 21:06:06
如果有问题的机器已经安装了X11的客户端库,您使用Sun的Java 6u10中或更高版本的可达SSH服务器允许X11转发,在本地机器上运行X11服务器(也许http://sourceforge.net/projects/xming/) AND,你可以用ssh(-X或-Y)进入Linux机器,运行jvisualvm 那里,同时在你的本地机器上显示它的GUI界面。
在同一台机器上运行允许jvisualvm直接连接到正在运行的Java进程,而不是执行各种配置voodoo。
@erotsppa:你以前的问题似乎有很多好的答案。我可以建议你重新考虑它们,并在适当的地方接受最好的答案吗? – 2009-09-23 23:02:07