2009-09-23 29 views
3

我想为我在unix上运行的独立Java程序设置一个内存泄漏问题。我有端口和参数设置,以便我可以使用带JConsole或VisualVM的JMX连接到它。是否有Java的远程分析器? (最好使用JMX)

这些帮助一点点,但不幸的是,它不告诉你内存已经走了,它只告诉你有多少内存使用。我正在寻找更详细的探查器来帮助我找到正在消耗我的记忆的物体。有人有主意吗?最好在JMX端口上进行会谈,因此我不必重新配置程序。谢谢!

+0

@erotsppa:你以前的问题似乎有很多好的答案。我可以建议你重新考虑它们,并在适当的地方接受最好的答案吗? – 2009-09-23 23:02:07

回答

0

我看了几个,最喜欢YourKit

这是迄今为止最容易使用并且与JMX一起使用的最佳工具。

+0

我刚刚下载了Yourkit,它不适用于JMX。它需要我单独做手动设置,这是无证的,非常困难! – erotsppa 2009-09-24 02:31:25

+0

对不起,您无法使用JMX工作。 – 2009-09-24 05:30:32

+0

你可以给我一些关于如何与JMX连接的指针吗?这不可能吗? – erotsppa 2009-09-24 13:50:38

0

呃......实际上,VisualVM有一个excellent memory profiler,它可以告诉你不只是哪些对象吃掉了你的记忆,而且还可以告诉你它们在哪里(可能是无意中)被引用。

只需按监视器选项卡上的“堆转储”按钮,并感到惊讶!

+0

堆转储不适用于远程JVM – erotsppa 2009-09-23 20:05:33

+0

嗯,这是一个耻辱。你不能在同一台机器上运行VisualVM吗? – 2009-09-23 20:10:04

+0

在这种情况下,只需从命令行使用jmap来转储堆,然后在任何你想要的机器上分析它。 – 2009-09-23 21:06:06

3

如果有问题的机器已经安装了X11的客户端库,您使用Sun的Java 6u10中或更高版本的可达SSH服务器允许X11转发,在本地机器上运行X11服务器(也许http://sourceforge.net/projects/xming/) AND,你可以用ssh(-X或-Y)进入Linux机器,运行jvisualvm 那里,同时在你的本地机器上显示它的GUI界面。

在同一台机器上运行允许jvisualvm直接连接到正在运行的Java进程,而不是执行各种配置voodoo。