VisualVM介绍VisualVM是一款免费的,集成了多个JDK命令行工具的可视化工具,它能为您提供强大的分析能力,对Java应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和CPU分析,同时它还支持在MBeans上进行浏览和操作。本文主要介绍如何使用VisualVM进行性能分析及调优。VisualVM位于{JAVA_HOME}/bin目录中。点击运行,效果如下:下面我们来看visualvm的各种功能查看jvm配置信息第一步:点击左边窗口显示正在运行的java进程第二步:点击右侧窗口“概述”,可以查看各种配置信息通过jdk提供的jinfo命令工
jconsole介绍JConsole(javamonitoringandmanagementconsole)是一款基于JMX的可视化监视和管理工具。启动JConsole点击JDK/bin目录下面的“jconsole.exe”即可启动然后会自动自动搜索本机运行的所有虚拟机进程选择其中一个进程可开始进行监控JConsole基本介绍JConsole基本包括以下基本功能:概述、内存、线程、类、VM概要、MBean运行下面的程序、然后使用JConsole进行监控;注意设置虚拟机参数packagecom.jvm.jconsole;importjava.util.ArrayList;importjava.u
jstack介绍jstack(stacktraceforjava)是java虚拟机自带的一种堆栈跟踪工具。jstack用于打印出给定的java进程ID或corefile或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式:jstack[-l]pid主要分为两个功能:针对活着的进程做本地的或远程的线程dump针对core文件做线程dumpjstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程
jhatjhat也是jdk内置的工具之一。主要是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言。使用jmap等方法生成java的堆文件后,使用其进行分析。示例:运行代码packagecom.jvm.test8;importlombok.*;importjava.util.ArrayList;importjava.util.List;importjava.util.UUID;importjava.util.concurrent.TimeUnit;publicclassTest8{@Getter@Setter@ToString@Bu
jmapjdk安装后会自带一些小工具,jmap命令(MemoryMapforJava)是其中之一。主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。jmap命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小等等。可以使用jmap生成HeapDump。如果不想使用jmap命令,要想获取Java堆转储快照还有一些比较“暴力”的手段:譬如在前面用过的-XX:+HeapDumpOnOutOfMemoryError参数,可以让虚拟机在OOM异常出现之后自动生成
jinfojinfo(ConfigurationInfoforJava)的作用是实时地查看和调整虚拟机的各项参数。使用jps-v可以查看虚拟机启动时显示指定的参数列表,但是如果想知道未被显示指定的参数的系统默认值,除了去找资料外,就只能使用jinfo的-flag选项进行查询了。[root@localhost~]#jinfoUsage:jinfo[option]<pid>(toconnecttorunningprocess)jinfo[option]<executable<core>(toconnecttoacorefile)jinfo[option][server
jstat(JVMStatisticsMonitorningTool)用于监控虚拟机各种运行状态信息的命令行工具。它可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,它是运行期定位虚拟机性能问题的首选工具。语法:[root@localhost~]#jstat-helpUsage:jstat-help|-optionsjstat-<option>[-t][-h<lines>]<vmid>[<interval>[<count>]]Definitions:<option>Anoptionreporte
jpsjps(JVMProcessStatusTool):虚拟机进程状态工具,可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(MainClass,main()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID(LVMID,LocalVitualMachineIdentifier),它是使用频率最高的JDK命令行工具,因为其他JDK工具大多需要输入它查询到的LVMID来确定要监控的是哪一个虚拟机进程。对于本地虚拟机进程来说,LVMID与操作系统进程ID(PID,ProcessIdentifier)是一致的。如果同时启动了多个虚拟机进程,无法根据进程名称定位时,那就只能依靠jps命令显示