博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM系列-04-JDK自带的管理分析工具
阅读量:6263 次
发布时间:2019-06-22

本文共 7183 字,大约阅读时间需要 23 分钟。

[TOC]

声明

本篇文章是本人阅读《深入理解JVM》和《java虚拟机规范》时的笔记。

记录的都是一些概念性的东西。
JVM是HotSpot,jdk1.7。
大神绕路,不喜勿喷。

1 概览

对于java程序员来说,javajavacjavadoc…… ,这些命令都能熟练地使用。

除了这些命令,在$JAVA_HOME/bin目录下还有一些非常常用的命令。

在本人机器上,该目录下的内容如下:

$ pwd/c/Program Files/Java/jdk1.8.0_101/bin$ lsappletviewer.exe*  javadoc.exe*         jcmd.exe*      jmap.exe*        jstatd.exe*        orbd.exe*         servertool.exe*extcheck.exe*      javafxpackager.exe*  jconsole.exe*  jmc.exe*         jvisualvm.exe*     pack200.exe*      sigar-amd64-winnt.dll*idlj.exe*          javah.exe*           jdb.exe*       jmc.ini          keytool.exe*       policytool.exe*   sigar-x86-winnt.dll*jabswitch.exe*     javap.exe*           jdeps.exe*     jps.exe*         kinit.exe*         rmic.exe*         tnameserv.exe*jar.exe*           javapackager.exe*    jhat.exe*      jrunscript.exe*  klist.exe*         rmid.exe*         unpack200.exe*jarsigner.exe*     java-rmi.exe*        jinfo.exe*     jsadebugd.exe*   ktab.exe*          rmiregistry.exe*  wsgen.exe*java.exe*          javaw.exe*           jjs.exe*       jstack.exe*      msvcr100.dll*      schemagen.exe*    wsimport.exe*javac.exe*         javaws.exe*          jli.dll*       jstat.exe*       native2ascii.exe*  serialver.exe*    xjc.exe*

2 命令行工具

2.1 jps

喜欢linux的用户一定用过一个命令就是ps,为 Process Snapshot的缩写,也就是进程快照。

此处的jps也就是 "Java Process Snapshot"(java进程快照)的缩写了。

语法:

C:\Users\hylexus>jps -helpusage: jps [-help]       jps [-q] [-mlvV] [
]Definitions:
:
[:
]

选项:

  • q : 只显示LVMID(Local Virtual Machine Identifier)而忽略主类名

  • m : 进程启动时传递给入口函数(main)的参数

  • l : 输出全类名或者jar包路径

  • v : 进程启动时传递的JVM参数

2.2 jstat

语法

C:\Users\hylexus>jstat -helpUsage: jstat -help|-options       jstat -

示例:

jstat -gcutil 67008 5s 3查看pid为67008的进程的堆内存各个区域占用总容量百分比,5秒刷新一次,共查询3次

运行结果如下:

C:\Users\hylexus>jstat -gcutil 67008 5s 3  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT  0.00  83.42   0.38  48.24  89.79  78.31     31    0.578     5    1.067    1.645  0.00  83.42   0.38  48.24  89.79  78.31     31    0.578     5    1.067    1.645  0.00  83.42   0.38  48.24  89.79  78.31     31    0.578     5    1.067    1.645

说明:

  • S0: Survivor0(新生代Survivor)是空的

  • S1: Survivor1(新生代Survivor)是空的

  • E: Eden(新生代Eden)占用0.38%

  • O: Old(老年代)占用48.24%

  • M:

  • CCS:

  • YGC: Young GC==> Minor GC ==> 新生代GC的次数

  • YGCT: YGC 耗时0.578秒

  • FGC: Full GC==>老年代GC的次数

  • FGCT: FGC总耗时1.067秒

  • GCT: 所有GC总耗时1.645秒

2.3 jinfo

jinfo可以查看和调整虚拟机各项参数。

语法

C:\Users\hylexus>jinfo -helpUsage:    jinfo [option] 
(to connect to running process) jinfo [option]
(to connect to a core file) jinfo [option] [server_id@]
(to connect to remote debug server)where

示例

打印出pid为67008的进程的JVM参数C:\Users\hylexus>jinfo -flags 67008Attaching to process ID 67008, please wait...Debugger attached successfully.Server compiler detected.JVM version is 25.101-b13Non-default VM flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:CICompilerCount=3 -XX:InitialHeapSize=41943040 -XX:MaxHeapSize=1258291200 -XX:MaxNewSize=419430400 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=13631488 -XX:OldSize=28311552 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGCCommand line:  -Dosgi.requiredJavaVersion=1.8 -Xms40m -Xverify:none -Dorg.eclipse.swt.browser.IEVersion=10001 -Xmx1200m
查询pid为67008的进程的初始堆大小C:\Users\hylexus>jinfo -flag InitialHeapSize 67008-XX:InitialHeapSize=41943040

2.4 jmap

jmap(Memory map)可以生成堆转储快照(一般称为heapdump或dump文件)

语法

C:\Users\hylexus>jmap -helpUsage:    jmap [option] 
(to connect to running process) jmap [option]
(to connect to a core file) jmap [option] [server_id@]
(to connect to remote debug server)where

示例

jmap -heap 67008jmap -finalizerinfo 67008jmap -dump:live,format=b,file=t.bin 67008

2.5 jhat

jhat(JVM Heap Analysis Tool)是虚拟机堆转储快照分析工具。一般是用来分析用jmap生成的堆快照信息。

但是他的分析结果不太美观,不是非常容易读懂。

他会启动一个内置的http服务器来将分析结果展现为html格式。

示例

生成快照C:\Users\hylexus>jmap -dump:live,format=b,file=t.bin 67008Dumping heap to C:\Users\hylexus\t.bin ...Heap dump file createdC:\Users\hylexus># 分析快照C:\Users\hylexus>jhat t.binReading from t.bin...Dump file created Mon Dec 19 22:43:48 CST 2016Snapshot read, resolving...Resolving 1861041 objects...Chasing references, expect 372 dots....................................................................................................................................................................................................................................................................................................................................................................................Eliminating duplicate references....................................................................................................................................................................................................................................................................................................................................................................................Snapshot resolved.Started HTTP server on port 7000Server is ready.

此时在浏览器里访问 127.0.0.1:7000就能看到分析结果:

jhat分析结果

2.6 jstack

jstack(Stack Trace for Java)可以生成虚拟机当前时刻的线程快照。

一般称为threaddump或者javacore文件。即每一条线程正在执行的方法堆栈的集合。

语法

C:\Users\hylexus>jstack -helpUsage:    jstack [-l] 
(to connect to running process) jstack -F [-m] [-l]
(to connect to a hung process) jstack [-m] [-l]
(to connect to a core file) jstack [-m] [-l] [server_id@]
(to connect to a remote debug server)Options: -F 当JVM不响应该请求时强制进行线程dump -m 显示java方法也可以是本地方法的堆栈信息 -l 显示有关锁的附加信息

3 图形化工具

对于这两个可视化工具的使用就不在多说什么了。

点鼠标谁都会。

3.1 jconsole

jconsole

3.2 jvisualvm

jvisualvm

参考文章

  • 《深入理解JVM》

  • 《Java虚拟机规范》-JDK1.7

你可能感兴趣的文章
c哈希表hashtable操作
查看>>
如何维护应用程序状态
查看>>
[Map 3D开发实战系列] Map Resource Explorer 之八--有什么用?怎么用?
查看>>
现代软件工程讲义 8 稳定阶段 (测试的计划和执行)
查看>>
Ubuntu 11.04 安装后要做的20件事情
查看>>
KlayGE 4.0中Deferred Rendering的改进(一):流水线
查看>>
6-4汉诺塔问题
查看>>
【转载】详解SQL2005/SQL2008动态生成分区脚本的方法
查看>>
构建高性能web之路------mysql读写分离实战(转)
查看>>
2012年网页设计趋势2
查看>>
atmega8 例程:INT1外部中断
查看>>
python类库32[多进程之Pool+Logging]
查看>>
现有portal项目(商业的和开源的)解决方案及优缺点
查看>>
集群(cluster)原理(转)
查看>>
Qt简介以及如何配置Qt使用VS2010进行开发
查看>>
html、html服务器控件和web服务器控件的区别
查看>>
8天玩转并行开发——第四天 同步机制(上)
查看>>
map 取最大value
查看>>
WCF中的异步实现
查看>>
Thrift之代码生成器Compiler原理及源码详细解析2
查看>>