
VisualVM_入门指南.pdf
23页1 | VisualVM 入门指南2009-12-9 2 | 修订历史:时间修订内容里程碑版本号修订人2009-12-9 初稿1.0.0 XXX 3 | 目 录1什么是Visual VM? . 4 1.1 Visual VM 简介 . 4 1.2 如何获取VisualVM. 4 2Visual VM 实战 . 5 2.1 开启 Visual VM 之旅 . 5 2.1.1 启动问题 . 5 2.1.2 界面简介 . 6 2.1.3 安装插件 . 6 2.1.4 监控本地 Java 应用 . 8 2.1.5 监控远程 Java 应用 . 8 2.2 使用 Visual VM 查看 JVM 相关信息 . 11 2.3 使用 Visual VM 解决内存溢出问题. 14 2.4 使用 Visual VM 查看 Tomcat 的线程状态 . 16 2.5 使用 Visual VM 查看 CPU消耗情况 . 20 4 | 1什么是Visual VM?1.1 Visual VM简介VisualVM 提供在 Java 虚拟机 (Java Virutal Machine, JVM) 上运行的Java 应用程序的详细信息。
在 VisualVM 的图形用户界面中,您可以方便、快捷地查看多个 Java 应用程序的相关信息摘自官方)简单说来,VisualVM 是一种集成了多个 JDK命令行工具的可视化工具, 它能为您提供强大的分析能力所有这些都是免费的!它囊括的命令行工具包括jstat, JConsole, jstack, jmap 和 jinfo,这些工具与 JDK的标准版本是一致的可以使用 VisualVM 生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU分析, 同时它还支持在 MBeans 上进行浏览和操作尽管 VisualVM自身要在 JDK6这个版本上运行,但是JDK1.4 以上版本的程序它都能监控对于我们来说,这些功能都是至关重要的以前大家可能会用YourKit 这样的付费软件来检测我的应用软件,但现在可以用VisualVM 这样一个开源工具来实现同样的功能了更何况,有谁比能Sun公司更了解 JVM呢?1.2 如何获取 VisualVM VisualVM 的一个最大好处就是,它已经在你的JDK bin 目录里了,只要你使用的是 JDK1.6 Update7 之后的版本点击一下jvisualvm.exe图标它就可以运行了。
这里是 VisualVM 的官方网站:https:/, 资料很全,同时提供 VisualVM 最近版本下载5 | 2Visual VM 实战2.1 开启 Visual VM之旅如果你使用的是 JDK是 1.6Update7 之后的版本,那么Visual VM 已经包含在 bin 目录下了,否则需要去官方下载,目前最新版本是1.2.1 2.1.1启动问题如果你在 windows上使用 Visual VM ,需要做的只是点一下jvisualvm.exe,就能启动它;绿色,好用但是Visual VM 所在的分区如果是NTFS 格式,那么第一个问题就出现了: sun 对 NTFS格式的硬盘支持有问题!但可通过参数可避免,并完成启动步骤如下:1.创建一个 visualvm.exe的快捷方式2.在“目标”中添加如下参数-XX:+PerfBypassFileSystemCheck 6 | 2.1.2界面简介Visual VM 启动成功!可以看到Visual VM 的界面了通过Visual VM 可以看到本机运行中的所有Java 应用你会发现根本不需要在VisualVM 里为 Java应用程序注册,它们就会自动显示出来。
甚至还可以在导航栏里查看到远程的Java 应用 导航栏即为 Applications, 其中分为 Local (本地 Java 应用) 和 Remote(远程的 Java 应用)2.1.3安装插件Visual VM 有很多好用的插件;而且 Sun为了推广 Visual VM , 还举办的 Visual VM插件开发大赛,一等奖奖金为2000刀,非常诱人如何安装插件呢?步骤如下:1.点击 Tools - Plugins 7 | 2.推荐安装全部插件8 | 2.1.4监控本地Java应用Visual VM本身就是一个 Java 应用,所以打开 Visual VM看到的第一个可监控应用就是 Visual VM本身;可以用它热热身,小试下牛刀在Visual VM可视化界面中可以监控到Visual VM 本身的内存使用情况、 线程情况、 Jvm启动参数、cpu 消耗情况、垃圾回收情况等很多参数当然如果在本地启一个Tomcat 一样可以看到这些参数, 可以方便我们在本地对JVM进行调优但是且接如果你是在windows下起应用,如果你的Java 应用是在 NTFS格式的盘附上,记得加参数:-XX:+PerfBypassFileSystemCheck 2.1.5监控远程Java应用监视远程 Java 应用稍微复杂些。
Visual VM 是通过 JMX来和远程 Java 应用联系的JMX :Java Management Extensions ,即 Java 管理扩展 , 是一个为应用程序、设备、系统等植入管理功能的框架JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议, 灵活的开发无缝集成的系统、 网络和服务管理应用下面以 192.168.0.249上的 tomcat 为例,叙述下监视远程 Java 应用的步骤如下:1.为 249 上的 tomcat 配置 jvm 启动参数在 tomcat 的 catalina.sh中添加如下参数:JAVA_OPTS= -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false 其中-Dcom.sun.management.jmxremote.port=8999指定了 JMX启动的代理端口;这个端口就是Visual VM 要连接的端口其中-Dcom.sun.management.jmxremote.ssl=false指定了 JMX是否启用ssl9 | 其中-Dcom.sun.management.jmxremote.port=8999指定了 JMX是否启用鉴权(需要用户名,密码鉴权)2.在 Visual VM 添加远程连接的 Host。
邮件点 Remote后点击 Add Remote Host3.添加 249 为需要监控的 Host 4.使用 JMX连接 249 的 8999 端口10 | 11 | 5.连接 JMX开始监控远程 Java 程序2.2 使用 Visual VM查看 JVM 相关信息Visual VM 可以将 JVM的基本信息显示出来基础信息包括:JVM的启动参数、JRE取得的系统参数 (系统参数是可以在Java 中使用 System拿到的)、JVM的能力参数他们坐落在Overview 试图内12 | 1.JVM的启动参数13 | 2.JRE取得的系统参数14 | 3.JVM的能力参数2.3 使用 Visual VM解决内存溢出问题最近公司的 Java 应用出现了 Perm溢出的问题,我们可以用Visual VM来诊断下将程序部署到249 上之后通过 JMX运程访问;之后观察Monitor 视图15 | 如上图所示, PermGen 在程序运行一段时间后超出了我们指定的128MB ,通过 Classes 视图看到, Java 在运行的同时加载了大量的类到内存中PermGen会存储 Jar 或者 Class 的描述信息;所以在 class 大量增加的同时 PermGen 超出了我们指定的范围。
为了让应用稳定, 我们需要探寻新的PermGen 范围检测时段时候后(如下图) 发现 PermGen 在 145MB左右稳定,那么我们就得到了稳定的新参数;这样 PermGen 内存溢出的问题得到解决16 | 2.4 使用 Visual VM查看 Tomcat 的线程状态通过 Visual VM 可以检测到线程情况,这个东西在压力测试的时候特别好用如果线程发生问题可以马上看出来,下面我们以一个正常运行的tomcat 为例介绍下如何使用 Visual VM 观测 Thread 17 | 1. 一个用户访问 tomcat 线程18 | 2. 用户沉默了19 | 3. 用户经常访问 tomcat 20 | 4. 访问情况统计2.5 使用 Visual VM查看 CPU消耗情况Visual VM 提供 CPU 监视功能,可以看到那些类消耗了CPU当应用耗费CPU 过高时,可以通过此功能对应用进行追踪并调查原因可以通过如下方式查看:21 | 1. 如何进入 CPU 视图22 | 2. 查看 CPU 视图23 | 3. 使用搜索功能,查看dheaven 相关的类。












