3.JVM调优工具

作者:jcmp      发布时间:2021-05-09      浏览量:0
一、JVM调优工具1、JVM调优工具-J

一、JVM调优工具

1、JVM调优工具-JDK工具

1.1 jps

jps:Java Virtual Machine Process Status Tool。

查看java进程,相当于Linux下的ps命令,只不过它只能列出Java进程。

jps:列出Java程序进程的ID和Main函数名称jps -q: 只输出集成IDjps -m: 输出传递给Java进程(主函数)的参数jps -l: 输出主函数的完整路径jps -v: 显示传递给Java虚拟的参数。

1.2 jstat

jstat:JVM Statistics Monitoring Tool jvm信息统计监控工具。

jstat可以查看Java程序运行时相关信息,可以通过它查看堆信息的相关情况。

jstat -

options:由以下值构成- class (类加载器) - compiler (JIT) - gc (GC堆状态) - gccapacity (各区大小) - gccause (最近一次GC统计和原因) - gcnew (新区统计)- gcnewcapacity (新区大小)- gcold (老区统计)- gcoldcapacity (老区大小)- gcpermcapacity (永久区大小)- gcutil (GC统计汇总)- printcompilation (HotSpot编译统计)- interval(用于指定输出统计数据的周期,单位是毫秒)- count(用于指定一个输出多少次数据)。

示例1

下面输出的GC信息,10416:进程ID 250:250毫秒 4:采样本数为4次。

jstat -gc 10416 250 4

具体描述S0C:年轻代中第一个survivor(幸存区)的容量 (字节)S1C:年轻代中第二个survivor(幸存区)的容量 (字节)S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)EC :年轻代中Eden(伊甸园)的容量 (字节)EU :年轻代中Eden(伊甸园)目前已使用空间 (字节)OC :Old代的容量 (字节)OU :Old代目前已使用空间 (字节)PC :Perm(持久代)的容量 (字节)PU :Perm(持久代)目前已使用空间 (字节)YGC:从应用程序启动到采样时年轻代中gc次数YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)FGC :从应用程序启动到采样时old代(全gc)gc次数FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)GCT :从应用程序启动到采样时gc用的总时间(s)。

示例2

jstat -calss 10416

具体描述:loaded:已经装在的类的数量Bytes :装载类所占用的字节数Unloaded:已经卸载类的数量Bytes:卸载类的字节数。

示例3

jstat -gcutil 10416 5s 5

1.3 jinfo

jinfo:Java configuration info jinfo可以用来查看正在运行的java程序的扩展参数,甚至支持运行时,修改部分参数。

jinfo [option]

1.4 jmap

jmap:Java Memory Map jmap用来查看堆内存使用状况,一般结合jhat使用。

示例1 heap

命令:jmap -heap pid 描述:显示Java堆详细信息 打印一个堆的摘要信息,包括使用的GC算法、堆配置信息和各内存分配情况。

示例2 histo[:live]

命令:jmap -histo:live pid 描述:显示堆中对象的统计信息 其中包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。打印的虚拟机内部的类名称将会带有一个*前缀,如果ja 指定了live子选项,则只计算活动的对象。

示例3 clstats

命令:jmap -clstats pid 描述:打印类加载器信息。

示例4 finalizerinfo

命令:jmap -finalizerinfo pid 描述:打印等待终结的对象信息。

示例5 dump 结合下面的jhat使用

命令:jmap -dump:format=b,file=heapdump.phrof pid 描述:生成堆转储快照dump文件。

注意 phrof二进制格式转储指定filename的文件中。live子选项是可选的,如果指定了live子选项,堆中只有活动的对象会被转储。想要浏览heap dump,你可以使用jhat(java堆分析工具)读取生成的文件 这个命令执行,jvm会将整个heap的信息dump写入到一个文件,heap如果比较大的话,就会导致这个过程比较耗时,并且执行的过程中为了保证dump的信息是可靠的,所以会暂停应用,线上系统慎用。

1.5 jhat

jhat:java Heap Analysis Tool ,jhat命令解析ajva对转储文件,并启动一个web server。然后用浏览器来查看浏览dump出来的heap。jhat 命令支持预先设计的查询,比如显示某个类的所有实例。还支持查询语言(OQL Obejct Query Language)。OQL有点类似Sql,专门用来查询堆转储。OQL相关的帮助信息可以在jhat命令所提供的服务器页面最底部,如果使用默认端口,则OQL帮助信息页面为: http://localhost:7000/oqlhelp/

1.6 jstack

命令:jstack -l pid > jstack_info.txt。

jstack:java Stack Trace,jstack是Java虚拟机只带的一种堆栈跟踪工具。jstack用于生产java虚拟机当前时刻的 线程快照 。线程快照是当前Java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有相应的线程到底在后台做什么事情,或者等待什么资源。如果Java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和natice stack的信息,从而可以轻松的知道java程序是如何崩溃和在程序何处发生问题,另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息,如果现在运行的java程序呈现hung的状态,jstack是非常有用的。

在thread dump中,要留意下面几种状态

示例1

统计线程数 jstack -l pid |grep 'java.lang.Thread.State' | wc -l。

1.7 jconsole

jconsole:Java Monitoring and Management Console,Java 5引入,一个内置Java性能分析器,可以从命令行或者GUI Shell中运行。可以轻松地使用Jconsole来监控Java应用程序性能和跟踪Java中的代码 如何启动Jconsole 如果是命令行启动,使用JDK在PATH上,运行jconsole即可 如果在GUI Shell启动,找到JDK安装路径,打开bin目录,双击jconsole。

当分析工具弹出时(取决于正在运行的java版本以及正在运行的java程序数量),可能会出现一个对话框,要求输入一个进程的URL来连接,也可能累出许多不同的本地java进程(有时包含jconsole进程本身)来连接。如下图所示:想分析哪个进程就双击哪个进程。

1.8 hprof

hprof:Heap/CPU profiling Tool 能够展现CPU使用率,统计堆内存使用情况。

二、JVM调优工具-Linux工具

2.1 top

Linux中的top命令显示系统上正在运行的进程,他是系统管理员最重要的工具之一,被广泛用于监视服务器的负载。top命令是一个交互命令,在运行top的时候还可以运行很多命令 top的使用方式 top [-d number] | top [-bnp]

top:显示进程信息top -c : 显示完整命令top -b :以批处理模式显示程序信息 : 以累计模式显示程序信息。

2.2 vmstat

Virtual Meomory Statisctics (虚拟内存统计),可对炒作系统的虚拟内存、进程、CPU活动进行监控。

vmstat 3 每三秒监控一次

2.3 iostat

需要安装

2.4 pidstat

需要安装

三、JVM调优工具-第三方工具

3.1 VisualVM

需要手动安装对应插件

3.2 MAT

Memory Analyzer Tool

eclipse或idea上可以下载插件。有时候dump文件太大的话,可以下载LInux的MAT。

3.3 GCWviewer

3.4 Arthas

alibaba开源的java诊断工具,下载jar包,然后运行。

3.5 GChisto

3.6 IBM HeapAnalyzer