Tag: 监控

使用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提供的工具进行分析。 我怎样才能做到这一点?

测量代码段的Java执行时间,内存使用和CPU负载

对于特定的Java代码段,我想测量: 执行时间(很可能是线程执行时间 ) 内存使用情况 CPU负载(特别是可归因于代码段) 我是相对Java的新手,并不熟悉如何实现这一点。 我已经被提到了JMX ,但是我不确定如何使用JMX,JMX看起来有点“重”我正在做什么。 理想情况下,我想要一些可以告诉我想测量的测量类,可以选择在代码段之前调用start()方法,然后调用stop()方法。 相关指标将记录到我指定的文件中。 例如: import com.example.metricLogger; metricLogger logger = new metricLogger(); logger.setLogPath(pathToLogFile); logger.monitor(executionTime); logger.monitor(memoryUsage); logger.monitor(cpuLoad); logger.start(); /* Code to be measured */ logger.stop(); 在Java中是否有任何标准/通用/传统方式来实现这一目标? 这些测量用于一次性性能比较,因此我不会寻找任何生产中的长期监测过程。 我很高兴被引用到教程或外部示例,并且不希望在这里得到完整答案。 也就是说,如果能够实现上述任何简单的事情,那么一个现实的例子就会非常顺利。