Tag: jvisualvm

Java 6是否为JMX远程连接打开了默认端口?

我的具体问题与JDK 1.6中使用的JMX有关:如果我使用JRE 1.6运行Java进程 com.sun.management.jmxremote 在命令行中,Java是否为远程JMX连接选择了一个默认端口? 背景故事:我目前正在尝试开发一个程序,让客户能够通过JMX从远程机器连接到我们的一个进程。 目标是实现对实时显示控制台上发生的情况的远程调试。 由于他们的服务级别协议,他们强烈有动力捕获尽可能多的数据,如果情况看起来太复杂,无法快速修复,重新启动显示控制台并允许它重新连接到服务器端。 我知道我可以在JDK 1.6进程上运行jconsole,在JDK 1.6.7进程上运行jvisualvm ,同时可以访问控制台。 但是,由于操作要求和涉及的人员问题,我们强烈要求远程获取我们需要的数据并重新启动和运行。 编辑:我知道命令行端口属性 com.sun.management.jmxremote.port=portNum 我想回答的问题是,如果你没有在命令行设置该属性,Java是否会选择另一个端口进行远程监控? 如果是这样,你怎么能确定它可能是什么?

使用JVisualVM从Java中的远程应用程序获取堆转储

我运行JVisualVM(Windows XP,Sun Java 1.6.0.13,32位客户端VM)来监视远程应用程序(Linux,Sun Java 1.6.0.07,64位服务器VM)。 在启动实际的远程应用程序之前,我使用all访问策略在远程计算机jstatd上启动: grant codebase “file:${java.home}/../lib/tools.jar” { permission java.security.AllPermission; }; 然后我使用命令行启动实际的应用程序 java -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=3333 compileTest.Main 从客户端计算机,我可以看到远程应用程序并监视它。 我也可以进行线程转储等。遗憾的是,堆转储按钮显示为灰色。 如何使用JVisualVM从远程监控的应用程序获取堆转储? 我尝试使用jConsole。 使用jConsole,可以使用com.sun.management.HotSpotDiagnostic dumpHeap操作进行远程堆转储。 我希望将转储传输到客户端并使用JVisualVM提供的工具进行分析。 我怎样才能做到这一点?

为什么是锯齿形图?

当我使用NetBeans运行下面提到的代码时,分配的堆大小图类似于锯齿形状。 我正在附加来自JVisualVM的屏幕截图,它显示了具有锯齿形状的堆分配图。 该程序是一个简单的无限循环打印“Hello,World!” 进入控制台。 public class HelloWorld { public static void main(String a[]){ while(true) { System.out.println(“Hello, World!”); } } } 任何人都可以解释使用堆图形状背后的原因吗? PS :即使我在不​​使用NetBeans的情况下运行它也会发生这种情况,因此它很可能与NetBeans无关…

如何使用visualvm查找内存泄漏

我怀疑我们的ActiveMQ连接桥有一个主要的内存泄漏 – 我们看到典型的内存泄漏模式(应用程序加载正常,如果长时间运行或在短时间内一次又一次地重新启动,则会减慢速度) 。 我查找了用于查找Java内存泄漏的现代最佳实践,许多开发人员似乎放弃了传统工具,如jhat / jmap,而不是新的(呃) jvisualvm 。 在启动此工具(并花了几个小时阅读其教程)后,我可以为CPU和内存获取探查器快照。 我现在只是陷入困境 – 如何分析这些快照来识别泄漏? 关于如何使用jvisualvm来生成快照,有很多关于如何使用jvisualvm生成快照的文档,但很少有关于如何真正理解它们的文档。 提前致谢。