jps、jinfo、jstat、jstack、jmap、jconsole等命令简介
来源:互联网 发布:opec原油产量数据 编辑:程序博客网 时间:2024/05/22 19:57
ref:http://blog.csdn.net/caihaijiang/article/details/6084325
JDK提供了几个很实用的工具,如下:
jinfo:观察运行中的java程序的运行环境参数:参数包括Java System属性和JVM命令行参数,java class path等信息。命令格式:jinfo 进程pid
jps:用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。命令格式:jps 或 jps 远程服务ip地址 (默认端口1099)
jstat:一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
jstack:可以观察到jvm中当前所有线程的运行情况和线程当前状态。, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。命令格式:jstack 进程pid
jmap:观察运行中的jvm物理内存的占用情况(如:产生哪些对象,及其数量)。命令格式:jmap [option] pid
option参数如下:
-heap:打印jvm heap的情况
-histo:打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小。
-histo:live :同上,但是只答应存活对象的情况
-permstat:打印permanent generation heap情况
使用jmap进行 heap dump的例子: jmap -dump:format=b,file=<filename> <pid>
打印内存统计图:jmap -histo:live <pid>
结果中每行显示了当前堆中每种类类型的信息,包含被分配的实例个数及其消耗的字节数。选项“live”,表示只统计存活的对象
需要注意的是,jmap不是运行分析工具,在生成统计图时JVM可能会暂停,因此当生成统计图时需要确认这种暂停对程序是可接受的。
jconsole:一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。
这些命令的使用,见官方文档:
jps:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jps.html
jstat:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstat.html
jstack:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstack.html
jmap:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jmap.html
jconsole:http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html
jstat的一些参数:
参数名称
描述
class
统计class loader行为信息。命令例子:jstat -class pid 1000 10 (每隔1秒监控一次,一共做10次),输出内容,含义如下:
LoadedNumber of classes loaded.BytesNumber of Kbytes loaded.UnloadedNumber of classes unloaded.BytesNumber of Kbytes unloaded.TimeTime spent performing class load and unload operations.
compile
统计编译行为信息。
gc
输出每个堆区域的当前可用空间以及已用空间(伊甸园,幸存者等等),GC执行的总次数,GC操作累计所花费的时间。
gccapactiy
输出每个堆区域的最小空间限制(ms)/最大空间限制(mx),当前大小,每个区域之上执行GC的次数。(不输出当前已用空间以及GC执行时间)。
gccause
输出-gcutil提供的信息以及最后一次执行GC的发生原因和当前所执行的GC的发生原因
gcnew
输出新生代空间的GC性能数据
gcnewcapacity
输出新生代空间的大小的统计数据。
gcold
输出老年代空间的GC性能数据。
gcoldcapacity
输出老年代空间的大小的统计数据。
gcpermcapacity
输出持久带空间的大小的统计数据。
gcutil
输出每个堆区域使用占比,以及GC执行的总次数和GC操作所花费的事件。
你可以只关心那些最常用的命令,你会经常用到 -gcutil (或-gccause), -gc and –gccapacity。
· -gcutil 被用于检查堆间的使用情况,GC执行的次数以及GC操作所花费的时间。
· -gccapacity以及其他的参数可以用于检查实际分配内存的大小。
不同的jstat参数输出不同类型的列,如下表所示,根据你使用的”jstat option”会输出不同列的信息。
-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最大老年化阈值。被移动到老年代之前,在新生代空存活的次数。-gcnewDSSAdequate size of survivor in KB
幸存者区所需空间大小,单位KB。-gcnew
下面内容,摘自:http://jameswxx.javaeye.com/blog/731763
在本机执行 jstat -gcutil 340 10000,这个命令是每个10秒钟输出一次jvm的gc信息,10000指的是间隔时间为10000毫秒。屏幕上显示如下信息(我只取了第一行,因为是按的一定频率显示,所以实际执行的时候,会有很多行):
S0 S1 E O P YGC YGCT FGC FGCT GCT
54.62 0.00 42.87 43.52 86.24 1792 5.093 33 7.670 12.763
- S0:新生代的susvivor0区,空间使用率为54..62%
- S1:新生代的susvivor1区,空间使用率为0.00%(因为还没有执行第二次minor收集)
- E:eden区,空间使用率42.87%
- O:旧生代,空间使用率43.52%
- P:持久带,空间使用率86.24%
- YGC:minor gc执行次数1792次
- YGCT:minor gc耗费的时间5.093毫秒
- FGC:full gc执行次数33
- FGCT:full gc耗费的时间7.670毫秒
- GCT:gc耗费的总时间12.763毫秒
如果young gc和full gc能够正常发生,而且都能有效回收内存,常驻内存区变化不明显,则说明java内存释放情况正常,垃圾回收及时,java内存泄露的几率就会大大降低。但也不能说明一定没有内存泄露。
每次young gc消耗的时间,可以用相间隔的两行YGCT相减得到。每次full gc消耗的时间,可以用相隔的两行FGCT相减得到
官方文档的一个例子:
- Using the gcutil option
- This example attaches to lvmid 21891 and takes 7 samples at 250 millisecond intervals and displays the output as specified by the -gcutil option.
- jstat -gcutil 21891 250 7
- S0 S1 E O P YGC YGCT FGC FGCT GCT
- 12.44 0.00 27.20 9.49 96.70 78 0.176 5 0.495 0.672
- 12.44 0.00 62.16 9.49 96.70 78 0.176 5 0.495 0.672
- 12.44 0.00 83.97 9.49 96.70 78 0.176 5 0.495 0.672
- 0.00 7.74 0.00 9.51 96.70 79 0.177 5 0.495 0.673
- 0.00 7.74 23.37 9.51 96.70 79 0.177 5 0.495 0.673
- 0.00 7.74 43.82 9.51 96.70 79 0.177 5 0.495 0.673
- 0.00 7.74 58.11 9.51 96.71 79 0.177 5 0.495 0.673
- The output of this example shows that a young generation collection occurred between the 3rd an
例子:
1. 发现问题
2. 深入调查
- num #instances #bytes class name
- ---------------------------------------------
- 1: 30110820 1204432800 org.jsoup.parser.ParseError
- 2: 33076 156025088 [Ljava.lang.Object;
- 3: 68836 98796360 [C
- private boolean trackErrors = true;
- ......
- void error(TokeniserState state) {
- if (trackErrors)
- errors.add(new ParseError("Unexpected character in input", reader.current(), state, reader.pos()));
- }
3. 问题的处理
4. 总结
- jps、jinfo、jstat、jstack、jmap、jconsole等命令简介
- jps、jinfo、jstat、jstack、jmap、jconsole等命令简介
- jps、jinfo、jstat、jstack、jmap、jconsole等命令简介
- jps、jinfo、jstat、jstack、jmap、jconsole等命令简介
- 用JDK中的 jps、jinfo、jstat、jstack、jmap、jconsole等命令对JVM,内存,线程进行分析和故障诊断
- 用JDK中的 jps、jinfo、jstat、jstack、jmap、jconsole等命令对JVM,内存,线程进行分析和故障诊断
- 用JDK中的 jps、jinfo、jstat、jstack、jmap、jconsole等命令对JVM,内存,线程进行分析和故障诊断
- JVM 中的 jps、jinfo、jstat、jstack、jmap、jconsole等命令使用(线程进行分析和故障诊断)
- 用JDK中的 jps、jinfo、jstat、jstack、jmap、jconsole等命令对JVM,内存,线程进行分析和故障诊断
- 用JDK中的 jps、jinfo、jstat、jstack、jmap、jconsole等命令对JVM,内存,线程进行分析和故障诊断
- Java——命令jps、jstat、jmap、jstack、jhat、jinfo
- jstack, jstat, jmap, jinfo
- java命令 - jstack, jstat, jmap, jinfo
- jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
- 深入JAVA之 JVM[ jinfo / jps / jstat / jmap / jstack / jhat ]命令说明
- jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
- jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
- jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
- 让linux挂载的移动硬盘具有执行权限
- (5)hive参数——深入浅出学Hive
- iOS开发ASIHttpRequest介绍(六)-- ASIHTTPRequest数据压缩
- easyui中实现多个下拉列表联动
- 解决 warning C4127: 条件表达式是常量
- jps、jinfo、jstat、jstack、jmap、jconsole等命令简介
- 【自然语言处理系列】新词发现算法——转自matrix67博客
- android通过剪切板传递实体类数据
- maven学习从0到创建一个maven项目(2)
- IC卡的传输协议
- 强大的git
- (6)Hive 高级编程——深入浅出学Hive
- 【笔记】javascript正则表达式的预查分类
- Qt之打包发布(NSIS详解)