VisualVM 下载、性能分析及调优教程
VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态的性能分析。同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。
介绍

在搞大型Java应用的过程中,总会碰到些内存泄露啊,性能瓶颈啊这些麻烦事,就比如文件、网络、数据库连接搞得不释放,或者一些算法没优化咋的。你说持续运行,系统效率就会一路下降,严重了还得系统炸。所以,为了搞清楚这些隐藏的瑕疵,一般项目开发后期都得靠性能分析工具来测性能和优化。

那个啥,VisualVM就是个免费的性能分析工具。它可从程序运行时获得实时数据,用了jvmstat、JMX、SA(Serviceability Agent)和Attach API等多种方式,让咱动态分析性能。更妙的是,它还能自己挑最快最轻的技术,尽量别影响应用程序,提高分析准确性。

这篇文章主要就是得来一遍介绍VisualVM的功能,然后探讨咋用数据来搞性能分析和优化。

下载VisualVM

VisualVM下载链接: https://pan.quark.cn/s/a7455ec3dddd

提取码见下方

反爬虫抓取,人机验证,请输入验证码查看内容:

验证码:

请关注本站公众号回复关键字:“2024”,获取验证码。

【注】微信搜索公众号:“Python技术迷”或者“pythonjsm” 或微信扫描右侧二维码关注微信公众号

img

背景概念

性能分析啥招式

  • 监视:就是看应用程序跑时候的行为。多个视图实时显示CPU、内存、线程状态啥的,方便快速找问题。
  • 转储:分析工具从内存获取当前状态数据,存文件做静态分析。比如有三种转储:
    • 系统转储:JVM弄的本地系统转储,也叫核心转储。数据量大,得用平台工具分析,比如Windows上的windbg和Linux上的gdb。
    • Java转储:JVM内部弄的格式化数据,包括线程、类加载和堆数据。通常也是用来查死锁。
    • 堆转储:JVM把所有对象堆内容存文件。
  • 快照:程序启动后,性能分析工具开始搜集各种运行时数据。部分显示在监视视图,其他保存在内部,等你要时再拿出来看。有CPU快照和内存快照两种。

安装VisualVM

VisualVM是性能分析工具,自JDK 6 Update 7起,就跟Oracle JDK一起了,就在JDK根目录的bin文件夹。得在JDK6以上版本运行,但能监控1.4以上版本的应用程序。下面得说说怎么装VisualVM和它的插件。

装VisualVM

VisualVM官网提供英文版和多语言支持版下载。多语言版支持英语、日语和中文。下载装多语言版,系统语言环境就装对应语言。新版VisualVM支持的系统有:Windows (7, Vista, XP, Server)、Linux、Sun Solaris、Mac OS X、HP-UX 11i。这篇文章是以Windows XP为例装中文版的。

  • 到VisualVM官网下装程序。
  • 解压到本地系统。
  • 找到VisualVM安装目录的bin文件夹,然后开启jvisualvm.exe。

装VisualVM插件

VisualVM插件中心有好多插件给VisualVM加功能。可以通过VisualVM装,或者从插件中心手动下再离线装。也能用下载的插件分发文件 (.nbm文件 )来装第三方插件。

装插件的步骤:

  • 主菜单选择“工具”>“插件”。
  • 在“可用插件”里,选中要装的插件的“安装”复选框。点“安装”。
  • 一步步装插件。

详解功能

接下来得介绍下性能分析的几种方式和怎么用VisualVM来分析。

内存分析

VisualVM能检测JVM中的类和对象信息,帮咱分析内存用啥情况。可以用监视和Profiler标签做内存分析。

监视标签,看实时应用程序内存堆和永久保留区情况。

VisualVM3

永久保留区域用啥情况也能看。

VisualVM4

还能右键应用程序节点开个“在出现OOME时生成堆Dump”的功能,就是应用程序出现OutOfMemory例外时,VisualVM自己生成一个堆转储。

Profiler标签,点“内存”按钮开个内存分析,等VisualVM搜集数据,结果就会出来。通过这个结果,能看哪些对象用了多的内存、存活时间长啥的,方便做优化。

CPU分析

VisualVM能监控应用程序一段时间的CPU使用情况,显示使用率、方法执行效率和频率啥的数据,帮助发现性能问题。监视和Profiler标签可以用来做CPU性能分析。

监视标签里看CPU使用率和垃圾回收对性能的影响。CPU使用率高可能有低效代码,Profiler标签的CPU性能分析就能仔细分析。如果垃圾回收太勤,占用了高CPU资源,可能是内存不足或者新生代和旧生代分配不对。

Profiler标签里点“CPU”按钮开个CPU性能分析,VisualVM会检测应用程序所有的被调用方法,搞个方法执行时间和次数的统计。

线程分析

Java支持多线程应用程序。调试或者优化时,往往要了解所有线程运行状态、有没死锁、热锁啥的,分析系统问题。

监视标签里能看活动线程数量。

VisualVM9

VisualVM的线程标签有三种视图,默认是时间线的。还有表视图和详细信息视图。

快照功能

VisualVM的快照功能能生成性能分析快照,辅助性能分析。快照一旦生成,可以在任何时候离线打开和查看,也能分享。

有两种快照:

  • Profiler快照:在性能分析会话(内存或CPU)进行时,点性能分析结果工具栏的“快照”按钮生成Profiler快照。
  • 应用程序快照:右键点击应用程序节点,选“应用程序快照”生成,包含堆转储、线程转储和Profiler快照。

转储功能

线程转储

VisualVM能对运行中的本地应用程序生成线程转储,打印活动线程的堆栈踪迹,帮助分析线程运行情况,诊断死锁、应用程序问题。

生成线程转储后,VisualVM显示新的线程转储标签。

VisualVM15

堆转储

VisualVM能生成堆转储,统计某一特定时刻JVM中对象信息,帮助分析对象引用关系、内存泄漏啥的情况。

生成堆转储后,VisualVM显示摘要、类、实例数等信息和OQL控制台执行查询语句功能。

堆转储摘要包含文件大小、路径和系统环境信息,也能显示所有线程信息。

VisualVM18

从类视图能看各类的实例数和占用堆大小数,分析内存使用情况。

VisualVM19

还能比较两个堆转储文件,分析哪些对象大量创建或销毁。

VisualVM22

线程转储和堆转储都能另存成文件,以便离线分析。

总结

这文就是简单介绍了性能分析的背景知识,然后走了VisualVM的下载安装,最后详细展开VisualVM的内存性能、CPU性能、快照功能和转储功能。相信通过这文,你对性能分析有了点了解,也会愿意用VisualVM来搞搞性能分析。

收藏成功
wx 官方微信群,扫码进群
订阅号
视频号
公众号 关注公众号,回复关键字python领取大厂最新面试题