常用命令查找文檔站點(diǎn):https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html
-XX:+PrintFlagsInitial
輸出所有參數(shù)的名稱和默認(rèn)值,默認(rèn)不包括Diagnostic和Experimental的參數(shù)。可以配合?
-XX:+UnlockDiagnosticVMOptions
和-XX:UnlockExperimentalVMOptions
使用
注意:這里列舉出來(lái)的所有參數(shù)值,大體分為兩類。一類是 “=” 的表示默認(rèn)值;一類是 “ := ” 的表示是被用戶或者JVM修改后的值。?
JPS 命令
查看使用格式:
jps -help
usage: jps [-help]
jps [-q] [-mlvV] [<hostid>]
Definitions:
<hostid>: <hostname>[:<port>]
1、查看java進(jìn)程pid
$> jps -q
28680
23789
23651
2、查看 main 方法的參數(shù)
特別注意,在嵌入式j(luò)vm上可能是null
$> jps -m
28715 Jps -m
23789 BossMain
23651 Resin -socketwait 32768 -stdout /data/aoxj/resin/log/stdout.log -stderr /data/aoxj/resin/log/stderr.log
3、查看Java進(jìn)程完整包名
# -l 輸出應(yīng)用程序main class的完整package名 或者 應(yīng)用程序的jar文件完整路徑名
$> jps -l
28729 sun.tools.jps.Jps
23789 com.asiainfo.aimc.bossbi.BossMain
23651 com.caucho.server.resin.Resin
4、查看傳遞給JVM的參數(shù)
$> jps -v
23789 BossMain
28802 Jps -Denv.class.path=/data/aoxj/bossbi/twsecurity/java/trustwork140.jar:/data/aoxj/bossbi/twsecurity/java/:/data/aoxj/bossbi/twsecurity/java/twcmcc.jar:/data/aoxj/jdk15/lib/rt.jar:/data/aoxj/jdk15/lib/tools.jar -Dapplication.home=/data/aoxj/jdk15 -Xms8m
23651 Resin -Xss1m -Dresin.home=/data/aoxj/resin -Dserver.root=/data/aoxj/resin -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl
Jinfo 命令?
? ?jinfo
?是?JDK
?自帶的命令,可以用來(lái)查看正在運(yùn)行的?java
?應(yīng)用程序的擴(kuò)展參數(shù),包括Java System屬性和JVM命令行參數(shù);也可以動(dòng)態(tài)的修改正在運(yùn)行的?JVM
?一些參數(shù)。當(dāng)系統(tǒng)崩潰時(shí),jinfo可以從core文件里面知道崩潰的Java應(yīng)用程序的配置信息?;菊Z(yǔ)法是:jinfo [ option ] pid
Option:
選項(xiàng) | 選項(xiàng)說(shuō)明 |
---|---|
no option | 輸出全部的參數(shù)和系統(tǒng)屬性 |
-flag name | 輸出對(duì)應(yīng)名稱的參數(shù) |
-flag [+/-] name | 開啟或者關(guān)閉對(duì)應(yīng)名稱的參數(shù),只有被標(biāo)記為 manageable 的參數(shù)才可以被動(dòng)態(tài)修改 |
-flag name=value | 設(shè)定對(duì)應(yīng)名稱的參數(shù) |
-flags | 輸出全部的參數(shù) |
-sysprops | 輸出系統(tǒng)屬性 |
?1、jinfo -flags pid
#輸入
jinfo -flags 7663
#輸出
Attaching to process ID 7663, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.121-b13
Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4294967296 -XX:MaxNewSize=1431306240 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC
Command line: -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=49834:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8
2、jinfo -flag pid
其中,<name>
?不包含上圖的前綴?-XX:
?等,不是?jinfo -flag -XX:NewSize 7663
,而是?jinfo -flag NewSize 7663
,不包含?-XX:
?。
#輸入
jinfo -flag NewSize 7663
#輸出
-XX:NewSize=89128960
3、jinfo -flag [+|-] pid
用于打開或關(guān)閉指定的參數(shù)
4、jinfo -sysprops pid
打印當(dāng)前java進(jìn)程中設(shè)定的系統(tǒng)環(huán)境參數(shù)
#輸入
jinfo -sysprops 7663
#輸出
Attaching to process ID 7663, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.121-b13
java.runtime.name = Java(TM) SE Runtime Environment
java.vm.version = 25.121-b13
sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib
gopherProxySet = false
java.vendor.url = http://java.oracle.com/
java.vm.vendor = Oracle Corporation
path.separator = :
file.encoding.pkg = sun.io
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
sun.os.patch.level = unknown
sun.java.launcher = SUN_STANDARD
user.country = CN
user.dir = /Users/davis/workspace/intellij/cw-javaagent-demo
java.vm.specification.name = Java Virtual Machine Specification
java.runtime.version = 1.8.0_121-b13
java.awt.graphicsenv = sun.awt.CGraphicsEnvironment
os.arch = x86_64
java.endorsed.dirs = /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/endorsed
line.separator =
java.io.tmpdir = /var/folders/5n/6g464jd97r13x39t5w69ybfr0000gn/T/
java.vm.specification.vendor = Oracle Corporation
os.name = Mac OS X
sun.jnu.encoding = UTF-8
java.library.path = /Users/davis/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
java.specification.name = Java Platform API Specification
java.class.version = 52.0
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
os.version = 10.15.5
http.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
user.home = /Users/davis
user.timezone = Asia/Shanghai
java.awt.printerjob = sun.lwawt.macosx.CPrinterJob
file.encoding = UTF-8
java.specification.version = 1.8
user.name = davis
java.class.path = /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/lib/tools.jar:/Users/davis/workspace/intellij/cw-javaagent-demo/target/classes:/Users/davis/maven/net/sourceforge/jtds/jtds/1.2.6/jtds-1.2.6.jar:/Users/davis/maven/jstl/jstl/1.2/jstl-1.2.jar:/Users/davis/maven/taglibs/standard/1.1.2/standard-1.1.2.jar:/Users/davis/maven/org/mybatis/mybatis/3.2.8/mybatis-3.2.8.jar:/Users/davis/maven/org/mybatis/mybatis-spring/1.2.2/mybatis-spring-1.2.2.jar:/Users/davis/maven/redis/clients/jedis/2.5.2/jedis-2.5.2.jar:/Users/davis/maven/org/apache/commons/commons-pool2/2.0/commons-pool2-2.0.jar:/Users/davis/maven/mysql/mysql-connector-java/5.1.39/mysql-connector-java-5.1.39.jar:/Users/davis/maven/org/springframework/spring-aop/4.1.1.RELEASE/spring-aop-4.1.1.RELEASE.jar:/Users/davis/maven/aopalliance/aopalliance/1.0/aopalliance-1.0.jar:/Users/davis/maven/org/springframework/spring-aspects/4.1.1.RELEASE/spring-aspects-4.1.1.RELEASE.jar:/Users/davis/maven/org/aspectj/aspectjweaver/1.8.2/aspectjweaver-1.8.2.jar:/Users/davis/maven/org/springframework/spring-beans/4.1.1.RELEASE/spring-beans-4.1.1.RELEASE.jar:/Users/davis/maven/org/springframework/spring-context/4.1.1.RELEASE/spring-context-4.1.1.RELEASE.jar:/Users/davis/maven/org/springframework/spring-context-support/4.1.1.RELEASE/spring-context-support-4.1.1.RELEASE.jar:/Users/davis/maven/org/springframework/spring-core/4.1.1.RELEASE/spring-core-4.1.1.RELEASE.jar:/Users/davis/maven/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar:/Users/davis/maven/org/springframework/spring-expression/4.1.1.RELEASE/spring-expression-4.1.1.RELEASE.jar:/Users/davis/maven/org/springframework/spring-instrument/4.1.1.RELEASE/spring-instrument-4.1.1.RELEASE.jar:/Users/davis/maven/org/springframework/spring-instrument-tomcat/4.1.1.RELEASE/spring-instrument-tomcat-4.1.1.RELEASE.jar:/Users/davis/maven/org/springframework/spring-jdbc/4.1.1.RELEASE/spring-jdbc-4.1.1.RELEASE.jar:/Users/davis/maven/org/springframework/spring-jms/4.1.1.RELEASE/spring-jms-4.1.1.RELEASE.jar:/Users/davis/maven/org/springframework/spring-messaging/4.1.1.RELEASE/spring-messaging-4.1.1.RELEASE.jar:/Users/davis/maven/org/springframework/spring-orm/4.1.1.RELEASE/spring-orm-4.1.1.RELEASE.jar:/Users/davis/maven/org/springframework/spring-oxm/4.1.1.RELEASE/spring-oxm-4.1.1.RELEASE.jar:/Users/davis/maven/org/springframework/spring-test/4.1.1.RELEASE/spring-test-4.1.1.RELEASE.jar:/Users/davis/maven/org/springframework/spring-tx/4.1.1.RELEASE/spring-tx-4.1.1.RELEASE.jar:/Users/davis/maven/org/springframework/spring-web/4.1.1.RELEASE/spring-web-4.1.1.RELEASE.jar:/Users/davis/maven/org/springframework/spring-webmvc/4.1.1.RELEASE/spring-webmvc-4.1.1.RELEASE.jar:/Users/davis/maven/org/springframework/spring-webmvc-portlet/4.1.1.RELEASE/spring-webmvc-portlet-4.1.1.RELEASE.jar:/Users/davis/maven/org/springframework/spring-websocket/4.1.1.RELEASE/spring-websocket-4.1.1.RELEASE.jar:/Users/davis/maven/commons-fileupload/commons-fileupload/1.3.1/commons-fileupload-1.3.1.jar:/Users/davis/maven/commons-io/commons-io/2.2/commons-io-2.2.jar:/Users/davis/maven/commons-dbcp/commons-dbcp/1.2.2/commons-dbcp-1.2.2.jar:/Users/davis/maven/commons-pool/commons-pool/1.4/commons-pool-1.4.jar:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar
java.vm.specification.version = 1.8
sun.arch.data.model = 64
sun.java.command = com.cw.tsb.jvm.JVMTest
java.home = /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre
user.language = zh
java.specification.vendor = Oracle Corporation
awt.toolkit = sun.lwawt.macosx.LWCToolkit
java.vm.info = mixed mode
java.version = 1.8.0_121
java.ext.dirs = /Users/davis/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
sun.boot.class.path = /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/classes
java.vendor = Oracle Corporation
file.separator = /
java.vendor.url.bug = http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding = UnicodeBig
sun.cpu.endian = little
socksNonProxyHosts = local|*.local|169.254/16|*.169.254/16
ftp.nonProxyHosts = local|*.local|169.254/16|*.169.254/16
sun.cpu.isalist =
Jstack 命令?
Usage:
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)
Options:
-F 強(qiáng)制打印線程棧信息,在jstack <pid>命令沒有響應(yīng)的時(shí)候添加該選項(xiàng)可以實(shí)現(xiàn)強(qiáng)制打印
-m (mix)混合模式,可以打印 Java 棧和本地方法棧
-l (long listing)長(zhǎng)列表模式. 額外打印關(guān)于鎖的信息
線程狀態(tài)轉(zhuǎn)移圖:
1、狀態(tài)含義
知識(shí)拓展:怎樣了解你的線程在干嘛?
Java語(yǔ)言定義了6種線程池狀態(tài):
- New:創(chuàng)建后尚未啟動(dòng)的線程處于這種狀態(tài),不會(huì)出現(xiàn)在Dump中。
- RUNNABLE:包括Running和Ready。線程開啟start()方法,會(huì)進(jìn)入該狀態(tài),在虛擬機(jī)內(nèi)執(zhí)行的。
- Waiting:無(wú)限的等待另一個(gè)線程的特定操作。
- Timed Waiting:有時(shí)限的等待另一個(gè)線程的特定操作。
- 阻塞(Blocked):在程序等待進(jìn)入同步區(qū)域的時(shí)候,線程將進(jìn)入這種狀態(tài),在等待監(jiān)視器鎖。
- 結(jié)束(Terminated):已終止線程的線程狀態(tài),線程已經(jīng)結(jié)束執(zhí)行。
Dump文件的線程狀態(tài)一般其實(shí)就以下3種:
- RUNNABLE,線程處于執(zhí)行中
- BLOCKED,線程被阻塞
- WAITING,線程正在等待
2、Monitor 監(jiān)視鎖
Monitor的工作原理圖如下:
- 線程想要獲取monitor,首先會(huì)進(jìn)入Entry Set隊(duì)列,它是Waiting Thread,線程狀態(tài)是Waiting for monitor entry。
- 當(dāng)某個(gè)線程成功獲取對(duì)象的monitor后,進(jìn)入Owner區(qū)域,它就是Active Thread。
- 如果線程調(diào)用了wait()方法,則會(huì)進(jìn)入Wait Set隊(duì)列,它會(huì)釋放monitor鎖,它也是Waiting Thread,線程狀態(tài)in Object.wait()
- 如果其他線程調(diào)用 notify() / notifyAll() ,會(huì)喚醒Wait Set中的某個(gè)線程,該線程再次嘗試獲取monitor鎖,成功即進(jìn)入Owner區(qū)域。
3、Dump 文件分析關(guān)注重點(diǎn)
- runnable,線程處于執(zhí)行中
- deadlock,死鎖(重點(diǎn)關(guān)注)
- blocked,線程被阻塞 (重點(diǎn)關(guān)注)
- Parked,停止
- locked,對(duì)象加鎖
- waiting,線程正在等待
- waiting to lock 等待上鎖
- Object.wait(),對(duì)象等待中
- waiting for monitor entry 等待獲取監(jiān)視器(重點(diǎn)關(guān)注)
- Waiting on condition,等待資源(重點(diǎn)關(guān)注),最常見的情況是線程在等待網(wǎng)絡(luò)的讀寫
Jmap 命令?
jmap(Java Virtual Machine Memory Map)是JDK提供的一個(gè)可以生成Java虛擬機(jī)的堆轉(zhuǎn)儲(chǔ)快照dump文件的命令行工具。除此以外,jmap命令還可以查看finalize執(zhí)行隊(duì)列、Java堆和方法區(qū)的詳細(xì)信息,比如空間使用率、當(dāng)前使用的什么垃圾回收器、分代情況等等。
命令語(yǔ)法:
jmap [options] pid
命令參數(shù)說(shuō)明:
-
option
:jmap命令的可選參數(shù)。如果沒有指定這個(gè)參數(shù),jinfo命令會(huì)顯示Java虛擬機(jī)進(jìn)程的內(nèi)存映像信息,如下圖:
-
pid
:要打印配置信息的Java虛擬機(jī)的進(jìn)程ID。
????????想要要獲取運(yùn)行的Java虛擬機(jī)進(jìn)程的列表,可以使用ps命令(Linux系統(tǒng)中)或tasklist命令(Windows系統(tǒng)中),如果Java虛擬機(jī)進(jìn)程沒有在單獨(dú)的docker實(shí)例中運(yùn)行,可以使用jps命令。
?1、- help 查看堆信息
顯示Java堆的如下信息:
- 被指定的垃圾回收算法的信息,包括垃圾回收算法的名稱和垃圾回收算法的詳細(xì)信息。
- 堆的配置信息,可能是由命令行選項(xiàng)指定,或者由Java虛擬機(jī)根據(jù)服務(wù)器配置選擇的。
- 堆的內(nèi)存空間使用信息,包括分代情況,每個(gè)代的總?cè)萘?、已使用?nèi)存、可使用內(nèi)存。如果某一代被繼續(xù)細(xì)分(例如,年輕代),則包含細(xì)分的空間的內(nèi)存使用信息。
?2、- histo[:live] 查看堆對(duì)象統(tǒng)計(jì)信息
????????顯示Java堆中對(duì)象的統(tǒng)計(jì)信息,包括:對(duì)象數(shù)量、占用內(nèi)存大小(單位:字節(jié))和類的完全限定名。比如:
?????????要獲得某個(gè)對(duì)象的大小,可以將其總大小除以該對(duì)象類型的數(shù)量。如果指定了live
參數(shù),則只計(jì)算活動(dòng)的對(duì)象。比如:
?3、- clstats 查看類加載器統(tǒng)計(jì)信息
顯示Java堆中元空間的類加載器的統(tǒng)計(jì)信息,包括:
- class_loader:當(dāng)Java虛擬機(jī)運(yùn)行時(shí),類加載器對(duì)象的地址
- classes:已加載類的數(shù)量
- bytes:該類加載器加載的所有類的元數(shù)據(jù)所占的字節(jié)數(shù)
-
parent_loader:父類加載器對(duì)象的地址,如果沒有顯示
null
。 - alive:是否存活的標(biāo)識(shí),表示類加載器對(duì)象是否將被垃圾回收。
- type:該類加載器的類名。
4、- finalizerinfo 查看等待線程
?顯示在F-Queue中等待Finalizer線程執(zhí)行finalize方法的對(duì)象。比如:
?5、- dump:[live,]format=b,file= 生成dump
生成Java虛擬機(jī)的堆轉(zhuǎn)儲(chǔ)快照dump文件。具體說(shuō)明如下:
-
live
參數(shù)是可選的,如果指定,則只轉(zhuǎn)儲(chǔ)堆中的活動(dòng)對(duì)象;如果沒有指定,則轉(zhuǎn)儲(chǔ)堆中的所有對(duì)象。 -
format=b
表示以hprof二進(jìn)制格式轉(zhuǎn)儲(chǔ)Java堆的內(nèi)存。 -
file=<filename>
用于指定快照dump文件的文件名。
?6、-F 強(qiáng)制模式
強(qiáng)制模式。如果指定的pid沒有響應(yīng),可以配合-dump
或-histo
一起使用。此模式下,不支持live參數(shù)。比如:
?Jstat 命令
命令用法:jstat [-命令選項(xiàng)] [vmid] [間隔時(shí)間/毫秒] [查詢次數(shù)]
C:\Users\Administrator>jstat -help
Usage: jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
Definitions:
<option> An option reported by the -options option
<vmid> Virtual Machine Identifier. A vmid takes the following form:
<lvmid>[@<hostname>[:<port>]]
Where <lvmid> is the local vm identifier for the target
Java virtual machine, typically a process id; <hostname> is
the name of the host running the target Java virtual machine;
and <port> is the port number for the rmiregistry on the
target host. See the jvmstat documentation for a more complete
description of the Virtual Machine Identifier.
<lines> Number of samples between header lines.
<interval> Sampling interval. The following forms are allowed:
<n>["ms"|"s"]
Where <n> is an integer and the suffix specifies the units as
milliseconds("ms") or seconds("s"). The default units are "ms".
<count> Number of samples to take before terminating.
-J<flag> Pass <flag> directly to the runtime system.
- option:參數(shù)選項(xiàng)
- -t:可以在打印的列加上Timestamp列,用于顯示系統(tǒng)運(yùn)行的時(shí)間
- -h:可以在周期性數(shù)據(jù)輸出的時(shí)候,指定輸出多少行以后輸出一次表頭
- vmid:Virtual Machine ID( 進(jìn)程的 pid)
- interval:執(zhí)行每次的間隔時(shí)間,單位為毫秒
- count:用于指定輸出多少次記錄,缺省則會(huì)一直打印
option 可以從下面參數(shù)中選擇文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-690861.html
jstat -options文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-690861.html
- -class 用于查看類加載情況的統(tǒng)計(jì)
- -compiler 用于查看HotSpot中即時(shí)編譯器編譯情況的統(tǒng)計(jì)
- -gc 用于查看JVM中堆的垃圾收集情況的統(tǒng)計(jì)
- -gccapacity 用于查看新生代、老生代及持久代的存儲(chǔ)容量情況
- -gcmetacapacity 顯示metaspace的大小
- -gcnew 用于查看新生代垃圾收集的情況
- -gcnewcapacity 用于查看新生代存儲(chǔ)容量的情況
- -gcold 用于查看老生代及持久代垃圾收集的情況
- -gcoldcapacity 用于查看老生代的容量
- -gcutil 顯示垃圾收集信息
- -gccause 顯示垃圾回收的相關(guān)信息(通-gcutil),同時(shí)顯示最后一次僅當(dāng)前正在發(fā)生的垃圾收集的原因
- -printcompilation 輸出JIT編譯的方法信息
1、-class 類加載統(tǒng)計(jì)
[root@hadoop ~]# jps #先通過(guò)jps獲取到j(luò)ava進(jìn)程號(hào)(這里是一個(gè)zookeeper進(jìn)程)
3346 QuorumPeerMain
7063 Jps
[root@hadoop ~]# jstat -class 3346 #統(tǒng)計(jì)JVM中加載的類的數(shù)量與size
Loaded Bytes Unloaded Bytes Time
1527 2842.7 0 0.0 1.02
- Loaded:加載類的數(shù)量
- Bytes:加載類的size,單位為Byte
- Unloaded:卸載類的數(shù)目
- Bytes:卸載類的size,單位為Byte
- Time:加載與卸載類花費(fèi)的時(shí)間
2、-compiler 編譯統(tǒng)計(jì)
[root@hadoop ~]# jstat -compiler 3346 #用于查看HotSpot中即時(shí)編譯器編譯情況的統(tǒng)計(jì)
Compiled Failed Invalid Time FailedType FailedMethod
404 0 0 0.19 0
- Compiled:編譯任務(wù)執(zhí)行數(shù)量
- Failed:編譯任務(wù)執(zhí)行失敗數(shù)量
- Invalid:編譯任務(wù)執(zhí)行失效數(shù)量
- Time:編譯任務(wù)消耗時(shí)間
- FailedType:最后一個(gè)編譯失敗任務(wù)的類型
- FailedMethod:最后一個(gè)編譯失敗任務(wù)所在的類及方法
3、-gc 垃圾回收統(tǒng)計(jì)
[root@hadoop ~]# jstat -gc 3346 #用于查看JVM中堆的垃圾收集情況的統(tǒng)計(jì)
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
128.0 128.0 0.0 128.0 1024.0 919.8 15104.0 2042.4 8448.0 8130.4 1024.0 996.0 7 0.019 0 0.000 0.019
- S0C:年輕代中第一個(gè)survivor(幸存區(qū))的容量 (字節(jié))
- S1C:年輕代中第二個(gè)survivor(幸存區(qū))的容量 (字節(jié))
- S0U:年輕代中第一個(gè)survivor(幸存區(qū))目前已使用空間 (字節(jié))
- S1U:年輕代中第二個(gè)survivor(幸存區(qū))目前已使用空間 (字節(jié))
- EC:年輕代中Eden(伊甸園)的容量 (字節(jié))
- EU:年輕代中Eden(伊甸園)目前已使用空間 (字節(jié))
- OC:Old代的容量 (字節(jié))
- OU:Old代目前已使用空間 (字節(jié))
- MC:metaspace(元空間)的容量 (字節(jié))
- MU:metaspace(元空間)目前已使用空間 (字節(jié))
- CCSC:當(dāng)前壓縮類空間的容量 (字節(jié))
- CCSU:當(dāng)前壓縮類空間目前已使用空間 (字節(jié))
- YGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
- YGCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c所用時(shí)間(s)
- FGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc次數(shù)
- FGCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc所用時(shí)間(s)
- GCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)gc用的總時(shí)間(s)
4、-gccapacity 堆內(nèi)存統(tǒng)計(jì)
[root@hadoop ~]# jstat -gccapacity 3346 #用于查看新生代、老生代及持久代的存儲(chǔ)容量情況
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
[root@hadoop ~]# jstat -gccapacity -h5 3346 1000 #-h5:每5行顯示一次表頭 1000:每1秒鐘顯示一次,單位為毫秒
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
- NGCMN:年輕代(young)中初始化(最小)的大小(字節(jié))
- NGCMX:年輕代(young)的最大容量 (字節(jié))
- NGC:年輕代(young)中當(dāng)前的容量 (字節(jié))
- S0C:年輕代中第一個(gè)survivor(幸存區(qū))的容量 (字節(jié))
- S1C:年輕代中第二個(gè)survivor(幸存區(qū))的容量 (字節(jié))
- EC:年輕代中Eden(伊甸園)的容量 (字節(jié))
- OGCMN:old代中初始化(最小)的大小 (字節(jié))
- OGCMX:old代的最大容量(字節(jié))
- OGC:old代當(dāng)前新生成的容量 (字節(jié))
- OC:Old代的容量 (字節(jié))
- MCMN:metaspace(元空間)中初始化(最小)的大小 (字節(jié))
- MCMX:metaspace(元空間)的最大容量 (字節(jié))
- MC:metaspace(元空間)當(dāng)前新生成的容量 (字節(jié))
- CCSMN:最小壓縮類空間大小
- CCSMX:最大壓縮類空間大小
- CCSC:當(dāng)前壓縮類空間大小
- YGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
- FGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc次數(shù)
5、-gcmetacapacity 元數(shù)據(jù)空間統(tǒng)計(jì)
[root@hadoop ~]# jstat -gcmetacapacity 3346 #顯示元數(shù)據(jù)空間的大小
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 8 0 0.000 0.020
- MCMN:最小元數(shù)據(jù)容量
- MCMX:最大元數(shù)據(jù)容量
- MC:當(dāng)前元數(shù)據(jù)空間大小
- CCSMN:最小壓縮類空間大小
- CCSMX:最大壓縮類空間大小
- CCSC:當(dāng)前壓縮類空間大小
- YGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
- FGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc次數(shù)
- FGCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc所用時(shí)間(s)
- GCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)gc用的總時(shí)間(s)
6、-gcnew 新生代垃圾回收統(tǒng)計(jì)
[root@hadoop ~]# jstat -gcnew 3346 #用于查看新生代垃圾收集的情況
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
128.0 128.0 67.8 0.0 1 15 64.0 1024.0 362.2 8 0.020
- S0C:年輕代中第一個(gè)survivor(幸存區(qū))的容量 (字節(jié))
- S1C:年輕代中第二個(gè)survivor(幸存區(qū))的容量 (字節(jié))
- S0U:年輕代中第一個(gè)survivor(幸存區(qū))目前已使用空間 (字節(jié))
- S1U:年輕代中第二個(gè)survivor(幸存區(qū))目前已使用空間 (字節(jié))
- TT:持有次數(shù)限制
- MTT:最大持有次數(shù)限制
- DSS:期望的幸存區(qū)大小
- EC:年輕代中Eden(伊甸園)的容量 (字節(jié))
- EU:年輕代中Eden(伊甸園)目前已使用空間 (字節(jié))
- YGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
- YGCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c所用時(shí)間(s)
7、-gcnewcapacity 新生代內(nèi)存統(tǒng)計(jì)
[root@hadoop ~]# jstat -gcnewcapacity 3346 #用于查看新生代存儲(chǔ)容量的情況
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
1280.0 83264.0 1280.0 8320.0 128.0 8320.0 128.0 66624.0 1024.0 8 0
- NGCMN:年輕代(young)中初始化(最小)的大小(字節(jié))
- NGCMX:年輕代(young)的最大容量 (字節(jié))
- NGC:年輕代(young)中當(dāng)前的容量 (字節(jié))
- S0CMX:年輕代中第一個(gè)survivor(幸存區(qū))的最大容量 (字節(jié))
- S0C:年輕代中第一個(gè)survivor(幸存區(qū))的容量 (字節(jié))
- S1CMX:年輕代中第二個(gè)survivor(幸存區(qū))的最大容量 (字節(jié))
- S1C:年輕代中第二個(gè)survivor(幸存區(qū))的容量 (字節(jié))
- ECMX:年輕代中Eden(伊甸園)的最大容量 (字節(jié))
- EC:年輕代中Eden(伊甸園)的容量 (字節(jié))
- YGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
- FGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc次數(shù)
8、-gcold 老年代垃圾回收統(tǒng)計(jì)
[root@hadoop ~]# jstat -gcold 3346 #用于查看老年代及持久代垃圾收集的情況
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
8448.0 8227.5 1024.0 1003.7 15104.0 2102.2 8 0 0.000 0.020
- MC:metaspace(元空間)的容量 (字節(jié))
- MU:metaspace(元空間)目前已使用空間 (字節(jié))
- CCSC:壓縮類空間大小
- CCSU:壓縮類空間使用大小
- OC:Old代的容量 (字節(jié))
- OU:Old代目前已使用空間 (字節(jié))
- YGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
- FGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc次數(shù)
- FGCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc所用時(shí)間(s)
- GCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)gc用的總時(shí)間(s)
9、-gcoldcapacity 老年代內(nèi)存統(tǒng)計(jì)
[root@hadoop ~]# jstat -gcoldcapacity 3346 #用于查看老年代的容量
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
15104.0 166592.0 15104.0 15104.0 8 0 0.000 0.020
- OGCMN:old代中初始化(最小)的大小 (字節(jié))
- OGCMX:old代的最大容量(字節(jié))
- OGC:old代當(dāng)前新生成的容量 (字節(jié))
- OC:Old代的容量 (字節(jié))
- YGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
- FGC:從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc次數(shù)
- FGCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc所用時(shí)間(s)
- GCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)gc用的總時(shí)間(s)
10、-gcutil 垃圾回收統(tǒng)計(jì)
[root@hadoop ~]# jstat -gcutil 3346 #顯示垃圾收集信息
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
52.97 0.00 42.10 13.92 97.39 98.02 8 0.020 0 0.000 0.020
- S0:年輕代中第一個(gè)survivor(幸存區(qū))已使用的占當(dāng)前容量百分比
- S1:年輕代中第二個(gè)survivor(幸存區(qū))已使用的占當(dāng)前容量百分比
- E:年輕代中Eden(伊甸園)已使用的占當(dāng)前容量百分比
- O:old代已使用的占當(dāng)前容量百分比
- M:元數(shù)據(jù)區(qū)已使用的占當(dāng)前容量百分比
- CCS:壓縮類空間已使用的占當(dāng)前容量百分比
- YGC :從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
- YGCT :從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c所用時(shí)間(s)
- FGC :從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc次數(shù)
- FGCT :從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc)gc所用時(shí)間(s)
- GCT:從應(yīng)用程序啟動(dòng)到采樣時(shí)gc用的總時(shí)間(s)
11、-gccause
[root@hadoop ~]# jstat -gccause 3346 #顯示垃圾回收的相關(guān)信息(通-gcutil),同時(shí)顯示最后一次或當(dāng)前正在發(fā)生的垃圾回收的誘因
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
52.97 0.00 46.09 13.92 97.39 98.02 8 0.020 0 0.000 0.020 Allocation Failure No GC
- LGCC:最后一次GC原因
- GCC:當(dāng)前GC原因(No GC 為當(dāng)前沒有執(zhí)行GC)
12、-printcompilation JVM編譯方法統(tǒng)計(jì)
[root@hadoop ~]# jstat -printcompilation 3346 #輸出JIT編譯的方法信息
Compiled Size Type Method
421 60 1 sun/nio/ch/Util$2 clear
- Compiled:編譯任務(wù)的數(shù)目
- Size:方法生成的字節(jié)碼的大小
- Type:編譯類型
- Method:類名和方法名用來(lái)標(biāo)識(shí)編譯的方法。類名使用/做為一個(gè)命名空間分隔符。方法名是給定類中的方法。上述格式是由-XX:+PrintComplation選項(xiàng)進(jìn)行設(shè)置的
到了這里,關(guān)于JVM調(diào)優(yōu)指令&參數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!