visualvm怎么使用对软件进行性能

&&国之画&&&& &&
版权所有 京ICP备号-2
迷上了代码!Java监控工具介绍,VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,Java - 软件开发 - 博客
微信扫一扫!
本网站从日开放,现已运行天。
热烈欢迎有相同爱好的朋友,希望大家能够多多推广!
攀岩、抱石、瑜伽、减肥、登山、徒步、IT、书法
敬请记住"雅痞风尚工作室"!技术支持QQ:
地址:沈阳市小北关街202巷小北二库加油站旁
详细信息请点击:性能分析神器VisualVM - 推酷
性能分析神器VisualVM
VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。本文主要介绍如何使用 VisualVM 进行性能分析及调优。
内存分析篇
内存堆Heap
永久保留区域PermGen
线程分析篇
自从 JDK 6 Update 7 以后已经作为 Oracle JDK 的一部分,位于 JDK 根目录的 bin 文件夹下,无需安装,直接运行即可。
内存分析篇
VisualVM 通过检测 JVM 中加载的类和对象信息等帮助我们分析内存使用情况,我们可以通过 VisualVM 的监视标签对应用程序进行内存分析。
1)内存堆Heap
首先我们来看内存堆Heap使用情况,我本机eclipse的进程在visualVM显示如下:
随便写个小程序占用内存大的,运行一下
程序如下:
package jvisualVM;
public class JavaHeapTest {
public final static int OUTOFMEMORY = ;
private int
StringBuffer tempOOM = new StringBuffer();
public JavaHeapTest(int leng) {
this.length =
int i = 0;
while (i & leng) {
tempOOM.append(&a&);
} catch (OutOfMemoryError e) {
e.printStackTrace();
this.oom = tempOOM.toString();
public String getOom() {
public int getLength() {
public static void main(String[] args) {
JavaHeapTest javaHeapTest = new JavaHeapTest(OUTOFMEMORY);
System.out.println(javaHeapTest.getOom().length());
查看VisualVM Monitor tab, 堆内存变大了
在程序运行结束之前, 点击Heap Dump 按钮, 等待一会儿,得到dump结果,可以看到一些Summary信息
点击Classes,& 发现char[]所占用的内存是最大的
双击它,得到如下Instances结果
Instances是按Size由大到小排列的
第一个就是最大的, 展开Field区域的 values
StringBuffer类型的 全局变量 tempOOM 占用内存特别大, 注意局部变量是无法通过 堆dump来得到分析结果的。
另外,对于“堆 dump”来说,在远程监控jvm的时候,VisualVM是没有这个功能的,只有本地监控的时候才有。
###转载注明出处:
2)永久保留区域PermGen
其次来看下永久保留区域PermGen使用情况
运行一段类加载的程序,代码如下:
package jvisualVM;
import java.io.F
import java.lang.reflect.M
import java.net.MalformedURLE
import java.net.URL;
import java.net.URLClassL
import java.util.ArrayL
import java.util.L
public class TestPermGen {
private static List&Object& insList = new ArrayList&Object&();
public static void main(String[] args) throws Exception {
permLeak();
private static void permLeak() throws Exception {
for (int i = 0; i & 1000; i++) {
URL[] urls = getURLS();
URLClassLoader urlClassloader = new URLClassLoader(urls, null);
Class&?& logfClass = Class.forName(&mons.logging.LogFactory&, true,urlClassloader);
Method getLog = logfClass.getMethod(&getLog&, String.class);
Object result = getLog.invoke(logfClass, &TestPermGen&);
insList.add(result);
System.out.println(i + &: & + result);
private static URL[] getURLS() throws MalformedURLException {
File libDir = new File(&C:/Users/wadexu/.m2/repository/commons-logging/commons-logging/1.1.1&);
File[] subFiles = libDir.listFiles();
int count = subFiles.
URL[] urls = new URL[count];
for (int i = 0; i & i++) {
urls[i] = subFiles[i].toURI().toURL();
一个类型装载之后会创建一个对应的java.lang.Class实例,这个实例本身和普通对象实例一样存储于堆中,我觉得之所以说是这是一种特殊的实例,某种程度上是因为其充当了访问PermGen区域中类型信息的代理者。
运行一段时间后抛OutOfMemoryError了, VisualVM监控结果如下:
结论:PermGen区域分配的堆空间过小,我们可以通过设置-XX: PermSize参数和-XX:MaxPermSize参数来解决。
关于PermGen OOM深入分析请参考这篇文章
关于Perform GC, 请参考
这部分知识还是比较深入的,有空还要继续研究。
###转载注明出处:
CPU 性能分析的主要目的是统计函数的调用情况及执行时间,或者更简单的情况就是统计应用程序的 CPU 使用情况。
没有程序运行时的 CPU 使用情况如下图:
运行一段 占用CPU 的小程序,代码如下
package jvisualVM;
public class MemoryCpuTest {
public static void main(String[] args) throws InterruptedException {
* cpu 运行固定百分比
* @throws InterruptedException
public static void cpuFix() throws InterruptedException {
// 80%的占有率
int busyTime = 8;
// 20%的占有率
int idelTime = 2;
// 开始时间
long startTime = 0;
while (true) {
// 开始时间
startTime = System.currentTimeMillis();
* 运行时间
while (System.currentTimeMillis() - startTime & busyTime) {
// 休息时间
Thread.sleep(idelTime);
查看监视页面 Monitor tab
过高的 CPU 使用率可能是由于我们的项目中存在低效的代码;
在我们对程序施压的时候,过低的 CPU 使用率也有可能是程序的问题。
点击取样器Sampler, 点击“CPU”按钮, 启动CPU性能分析会话,VisualVM 会检测应用程序所有的被调用的方法,
在CPU samples tab 下可以看到我们的方法cpufix() 的自用时间最长, 如下图:
切换到Thread CPU Time 页面下,我们的 main 函数这个进程 占用CPU时间最长, 如下图:
###转载注明出处:
线程分析篇
Java 语言能够很好的实现多线程应用程序。当我们对一个多线程应用程序进行调试或者开发后期做性能调优的时候,往往需要了解当前程序中所有线程的运行状态,是否有死锁、热锁等情况的发生,从而分析系统可能存在的问题。
在 VisualVM 的监视标签内,我们可以查看当前应用程序中所有活动线程(Live threads)和守护线程(Daemon threads)的数量等实时信息。
运行一段小程序,代码如下:
package jvisualVM;
public class MyThread extends Thread{
public static void main(String[] args) {
MyThread mt1 = new MyThread(&Thread a&);
MyThread mt2 = new MyThread(&Thread b&);
mt1.setName(&My-Thread-1 &);
mt2.setName(&My-Thread-2 &);
mt1.start();
mt2.start();
public MyThread(String name) {
public void run() {
while (true) {
Live threads 从11增加两个 变成13了
Daemon threads从8增加两个 变成10了
VisualVM 的线程标签提供了三种视图,默认会以时间线的方式展现, 如下图:
可以看到两个我们run的程序里启的线程:My-Thread-1 和&My-Thread-2
另外还有两种视图分别是表视图和详细信息视图, 这里看一下每个Thread的详细视图:
###转载注明出处:
再来一段死锁的程序,看VisualVM 能否分析出来
package jvisualVM;
public class DeadLock {
public static void main(String[] args) {
Resource r1 = new Resource();
Resource r0 = new Resource();
Thread myTh1 = new LockThread1(r1, r0);
Thread myTh0 = new LockThread0(r1, r0);
myTh1.setName(&DeadLock-1 &);
myTh0.setName(&DeadLock-0 &);
myTh1.start();
myTh0.start();
class Resource {
private int
public int getI() {
public void setI(int i) {
class LockThread1 extends Thread {
private Resource r1, r2;
public LockThread1(Resource r1, Resource r2) {
this.r1 = r1;
this.r2 = r2;
public void run() {
int j = 0;
while (true) {
synchronized (r1) {
System.out.println(&The first thread got r1's lock & + j);
synchronized (r2) {
System.out.println(&The first thread got r2's lock
class LockThread0 extends Thread {
private Resource r1, r2;
public LockThread0(Resource r1, Resource r2) {
this.r1 = r1;
this.r2 = r2;
public void run() {
int j = 0;
while (true) {
synchronized (r2) {
System.out.println(&The second thread got r2's lock
synchronized (r1) {
System.out.println(&The second thread got r1's lock& + j);
打开VisualVM检测到的JVM进程,我们可以看到这个tab在闪,VisualVM已经检测到我这个package下面的DeadLock类出错了
切换到Thread tab, 可以看到死锁了, Deadlock detected!
另外可以点击Thread Dump 线程转储,进一步分析,在这里就不赘述了,有兴趣的读者可以自行实验。
参考文献:
/developerworks/cn/java/j-lo-visualvm/
通过本文的介绍,相信读者已经对性能分析有一个初步的了解了,如果您觉得本文的内容对您的学习有所帮助,您可以点击右下方的推荐按钮,您的鼓励是我创作的动力。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致利用VisualVM排除应用性能故障
>如果尚未听说过VisualVm,可以去看看和J2EE应用性能。
>VisualVM是监视您Java/J2EE应用程序性能最好的免费工具之一。如果您尝试使用MyEclipse的VisualVM,你将不得不从30美元的基本许可证升级!但是,如果按照下文所述的步骤,将解释如何免费实现该目的。
>没有多少人用它,但它肯定对你更深入的了解您的应用(程序)和定位问题域有所帮助。我们的目标是确定应用的内存异常并查明原因。
>在本文章中,将讨论有关VisualVM在Eclipse的配置以及如何监视应用。将启动一个Web应用并运行visualVM监测该应用。
>1.VisualVM是什么
>Java管理扩展(JMX)已经自JDK 5.0起成为Java的有机组成部分。JMX使得开发者可获取JVM的所有相关信息。VisualVM信息是一个可视化工具,与一些JDK的命令行工具相集成,提供强大的分析能力。VisualVM使用JMX和为您提供有关JVM内存、CPU使用率、垃圾回收的详细信息;也可以专为本地JVM的中对象对 CPU和内存的使用提供建议。
>更多信息详见。
2.安装VisualVM
word-spacing: 0 -webkit-text-decorations-in-effect: -webkit-text-size-adjust: -webkit-text-stroke-width: 0px">Visualvm与JDK安装包捆绑(自JDK1.6 update7始)。另外,您可以访问下载VisualVM。
>安装完毕,进入&安装目录&/bin并点击visualvm.exe,将启动VisualVM。
>3.配置Tomcat
>由于将要分析Web应用,需配置Tomcat来配合VisualVM运行,要加入一些参数以使用Tomcat的JMX。
>在catalina.bat(或catalina.sh)中修改Java_OPTS(以Tomcat 6.0.16为例):
>-Dcom.sun.management.jmxremote =true
>-Dcom.sun.management.jmxremote.port=909
>-Dcom.sun.management.jmxremote.ssl=false
>-Dcom.sun.management.jmxremote.authenticate=false
>JAVA_OPTS如同下述:
>Set JAVA_OPTS=%JAVA_OPTS%-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=&%CATALINA_BASE%\conf\logging.properties& -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
>4.VisualVM连接Tomcat
>启动Tomcat以及VisualVM。在VisualVM中,选择本地(local)或远程(remote)(方式)。如Tomcat与VisualVM在同一台计算机上运行,单击本地(local),并设置参数。
>图:VisualVM连接到Tomcat
>5.在Eclipse中使用VisualVM
>图:Eclipse中的VisualVM
>6.问题识别
>VisualVM启动后,可窥视应用内发生的事情,并识别问题的根源、堆大小和连接池等。
>下图是用Visual VM监视的应用(程序)信息。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'1758人阅读
JAVA技术(34)
开发大型 Java 应用程序的过程中难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃。为了找出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化。
VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态的性能分析。同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。
本文将对 VisualVM 的主要功能逐一介绍并探讨如何利用获得的数据进行性能分析及调优。
监视:监视是一种用来查看应用程序运行时行为的一般方法。通常会有多个视图(View)分别实时地显示 CPU 使用情况、内存使用情况、线程状态以及其他一些有用的信息,以便用户能很快地发现问题的关键所在。转储:性能分析工具从内存中获得当前状态数据并存储到文件用于静态的性能分析。Java 程序是通过在启动 Java 程序时添加适当的条件参数来触发转储操作的。它包括以下三种:
系统转储:JVM 生成的本地系统的转储,又称作核心转储。一般的,系统转储数据量大,需要平台相关的工具去分析,如 Windows 上的 windbg 和 Linux 上的 gdb。Java 转储:JVM 内部生成的格式化后的数据,包括线程信息,类的加载信息以及堆的统计数据。通常也用于检测死锁。堆转储:JVM 将所有对象的堆内容存储到文件。
快照:应用程序启动后,性能分析工具开始收集各种运行时数据,其中一些数据直接显示在监视视图中,而另外大部分数据被保存在内部,直到用户要求获取快照,基于这些保存的数据的统计信息才被显示出来。快照包含了应用程序在一段时间内的执行信息,通常有 CPU 快照和内存快照两种类型。
CPU 快照:主要包含了应用程序中函数的调用关系及运行时间,这些信息通常可以在 CPU 快照视图中进行查看。内存快照:主要包含了内存的分配和使用情况、载入的所有类、存在的对象信息及对象间的引用关系等。这些信息通常可以在内存快照视图中进行查看。
性能分析:性能分析是通过收集程序运行时的执行数据来帮助开发人员定位程序需要被优化的部分,从而提高程序的运行速度或是内存使用效率,主要有以下三个方面:
CPU 性能分析:CPU 性能分析的主要目的是统计函数的调用情况及执行时间,或者更简单的情况就是统计应用程序的 CPU 使用情况。通常有 CPU 监视和 CPU 快照两种方式来显示 CPU 性能分析结果。内存性能分析:内存性能分析的主要目的是通过统计内存使用情况检测可能存在的内存泄露问题及确定优化内存使用的方向。通常有内存监视和内存快照两种方式来显示内存性能分析结果。线程性能分析:线程性能分析主要用于在多线程应用程序中确定内存的问题所在。一般包括线程的状态变化情况,死锁情况和某个线程在线程生命期内状态的分布情况等
VisualVM 是一个性能分析工具,自从 JDK 6 Update 7 以后已经作为 Oracle JDK 的一部分,位于 JDK 根目录的 bin 文件夹下。VisualVM 自身要在 JDK6 以上的版本上运行,但是它能够监控 JDK1.4 以上版本的应用程序。下面主要介绍如何安装 VisualVM 以及各种 VisualVM 上的插件。
VisualVM 项目的官方网站目前提供英文版本和多语言支持版本下载。多语言版本主要支持英语、日语以及中文三种语言。如果下载安装多语言版本的 VisualVM,安装程序会依据操作系统的当前语言环境去安装相应 VisualVM 的语言版本。最新 VisualVM 版本主要支持的操作系统包括:Microsoft Windows (7, Vista, XP, Server)、Linux、Sun Solaris、Mac OS X、HP-UX 11i。本文以 Microsoft Windows XP 为安装环境并支持中文。
VisualVM 安装程序。将 VisualVM 安装程序解压缩到本地系统。导航至 VisualVM 安装目录的 bin 目录,然后启动 jvisualvm.exe。
提供很多插件以供安装向
VisualVM 添加功能。可以通过 VisualVM 应用程序安装,或者从&手动下载插件,然后离线安装。另外,用户还可以通过下载插件分发文件
(.nbm 文件 ) 安装第三方插件为 VisualVM 添加功能。
从 VisualVM 插件中心安装插件安装步骤 :
从主菜单中选择“工具”&“插件”。在“可用插件”标签中,选中该插件的“安装”复选框。单击“安装”。逐步完成插件安装程序。
根据 .nbm 文件安装第三方插件安装步骤 :
从主菜单中选择“工具”&“插件”。在“已下载”标签中,点击&添加插件&按钮,选择已下载的插件分发文件 (.nbm) 并打开。选中打开的插件分发文件,并单击&安装&按钮,逐步完成插件安装程序。
下面我们将介绍性能分析的几种常见方式以及如何使用 VisualVM 性能分析工具进行分析。
VisualVM 通过检测 JVM 中加载的类和对象信息等帮助我们分析内存使用情况,我们可以通过 VisualVM 的监视标签和 Profiler 标签对应用程序进行内存分析。
在监视标签内,我们可以看到实时的应用程序内存堆以及永久保留区域的使用情况。
此外,我们也可以通过 Applications 窗口右击应用程序节点来启用“在出现 OOME 时生成堆 Dump”功能,当应用程序出现 OutOfMemory 例外时,VisualVM 将自动生成一个堆转储。
在 Profiler 标签,点击“内存”按钮将启动一个内存分析会话,等 VisualVM 收集和统计完相关性能数据信息,将会显示在性能分析结果。通过内存性能分析结果,我们可以查看哪些对象占用了较多的内存,存活的时间比较长等,以便做进一步的优化。
此外,我们可以通过性能分析结果下方的类名过滤器对分析结果进行过滤。
VisualVM 能够监控应用程序在一段时间的 CPU 的使用情况,显示 CPU 的使用率、方法的执行效率和频率等相关数据帮助我们发现应用程序的性能瓶颈。我们可以通过 VisualVM 的监视标签和 Profiler 标签对应用程序进行 CPU 性能分析。
在监视标签内,我们可以查看 CPU 的使用率以及垃圾回收活动对性能的影响。过高的 CPU 使用率可能是由于我们的项目中存在低效的代码,可以通过 Profiler 标签的 CPU 性能分析功能进行详细的分析。如果垃圾回收活动过于频繁,占用了较高的 CPU 资源,可能是由内存不足或者是新生代和旧生代分配不合理导致的等。
在 Profiler 标签,点击“CPU”按钮启动一个 CPU 性能分析会话 ,VisualVM 会检测应用程序所有的被调用的方法。当进入一个方法时,线程会发出一个“method entry”的事件,当退出方法时同样会发出一个“method exit”的事件,这些事件都包含了时间戳。然后 VisualVM 会把每个被调用方法的总的执行时间和调用的次数按照运行时长展示出来。
此外,我们也可以通过性能分析结果下方的方法名过滤器对分析结果进行过滤。
Java 语言能够很好的实现多线程应用程序。当我们对一个多线程应用程序进行调试或者开发后期做性能调优的时候,往往需要了解当前程序中所有线程的运行状态,是否有死锁、热锁等情况的发生,从而分析系统可能存在的问题。
在 VisualVM 的监视标签内,我们可以查看当前应用程序中所有活动线程和守护线程的数量等实时信息。
VisualVM 的线程标签提供了三种视图,默认会以时间线的方式展现。另外两种视图分别是表视图和详细信息视图。
时间线视图上方的工具栏提供了缩小,放大和自适应三个按钮,以及一个下拉框,我们可以选择将所有线程、活动线程或者完成的线程显示在视图中。
我们在详细信息视图中不但可以查看所有线程、活动线程和结束的线程的详细数据,而且也可以查看某个线程的详细情况。
我们可以使用 VisualVM 的快照功能生成任意个性能分析快照并保存到本地来辅助我们进行性能分析。快照为捕获应用程序性能分析数据提供了一个很便捷的方式因为快照一旦生成可以在任何时候离线打开和查看,也可以相互传阅。
VisualVM 提供了两种类型的快照:
Profiler 快照:当有一个性能分析会话(内存或者 CPU)正在进行时,我们可以通过性能分析结果工具栏的“快照”按钮生成 Profiler 快照捕获当时的性能分析数据。
应用程序快照:我们可以右键点击左侧 Applications 窗口中应用程序节点,选择“应用程序快照”为生成一个应用程序快照。应用程序快照会收集某一时刻的堆转储,线程转储和 Profiler 快照,同时也会捕获 JVM 的一些基本信息。
VisualVM 能够对正在运行的本地应用程序生成线程转储,把活动线程的堆栈踪迹打印出来,帮助我们有效了解线程运行的情况,诊断死锁、应用程序瘫痪等问题。
当 VisualVM 统计完应用程序内线程的相关数据,会把这些信息显示新的线程转储标签。
VisualVM 能够生成堆转储,统计某一特定时刻 JVM 中的对象信息,帮助我们分析对象的引用关系、是否有内存泄漏情况的发生等。
当 VisualVM 统计完堆内对象数据后,会把堆转储信息显示在新的堆转储标签内,我们可以看到摘要、类、实例数等信息以及通过 OQL 控制台执行查询语句功能。
堆转储的摘要包括转储的文件大小、路径等基本信息,运行的系统环境信息,也可以显示所有的线程信息。
从类视图可以获得各个类的实例数和占用堆大小数,分析出内存空间的使用情况,找出内存的瓶颈,避免内存的过度使用。
通过实例数视图可以获得每个实例内部各成员变量的值以及该实例被引用的位置。首先需要在类视图选择需要查看实例的类。
此外,还能对两个堆转储文件进行比较。通过比较我们能够分析出两个时间点哪些对象被大量创建或销毁。
线程转储和堆转储均可以另存成文件,以便进行离线分析。
本文首先简要列举了一些性能分析相关的背景知识。然后介绍了 VisualVM 的下载和安装。最后从内存性能、CPU 性能、快照功能以及转储功能四个方面展开,进一步说明了如何使用 VisualVM 进行性能分析。通过本文的介绍,相信读者对性能分析会有一定的了解,并可以利用 VisualVM 进行性能分析。
在&上存在很多
VisualVM 相关文档和介绍
&在其文章“”(developerWorks,
2010 年 8 月)中展示了 Java 性能监控的 5 个技巧。
:这里有数百篇关于 Java 编程各个方面的文章。
加入&。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。
转载地址:/developerworks/cn/java/j-lo-visualvm/
下面是使用JXM协议配置的简单的操作步骤,详细内容可以阅读文章后的参考资料。
1.远程主机
(1)修改JMX服务的配置文件:
  在JDK的根目录/jre/lib/management中,将jmxremote.password.template另存为jmxremote.password。
用文件编辑软件按编辑jmxremote.password去掉
  # monitorRole QED
  # controlRole R&D
  前面的#注释,保存。
  如果当前系统属于AIX、Linux或者Solaris系统还需要更改jmxremote.access和jmxremote.password的权限
为只读写,命令如下
  chmod 600 jmxremote.access jmxremote.password
(2)修改JVM的启动配置信息:
Windows系统
set JAVA_OPTS=-Dcom.sun.management.jmxremote.port=&port& -Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=&hostname&
-Dcom.sun.management.jmxremote.ssl=false
AIX、Linux或者Solaris
export JAVA_OPTS=&-Dcom.sun.management.jmxremote.port=&port& -Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=&hostname&&&
-Dcom.sun.management.jmxremote.ssl=false&
set JAVA_OPTS=-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.1.24
-Dcom.sun.management.jmxremote.ssl=false
配置的说明如下:
-Dcom.sun.management.jmxremote.port&&&& &&&&&&&&&&&&&&&&&&&&& 远程主机端口号的
-Dcom.sun.management.jmxremote.ssl=false&&&&&&&&&&&&&&&&&& 是否使用SSL连接
-Dcom.sun.management.jmxremote.authenticate=false&& 是否开启远程服务权限
-Djava.rmi.server.hostname&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 远程主机名,使用IP地址
(3)重启服务。
2.本地主机配置
  进入&JDK_HOME&\bin目录,启动JConsole命令行工具。在JConsole的新连接中添加运程计算机信息。
&hostname&:&port&或者service:jmx:&protocol&:&sap&
例如:192.168.1.24:1099或者service:jmx:rmi:///jndi/rmi://192.168.1.24:1099&
  &hostname& 检测服务器IP地址
  &port&&&&& 运程主机端口&
  JDK 1.6以上版本包含了一个简单版本的jvisualvm.exe。在Remote上右键菜单中选择Add Remote host,输入运程计算机Host name,实际上就是要检测的远程计算机IP地址。在配置好的远程主机上右键选择Add JMX Connection...,按照方法一中要求的格式输入,远程主机信息。
[Java VisualVM 入门指南]
[Java VisualVM quickstart]
[Monitoring WASCE in JConsole][主要参考]
[JDK中还藏着一个宝贝 它的名字叫做VisualVM]
[JVM内存监控:visualVM]
sun 关于Java VisualVM的说明文档
visualvm的下载地址如下:
下载地址:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:230598次
积分:1709
积分:1709
排名:第18192名
原创:14篇
转载:45篇
评论:22条
(1)(2)(1)(1)(1)(1)(3)(14)(2)(4)(2)(1)(2)(7)(2)(8)(4)(4)

我要回帖

更多关于 visualvm 的文章

 

随机推荐