JVM调优工具集 -- jps, jstat, jinfo, jmap, jstack
来源:互联网 发布:ubuntu常用软件推荐 编辑:程序博客网 时间:2024/05/10 00:20
JDK自带了很多JVM工具,命令行工具主要有jps, jstat, jinfo, jmap, jstack
1) jps
用于找出某个JVM的ID号,其他命令基本都要依赖这个命令来定位某个JVM进程,例如:
E:\>jps6008
16520
7616 JConsole
14908 jboss-modules.jar
12552 Jps
23908 Bootstrap
2) jstat
用于监视虚拟机各种运行状态信息,可以显示JVM的类装载,内存,GC等数据,是运行期定位JVM性能问题的首选工具。
使用方法:
jstat [ option vmid [interval [count] ] ]
参数介绍:
参数名称
描述
gc
输出每个堆区域的当前可用空间以及已用空间(伊甸园,幸存者等等),GC执行的总次数,GC操作累计所花费的时间。
gccapactiy
输出每个堆区域的最小空间限制(ms)/最大空间限制(mx),当前大小,每个区域之上执行GC的次数。(不输出当前已用空间以及GC执行时间)。
gccause
输出-gcutil提供的信息以及最后一次执行GC的发生原因和当前所执行的GC的发生原因
gcnew
输出新生代空间的GC性能数据
gcnewcapacity
输出新生代空间的大小的统计数据。
gcold
输出老年代空间的GC性能数据。
gcoldcapacity
输出老年代空间的大小的统计数据。
gcpermcapacity
输出持久带空间的大小的统计数据。
gcutil
输出每个堆区域使用占比,以及GC执行的总次数和GC操作所花费的时间。
例如,执行”jstat –gc 14908 1000″ (或 1s)会每隔一秒展示GC监控数据。”jstat –gc 14908 1000 5″会每隔1秒展现一次,且一共5次。vmid后不加参数表示只输出一条记录。
E:\>jstat -gc 14908
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
12672.0 12672.0 0.0 2488.8 101888.0 61064.0 253828.0 152296.3 116736.0 116637.1 289 8.253 25 32.975 41.229
E:\>jstat -gc 14908 1000 5
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
12672.0 12672.0 0.0 2488.8 101888.0 63285.7 253828.0 152296.3 116736.0 116637.1 289 8.253 25 32.975 41.229
12672.0 12672.0 0.0 2488.8 101888.0 63285.7 253828.0 152296.3 116736.0 116637.1 289 8.253 25 32.975 41.229
12672.0 12672.0 0.0 2488.8 101888.0 63285.7 253828.0 152296.3 116736.0 116637.1 289 8.253 25 32.975 41.229
12672.0 12672.0 0.0 2488.8 101888.0 63285.7 253828.0 152296.3 116736.0 116637.1 289 8.253 25 32.975 41.229
12672.0 12672.0 0.0 2488.8 101888.0 63285.7 253828.0 152296.3 116736.0 116637.1 289 8.253 25 32.975 41.229
数据结果介绍:
列说明Jstat参数S0C输出Survivor0空间的大小。单位KB。-gc-gccapacity
-gcnew
-gcnewcapacityS1C输出Survivor1空间的大小。单位KB。-gc
-gccapacity
-gcnew
-gcnewcapacityS0U输出Survivor0已用空间的大小。单位KB。-gc
-gcnewS1U输出Survivor1已用空间的大小。单位KB。-gc
-gcnewEC输出Eden空间的大小。单位KB。-gc
-gccapacity
-gcnew
-gcnewcapacityEU输出Eden已用空间的大小。单位KB。-gc
-gcnewOC输出老年代空间的大小。单位KB。-gc
-gccapacity
-gcold
-gcoldcapacityOU输出老年代已用空间的大小。单位KB。-gc
-gcoldPC输出持久代空间的大小。单位KB。-gc
-gccapacity
-gcold
-gcoldcapacity
-gcpermcapacityPU输出持久代已用空间的大小。单位KB。-gc
-gcoldYGC新生代空间GC时间发生的次数。-gc
-gccapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-gccauseYGCT新生代GC处理花费的时间。-gc
-gcnew
-gcutil
-gccauseFGCfull GC发生的次数。-gc
-gccapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-gccauseFGCTfull GC操作花费的时间-gc
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-gccauseGCTGC操作花费的总时间。-gc
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-gccauseNGCMN新生代最小空间容量,单位KB。-gccapacity
-gcnewcapacityNGCMX新生代最大空间容量,单位KB。-gccapacity
-gcnewcapacityNGC新生代当前空间容量,单位KB。-gccapacity
-gcnewcapacityOGCMN老年代最小空间容量,单位KB。-gccapacity
-gcoldcapacityOGCMX老年代最大空间容量,单位KB。-gccapacity
-gcoldcapacityOGC老年代当前空间容量制,单位KB。-gccapacity
-gcoldcapacityPGCMN持久代最小空间容量,单位KB。-gccapacity
-gcpermcapacityPGCMX持久代最大空间容量,单位KB。-gccapacity
-gcpermcapacityPGC持久代当前空间容量,单位KB。-gccapacity
-gcpermcapacityPC持久代当前空间大小,单位KB-gccapacity
-gcpermcapacityPU持久代当前已用空间大小,单位KB-gc
-gcoldLGCC最后一次GC发生的原因-gccauseGCC当前GC发生的原因-gccauseTT老年化阈值。被移动到老年代之前,在新生代空存活的次数。-gcnewMTT最大老年化阈值。被移动到老年代之前,在新生代空存活的次数。-gcnewDSS幸存者区所需空间大小,单位KB。-gcnew
3) jinfo
可以实时查看和调整虚拟机的各项参数。如果是1.6及以上的JDK,也可以使用java -XX:+PrintFlagsFinal查看参数。
jinfo可以使用-flag [+|-]name或者 -flag name=value来在运行期修改JVM参数。
命令格式:
jinfo [option] pid
执行查询示例:
[as@internal01 ~]$ jinfo -flag HeapDumpOnOutOfMemoryError 29685
-XX:-HeapDumpOnOutOfMemoryError
执行动态修改,首先看看哪些参数是允许动态修改的
[as@internal01 ~]$ java -XX:+PrintFlagsFinal | grep manageable
intx CMSAbortablePrecleanWaitMillis = 100 {manageable}
intx CMSWaitDuration = 2000 {manageable}
bool HeapDumpAfterFullGC = false {manageable}
bool HeapDumpBeforeFullGC = false {manageable}
bool HeapDumpOnOutOfMemoryError = false {manageable}
ccstr HeapDumpPath = {manageable}
bool PrintClassHistogram = false {manageable}
bool PrintClassHistogramAfterFullGC = false {manageable}
bool PrintClassHistogramBeforeFullGC = false {manageable}
bool PrintConcurrentLocks = false {manageable}
bool PrintGC = false {manageable}
bool PrintGCDateStamps = false {manageable}
bool PrintGCDetails = false {manageable}
bool PrintGCTimeStamps = false {manageable}
执行动态修改:
[as@internal01 ~]$ jinfo -flag +HeapDumpOnOutOfMemoryError 29685[as@internal01 ~]$ jinfo -flag HeapDumpOnOutOfMemoryError 29685
-XX:+HeapDumpOnOutOfMemoryError
[as@internal01 ~]$ jinfo -flag HeapDumpPath=/opt/las/bill.dump 29685
[as@internal01 ~]$ jinfo -flag HeapDumpPath 29685
-XX:HeapDumpPath=/opt/las/bill.dump
4) jmap
主要用于生成堆转储快照(一般称为heapdump或dump文件),还可以查询finalize执行队列,Java堆和永久代的信息。
命令格式: jmap [option] vmid
常用选项:
-dump : 生成Java对转储快照。格式为:-dump:[live,] format=b,file=<filename>, 其中live子参数说明是否只dump出存活的对象。
-histo: 显示对中对象统计信息,包括类、实例数量和合计容量。
例如:
C:\Users\b001>jmap -dump:format=b,file=D:\dump.bin 2200
Dumping heap to D:\dump.bin ...
Heap dump file created
生成的快照可以用MAT或者visualvm等工具分析。
5) jstack
用于生成JVM在当前时刻的线程快照(一般称为threaddump或者javacore文件),线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待。
另外,JDK1.5中,java.lang.Thread新增了一个getAllStackTraces()方法用于获取虚拟机中所有线程的StackTraceElement对象,可以完成jstack的大部分功能。
参考文献:
1) http://www.importnew.com/2057.html
2) 深入理解Java虚拟机:JVM高级特性与最佳实践
- JVM调优工具集 -- jps, jstat, jinfo, jmap, jstack
- JVM性能调优监控工具jps、jstat、jinfo、jmap、jhat、jstack使用详解
- JVM性能调优监控工具jps、jstack、jstat、jmap、jinfo使用详解
- jvm查看诊断工具-jstat,jmap,jinfo,jps,jstack
- JVM常用分析工具JPS/JINFO/JSTACK/JSTAT/JMAP详解
- JVM常用分析工具JPS/JINFO/JSTACK/JSTAT/JMAP详解
- JVM监控工具:jps、jstat、jinfo、jmap、jhat、jstack使用介绍
- jdk命令行工具(jps+jstat+jinfo+jmap+jstack)
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- jvm 性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- python中的装饰器
- Wing IDE 5.0快捷键
- 社会情商的一个角度
- libpcap 在Android 上抓包,实时分析的思路及实现
- [戏剧] [锡剧] 《玉蜻蜓》 庵堂认母 唱词
- JVM调优工具集 -- jps, jstat, jinfo, jmap, jstack
- 开始学习之路
- eclipse 使用Eclipse查看Android源码
- 80端口被System占用的解决办法
- 【互动问答分享】第12期决胜云计算大数据时代Spark亚太研究院公益大讲堂
- Blog居然被封了
- Java开发过程中生成chm格式帮助文档
- Mina、Netty、Twisted一起学(七):发布/订阅(Publish/Subscribe)
- MFC去除工具条