JVM系列-04-JDK自带的管理分析工具
来源:互联网 发布:暗黑战神 源码泄露 编辑:程序博客网 时间:2024/05/20 23:05
- 声明
- 概览
- 命令行工具
- 1 jps
- 2 jstat
- 3 jinfo
- 4 jmap
- 5 jhat
- 6 jstack
- 图形化工具
- 1 jconsole
- 2 jvisualvm
- 参考文章
声明
本篇文章是本人阅读《深入理解JVM》和《java虚拟机规范》时的笔记。
记录的都是一些概念性的东西。
JVM是HotSpot,jdk1.7。
大神绕路,不喜勿喷。
1 概览
对于java程序员来说,java
、javac
、javadoc
…… ,这些命令都能熟练地使用。
除了这些命令,在$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] [<hostid>]Definitions: <hostid>: <hostname>[:<port>]
选项:
- q : 只显示LVMID(Local Virtual Machine Identifier)而忽略主类名
- m : 进程启动时传递给入口函数(main)的参数
- l : 输出全类名或者jar包路径
- v : 进程启动时传递的JVM参数
2.2 jstat
语法
C:\Users\hylexus>jstat -helpUsage: jstat -help|-options jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]Definitions: <option> 要查询的属性或VM特性 -class 监视类装载、卸载数量、总空间以及类装载耗费的时间 -gc 监视Java的堆。比如Eden、survivor等 -gccapacity 和gc类似,但是主要关注点是堆中各个区域的容量 -gcutil 和gc类似,但是主要关注点是各个区域已使用部分占总容量的百分比 -gccause 和gcutil类似,但是会同时输出导致上一次GC的原因 -gcnew 监视新生代GC状况 -gcnewcapacity ………………(容量) -gcold ………………(老年代) -gcoldcapacity ………………(容量) -compiler JIT编译器编译过的方法、耗时等信息 -printcompilation 被JIT编译器编译过的方法 <vmid> VMID/LVMID: 在本地环境VMID和LVMID是一致的 远程环境中VMID应该是: <lvmid>[@<hostname>[:<port>]] <lines> Number of samples between header lines. <interval> 刷新时间间隔: <n>["ms"|"s"],默认单位为毫秒。 <count> 总共查询多少次. -J<flag> Pass <flag> directly to the runtime system.
示例:
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] <pid> (to connect to running process) jinfo [option] <executable <core> (to connect to a core file) jinfo [option] [server_id@]<remote server IP or hostname> (to connect to remote debug server)where <option> is one of: -flag <name> 打印指定参数值 -flag [+|-]<name> 启用(+)或禁用(-)指定参数 -flag <name>=<value> 设置指定参数的值 -flags 打印JVM参数 -sysprops 相当于System.getProperites() <no option> 表示不带任何选项,将打印出以上所提到的所有属性
示例
打印出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] <pid> (to connect to running process) jmap [option] <executable <core> (to connect to a core file) jmap [option] [server_id@]<remote server IP or hostname> (to connect to remote debug server)where <option> is one of: <none> 不带选项,打印出和Solaris下的pmap一样的信息 -heap 打印出堆的详细情况 如垃圾收集器组合、分带情况等 只在Linux下有效 -histo[:live] 堆中对象信息统计。如类实例数量等。 live,只统计活着的对象信息 -clstats 类加载器信息 -finalizerinfo 打印出在F-Queue队列中等待执行finalizer()方法的对象信息 -dump:<dump-options> 堆转储快照 dump-options: live 只是dump出存活着的对象 format=b binary format file=<file> 可选,dump到哪个文件中 示例: jmap -dump:live,format=b,file=heap.bin <pid> -F 当JVM对-dump选项没有响应时可以是使用-F来强制dump 只在Linux/Solaris下有效
示例
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就能看到分析结果:
2.6 jstack
jstack(Stack Trace for Java)可以生成虚拟机当前时刻的线程快照。
一般称为threaddump
或者javacore
文件。即每一条线程正在执行的方法堆栈的集合。
语法
C:\Users\hylexus>jstack -helpUsage: jstack [-l] <pid> (to connect to running process) jstack -F [-m] [-l] <pid> (to connect to a hung process) jstack [-m] [-l] <executable> <core> (to connect to a core file) jstack [-m] [-l] [server_id@]<remote server IP or hostname> (to connect to a remote debug server)Options: -F 当JVM不响应该请求时强制进行线程dump -m 显示java方法也可以是本地方法的堆栈信息 -l 显示有关锁的附加信息
3 图形化工具
对于这两个可视化工具的使用就不在多说什么了。
点鼠标谁都会。
3.1 jconsole
3.2 jvisualvm
参考文章
- 《深入理解JVM》
- 《Java虚拟机规范》-JDK1.7
0 0
- JVM系列-04-JDK自带的管理分析工具
- jdk自带的jvm监控工具
- Sun JDK自带JVM内存使用分析工具HProf
- Sun JDK自带JVM内存使用分析工具HProf
- VisualVM——JDK自带的性能分析工具
- JDK自带的监控分析工具JConsole
- VisualVM——JDK自带的性能分析工具
- Jvisualvm是JDK自带的一款性能分析工具
- JDK 6 自带vm分析工具
- 【原】JDK自带分析问题工具
- jdk自带的jvm监测程序
- JDK自带的JVM性能监控工具jconsole的使用
- jdk自带的jvm调优工具---jconsole的使用
- JDK自带的JVM性能调优监控工具简介
- jvm 自带的监控工具
- JVM自带的监控工具
- JDK自带的Java VisualVM工具
- JDK自带的native2ascii工具揭密
- FusionCharts 中文提示信息
- WJX_C++
- iOS应用内支付(IAP)的那些坑
- Spring注解标签详解@Autowired @Qualifier等
- elasticsearch 安装 ik 分词
- JVM系列-04-JDK自带的管理分析工具
- angular
- 如何解决linux报No space left on device错误
- GreenDao 3.0 出现 UNIQUE constraint failed
- 决策树
- 深度理解拉格朗日乘子法、KKT条件与线性规划对偶理论的微妙关系(未完)
- 第一周总结
- 高通dsp多线程造成系统挂掉笔记
- PHP---session