美文网首页
3.JVM调优工具

3.JVM调优工具

作者: slowwalkerlcr | 来源:发表于2020-05-18 22:42 被阅读0次

JVM调优工具

1、JVM调优工具-JDK工具

1.1 jps

jps:Java Virtual Machine Process Status Tool

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

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

1.2 jstat

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

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

jstat -<option> [-t] [-h<lines>] <vmid> [<interval>] [<count>]
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 
image.png
具体描述
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
image.png
具体描述:
loaded:已经装在的类的数量
Bytes :装载类所占用的字节数
Unloaded:已经卸载类的数量
Bytes:卸载类的字节数

示例3

jstat -gcutil 10416 5s 5
image.png

1.3 jinfo

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

jinfo [option] <pid>

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中,要留意下面几种状态

  • 死锁,DeadLock(重点关注)

  • 等待资源 Waiting on condition(重点关注)

  • 等待获取监视器 Waiting on monitor entrty(重点关注)

  • 阻塞 Blocked(重点关注)

  • 执行中 Runnable

  • 暂停 Suspended

  • 对象等待中 Object.wait()或TIMED_WAITING

  • 停止 Parked

示例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

相关文章

  • 3.JVM调优工具

    JVM调优工具 1、JVM调优工具-JDK工具 1.1 jps jps:Java Virtual Machine ...

  • 【性能优化】MySQL常用慢查询分析工具

    常用慢查询分析工具 3.1 调优工具mysqldumpslow 3.1.1 调优工具常用设置 1、什么是MySQL...

  • iOS 性能调试

    一、简介 性能调优的方式可以分为: 通过专门的性能调优工具; 通过代码优化; 二、内容 1、性能调优工具介绍 1....

  • JVM调优方法

    7.调优方法 7.1.JVM调优工具 Jconsole,jProfile,VisualVM Jconsole :j...

  • Go语言性能调优工具——pprof

    Go语言性能调优工具——pprof Go语言对性能要求比较高,所以内置了调优工具pprof,本文简单介绍下工具的使...

  • iOS性能调优总结

    iOS性能调优总结 1. 性能调优工具: 1.1 静态分析工具Analyze 相信IOS开发者在App进行Buil...

  • Hive调优

    宏观调优思路 1.资源充足加内存 2.数据接入慢调优接入工具Sqoop/Datax 3.Hive参数调优 4.sq...

  • 服务端JVM性能调优实战【四】

    JVM调优工具:VisualVM:JDK自带,功能强大 如何调优 观察内存释放情况、集合类检查、对象树 上面这些调...

  • JVM性能调优

    JVM性能调优 JVM性能监控工具介绍

  • 调试优化

    神兵利器-Android 性能调优工具 Hugo 在进行 Android 性能调优、减少应用卡顿时,寻找可优化的 ...

网友评论

      本文标题:3.JVM调优工具

      本文链接:https://www.haomeiwen.com/subject/ghjmohtx.html