java自带命令行工具(jmap,jhat,jinfo)
(1)JMAP
1.作用
打印进程,core文件,和远程进程的共享对象存储map或堆存储器的详细信息。
2.使用
1
2
3
|
jmap[options]pid
jmap[options]executablecore
jmap[options][pid]server-id@]remote-hostname-or-IP
|
如果指定的进程是在64位Java虚拟机(JVM)上运行,那么你可能需要指定-J-d64选项,例如:jmap -J-d64 -heap pid。
3.参数选项
3.1
当不使用选项,该jmap命令打印共享对象映射
如
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
C:\Users\Administrator>jmap9208
AttachingtoprocessID9208,pleasewait...
Debuggerattachedsuccessfully.
Servercompilerdetected.
JVMversionis24. 75 -b04
0x00000000623c00008016KD:\Java\jdk1. 7 .0_75\jre\bin\server\jvm.dll
0x0000000062ba0000840KD:\Java\jdk1. 7 .0_75\jre\bin\msvcr100.dll
0x0000000062cc0000144KD:\Java\jdk1. 7 .0_75\jre\bin\sunec.dll
0x0000000062cf000068KD:\Java\jdk1. 7 .0_75\jre\bin\nio.dll
0x0000000062d10000100KD:\Java\jdk1. 7 .0_75\jre\bin\net.dll
0x0000000062d30000160KD:\Java\jdk1. 7 .0_75\jre\bin\java.dll
0x00000000634d000084KD:\Java\jdk1. 7 .0_75\jre\bin\zip.dll
0x000000006595000044KD:\Java\jdk1. 7 .0_75\jre\bin\sunmscapi.dll
0x000000006596000060KD:\Java\jdk1. 7 .0_75\jre\bin\verify.dll
0x000000006597000044KD:\Java\jdk1. 7 .0_75\jre\bin\management.dll
...
|
3.2
-dump:[live,] format=b, file=filename
转储Java堆hprof二进制格式。指定live,标识转储active状态的对象。生成的文件可以由jhat命令查看。
1
2
3
|
C:\Users\Administrator>jmap-dump:format=b,file=9208_0413.hprof9208
DumpingheaptoC:\Users\Administrator\9208_0413.hprof...
Heapdumpfilecreated
|
3.3-finalizerinfo
打印将要结束的对象的信息
1
2
3
4
5
6
|
C:\Users\Administrator>jmap-finalizerinfo9208
AttachingtoprocessID9208,pleasewait...
Debuggerattachedsuccessfully.
Servercompilerdetected.
JVMversionis24. 75 -b04
Numberofobjectspendingforfinalization: 0
|
3.4 -heap
打印垃圾收集和heap摘要信息,以及生成-wise 堆使用的堆摘要
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
C:\Users\Administrator>jmap-heap9208
AttachingtoprocessID9208,pleasewait...
Debuggerattachedsuccessfully.
Servercompilerdetected.
JVMversionis24. 75 -b04
usingthread-localobjectallocation.
ParallelGCwith4thread(s)
HeapConfiguration:
MinHeapFreeRatio= 0
MaxHeapFreeRatio= 100
MaxHeapSize= 2124414976 ( 2026 .0MB)
NewSize= 1310720 ( 1 .25MB)
MaxNewSize=17592186044415MB
OldSize= 5439488 ( 5 .1875MB)
NewRatio= 2
SurvivorRatio= 8
PermSize= 21757952 ( 20 .75MB)
MaxPermSize= 85983232 ( 82 .0MB)
G1HeapRegionSize= 0 ( 0 .0MB)
HeapUsage:
PSYoungGeneration
EdenSpace:
capacity= 68157440 ( 65 .0MB)
used= 16646688 ( 15 .875518798828125MB)
free= 51510752 ( 49 .124481201171875MB)
24.423875075120193 %used
FromSpace:
capacity= 5242880 ( 5 .0MB)
used= 5228248 ( 4 .986045837402344MB)
free= 14632 ( 0 .01395416259765625MB)
99.72091674804688 %used
ToSpace:
capacity= 15728640 ( 15 .0MB)
used= 0 ( 0 .0MB)
free= 15728640 ( 15 .0MB)
0.0 %used
PSOldGeneration
capacity= 88080384 ( 84 .0MB)
used= 27239848 ( 25 .977943420410156MB)
free= 60840536 ( 58 .022056579589844MB)
30.9261231195359 %used
PSPermGeneration
capacity= 22020096 ( 21 .0MB)
used= 15369592 ( 14 .657585144042969MB)
free= 6650504 ( 6 .342414855957031MB)
69.7980244954427 %used
10057internedStringsoccupying867832bytes.
|
3.5 -histo[:live]
打印堆的直方图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
num#instances#bytesclassname
----------------------------------------------
...
877 : 132 [Lcom.sun.jndi.ldap.pool.Pool;
878 :232com.sun.org.apache.xerces.internal.impl.dv.dtd.ENTITYDatatypeValidator
879 :232java.lang.Shutdown$Lock
880 :132org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler
881 :232com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver
882 :132java.lang.reflect.WeakCache$CacheKey
883 :132java.text.FieldPosition
884 :132java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
885 :232sun.security.x509.CertificateVersion
886 : 232 [Lorg.apache.catalina.deploy.ContextEnvironment;
887 : 132 [Lorg.apache.tomcat.util.net.AbstractEndpoint$Acceptor$AcceptorState;
888 :132sun.nio.cs.StandardCharsets
...
|
3.6 -clstats
java 堆的wise统计。1.7.0_75不支持该项
(2)jhat
2.1作用
分析Java堆。该jhat命令解析Java堆转储文件并启动Web服务器。jhat命令可以让你浏览堆转储。支持OQL语法。
2.2使用
jhat [ options ] heap-dump-file
2.3参数说明
1.-stack false|true
关闭跟踪对象分配调用堆栈。默认值是true。
-refs false|true
关闭对象的引用的跟踪。默认为true。
-port port-number
设置端口的jhatHTTP服务器。默认值是7000。
-exclude exclude-file
指定列出了应当从可及的对象查询排除数据成员的文件
-baseline exclude-file
指定基准堆转储。在具有相同的对象ID两个堆转储对象被标记为不是新对象。这是用于比较两个不同的堆转储有用。
-debug int
0级表示没有调试输出
1
2
3
4
5
6
7
8
9
10
|
C:\Users\Administrator>jhat-port80009208_0413.hprof
Readingfrom9208_0413.hprof...
DumpfilecreatedThuApr1321: 18 :58CST2017
Snapshotread,resolving...
Resolving389761objects...
Chasingreferences,expect77dots..........................................................................
Eliminatingduplicatereferences............................................................................
Snapshotresolved.
StartedHTTPserveronport8000
Serverisready.
|
接下来,就可以通过浏览器访问查看。http://localhost:8000/。
(3)jinfo
3.1作用
生成的配置信息。如果指定的进程是在64位JVM上运行,那么你可能需要指定-J-d64选项
3.2使用
1
2
3
|
jinfo[option]pid
jinfo[option]executablecore
jinfo[option][servier-id]remote-hostname-or-IP
|
3.3选项参数
no-option:既打印命令行标志和系统属性键值对。
-flag name
打印名和指定的命令行标志的值。
-flag [+|-]name
开启或禁止指定的布尔命令行标志。
-flag name=value
设置指定的命令行标志为指定值。
-flags
打印命令行标志传递给JVM。
-sysprops
打印Java系统属性键值对。
打印进程的命令行参数
1
2
3
4
5
6
7
8
9
|
C:\Users\Administrator>jinfo-flags9208
AttachingtoprocessID9208,pleasewait...
Debuggerattachedsuccessfully.
Servercompilerdetected.
JVMversionis24. 75 -b04
-Djava.util.logging.config.file=D:\apache-tomcat- 7.0 . 67 \conf\logging.properties-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.endorsed.dirs=D:\apache-tomcat- 7.0 . 67 \endorsed-Dcatalina.base=D:\apache-tomcat- 7.0 . 67 -Dcatalina.home=D:\apache-tomcat- 7.0 . 67 -Djava.io.
tmpdir=D:\apache-tomcat- 7.0 . 67 \temp
#在catalina.sh中可以找到设置的地方
|
打印参数值
1
2
3
4
5
6
7
8
9
10
|
#值类型参数
C:\Users\Administrator>jinfo-flagNewSize9208
-XX:NewSize= 1310720
#开关类型参数
C:\Users\Administrator>jinfo-flagPrintGC9208
-XX:-PrintGC
C:\Users\Administrator>jinfo-flagXmn9208
nosuchflag 'Xmn'
|
可以总结出:-xms,-xmn系列参数不能通过jinfo指定或打印;jinfo命令作用于-XX:***格式的参数。
设置参数值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
C:\Users\Administrator>jinfo-flagPrintGC9208
-XX:-PrintGC
C:\Users\Administrator>jinfo-flag+PrintGC9208
C:\Users\Administrator>jinfo-flagPrintGC9208
-XX:+PrintGC
//2windows环境总是失败
C:\Users\Administrator>jinfo-flagPermSize= 217500009208
Exceptioninthread "main" java.io.IOException:CommandfailedintargetVM
atsun.tools.attach.WindowsVirtualMachine.execute(WindowsVirtualMachine.java: 112 )
atsun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java: 217 )
atsun.tools.attach.HotSpotVirtualMachine.setFlag(HotSpotVirtualMachine.java: 190 )
atsun.tools.jinfo.JInfo.flag(JInfo.java: 123 )
atsun.tools.jinfo.JInfo.main(JInfo.java: 76 )
|
希望本篇文章对您有所帮助
原文链接:http://www.2cto.com/kf/201704/626229.html