VisualVM 使用实例

标签: visualvm 实例 | 发表时间:2014-04-30 14:42 | 作者:baorui945
出处:http://www.iteye.com

VisualVM概述

VisualVM 是一款免费的性能分析工具。监控程序运行的实时数据,从而进行动态的性能分析。同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。

 

知识点:

转储:性能分析工具从内存中获得当前状态数据并存储到文件用于静态的性能分析。

1     系统转储:JVM 生成的本地系统的转储,又称作核心转储。一般的,系统转储数据量大,需要平台相关的工具去分析,如 Windows 上的 windbg 和 Linux 上的 gdb。

2     Java 转储:JVM 内部生成的格式化后的数据,包括线程信息,类的加载信息以及堆的统计数据。通常也用于检测死锁。

3     堆转储:JVM 将所有对象的堆内容存储到文件。

 

快照:应用程序启动后,性能分析工具开始收集各种运行时数据,其中一些数据直接显示在监视视图中,而另外大部分数据被保存在内部,直到用户要求获取快照,基于这些保存的数据的统计信息才被显示出来。快照包含了应用程序在一段时间内的执行信息

1     CPU 快照:主要包含了应用程序中函数的调用关系及运行时间,这些信息通常可以在 CPU 快照视图中进行查看。

2     内存快照:主要包含了内存的分配和使用情况、载入的所有类、存在的对象信息及对象间的引用关系等。这些信息通常可以在内存快照视图中进行查看。

 

性能分析:性能分析是通过收集程序运行时的执行数据来帮助开发人员定位程序需要被优化的部分,从而提高程序的运行速度或是内存使用效率

1     CPU 性能分析:CPU 性能分析的主要目的是统计函数的调用情况及执行时间,或者更简单的情况就是统计应用程序的 CPU 使用情况。通常有 CPU 监视和 CPU 快照两种方式来显示 CPU 性能分析结果。

2     内存性能分析:内存性能分析的主要目的是通过统计内存使用情况检测可能存在的内存泄露问题及确定优化内存使用的方向。通常有内存监视和内存快照两种方式来显示内存性能分析结果。

3     线程性能分析:线程性能分析主要用于在多线程应用程序中确定内存的问题所在。一般包括线程的状态变化情况,死锁情况和某个线程在线程生命期内状态的分布情况等

VisualVM部署

下载VisualVM安装程序,解压到本地目录,到bin目录中执行jvisualVM.exe

PS:

启动JvisualVM提示"无法检测到本地java应用程序"解决方式:

将tmp目录中的hsperfdata_userName文件夹设置到ntfs文件格式的分区下即可

查看方式:%TMP%然后设置环境变量到新的目录即可

VisualVM监控界面

VisualVM内存、CPU、线程监控

内存分析

VisualVM 通过检测 JVM 中加载的类和对象信息等帮助我们分析内存使用情况,我们可以通过 VisualVM 的监视标签和 Profiler 标签对应用程序进行内存分析



 

Java堆内存溢出

java.lang.OutOfMemoryError: Java heap space

    at java.util.Arrays.copyOf(Arrays.java:2760)

    at java.util.Arrays.copyOf(Arrays.java:2734)

    at java.util.ArrayList.ensureCapacity(ArrayList.java:167)

    at java.util.ArrayList.add(ArrayList.java:351)

    at com.hongdian.demo.oome.OOMObject.createOOME(OOMObject.java:12)

    at com.hongdian.demo.oome.OOMObject.main(OOMObject.java:21)

 

Java栈和本地方法栈溢出

Exception in thread "main" java.lang.StackOverflowError

at com.hongdian.demo.oome.StackOverflowError.stackLeak

(StackOverflowError.java:8)

at com.hongdian.demo.oome.StackOverflowError.stackLeak

(StackOverflowError.java:8)

 

 

 

CPU分析

VisualVM 能够监控应用程序在一段时间的 CPU 的使用情况,显示 CPU 的使用率、方法的执行效率和频率等相关数据帮助我们发现应用程序的性能瓶颈。



 

线程死锁

Java 语言能够很好的实现多线程应用程序。当我们对一个多线程应用程序进行调试或者开发后期做性能调优的时候,往往需要了解当前程序中所有线程的运行状态,是否有死锁从而分析系统可能存在的问题



 

 

线程死锁信息:DeadLock.java(网络转载)

Found one Java-level deadlock:

=============================

"Thread-1":

  waiting to lock monitor 0x02abed0c (object 0x22eda760, a baor.test.thread.Resource),

  which is held by "Thread-0"

"Thread-0":

  waiting to lock monitor 0x02abeca4 (object 0x22eda770, a baor.test.thread.Resource),

  which is held by "Thread-1"

 

Java stack information for the threads listed above:

===================================================

"Thread-1":

       at baor.test.thread.MyThread2.run(MyThread2.java:17)

       - waiting to lock <0x22eda760> (a baor.test.thread.Resource)

       - locked <0x22eda770> (a baor.test.thread.Resource)

"Thread-0":

       at baor.test.thread.MyThread1.run(MyThread1.java:17)

       - waiting to lock <0x22eda770> (a baor.test.thread.Resource)

       - locked <0x22eda760> (a baor.test.thread.Resource)

 

Found 1 deadlock.

 

 

 

 

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [visualvm 实例] 推荐:

VisualVM 使用实例

- - 开源软件 - ITeye博客
VisualVM 是一款免费的性能分析工具. 监控程序运行的实时数据,从而进行动态的性能分析. 同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度. 转储:性能分析工具从内存中获得当前状态数据并存储到文件用于静态的性能分析. 1     系统转储:JVM 生成的本地系统的转储,又称作核心转储.

使用Java VisualVM监控远程JVM

- - 互联网 - ITeye博客
我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具, 相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualVM就是不错的监控工具. 这个工具就在JAVA_HOME\bin\目录下的jvisualvm.exe, 双击这个文件就能看到一个比较直观的界面.

使用Java VisualVM监控远程JVM

- - Java - 编程语言 - ITeye博客
我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具, 相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualVM就是不错的监控工具. 这个工具就在JAVA_HOME\bin\目录下的jvisualvm.exe, 双击这个文件就能看到一个比较直观的界面.

使用 VisualVM 进行性能分析及调优

- - Java - 编程语言 - ITeye博客
使用 VisualVM 进行性能分析及调优. VisualVM 是一款免费的\集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优. 这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作.

使用VisualVM来监控包装为windows服务的java程序

- - BlogJava-首页技术区
java wrapper是一个可以用于将java应用程序包装成windows服务的工具. 并且可以通过简单的配置来允许使用visualVM进行监控. 在wrapper.conf中添加如下3行. wrapper.java.additional.1=-Dcom.sun.management.jmxremote.port=9898 #这里的端口号可以自行选择.

JVM性能调优监控工具专题二:VisualVM基本篇之监控JVM内存,CPU,线程

- - ITeye博客
        上一个专题中讲述了JVM中自带的各种性能测试的小工具:包括jps,jstatck,jmap,jhat,jsats,hprof.         这样会造成不必要的麻烦,难道就没有一个tool可以 包括如上所有的功能. 答案是有的,自从 JDK 6 Update 7以后,提供了一全新的性能检测工具:VisualVM,VisualVM对运行中的Java应用提供了可视化的信息展示, 它是很多工具的整合包,整合了JConsole,jstat,jinfo,jstack以及jmap.

JVM性能调优监控工具专题三:VisualVM基本篇之快照分析、监控GC、Eclipse集成

- - 行业应用 - ITeye博客
上一个专题专门举例说明了使用VisualVM进行远程监控以及对Tomcat的远程监控,如果有兴趣,可以查看:. 该专题将讲解如何使用VisualVM生成快照、以及如何对JVM的GC进行监控,最后举例说明如何将VisualVM和eclipse进行集成. 我们可以使用 VisualVM 的快照功能生成任意个性能分析快照并保存到本地来辅助我们进行性能分析.

[原]Dubbo实例

- -
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. Remoting: 网络通信框架,实现了sync-over-async 和 request-response 消息机制. RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能. Registry: 服务目录框架用于服务的注册和服务事件发布和订阅.

学习AngularJS实例

- - Web前端 - ITeye博客
怎么样快速学习AngularJS. 相信很多初学者都有过或者类似的疑问,其实这个问题没有标准的答案,每个人的技术背景、工作经验等等都不经相同,所以学习AngularJS的切入点肯定也就不同,我之前初略使用过knockoutjs,当我第一眼看到AngularJS的Helloworld案例后,顿时就被声明式的语法和强大的双向绑定特性所吸引.

Kafka编程实例

- - CSDN博客云计算推荐文章
    Producer是一个应用程序,它创建消息并发送它们到Kafka broker中. 这些producer在本质上是不同. 比如,前端应用程序,后端服务,代理服务,适配器对于潜在的系统,Hadoop对于的Producer. 这些不同的Producer能够使用不同的语言实现,比如java、C和Python.