一、介绍
运用Jvm自带的命令可以方便的和监控和打印堆栈的日志信息帮忙我们来定位问题。虽然Jvm调用成熟的工具已经很多:jconsole、大名鼎鼎的VisualVM、IMBM的Memory Analyzer 等等。但是在生产环境出现问题的时候,使用这些环境的使用会有所限制,另一方面我们可以在终端输入一些命令来解决问题。所有的工具几乎都是依赖于jdk的接口和底层的这些命令,研究这些命令的使用也让我们更能了解Jvm的构成和特性。
Sum JDK 监控和故障处理命令有 jps、jstat、jmap、jhat、jstack、jinfo 下面一一进行介绍。
二、jps
jps(Jvm Process Status Tool):是用于查看有权访问的hostspot 虚拟机的进程,当未指定hostid时,默认是本机进程。否则查看指定的hostid机器上的jvm进程,此时hostid所指的机器必须开启jstatd服务。jvm可以列出jvm进程lvmid、主类类名、main函数参数、jvm参数、jar名称等信息。
2.1 命令格式
jps [options] [hostid]
options:命令选项(一次可使用多个),用来对输出格式进行控制
hostid:指定特定主机,可以是IP地址和域名,也可以是具体协议、端口。
2.2 参数说明
参数 | 说明 |
---|---|
-l | 输出主类全名或jar路径 |
-q | 只输出LVMID(Local Virtual Machine Identifier,本地虚拟机标识符) |
-m | 输出Jvm启动时传递给main()的参数 |
-v | 输出Jvm 启动时显示指定的jvm参数 |
2.3 使用示例
2.3.1 jps
使用 jps 命令,没有加 option 的时候,默认显示标识符号 和 简单的class 名称或jar名称。
hnbiandeMacBook-Pro:bin hnbian$ jps
1008 Launcher
1009 LoaderTest
1027 Jps
792
2.3.2 jps -l
jps -l: 输出LVMID 和 主类全名或jar路径
hnbiandeMacBook-Pro:bin hnbian$ jps -l
1008 org.jetbrains.jps.cmdline.Launcher
1009 com.hnbian.loader.LoaderTest
792
1035 sun.tools.jps.Jps
2.3.3 jps -q
jps -q:只输出LVMID(Local Virtual Machine Identifier,本地虚拟机标识符)
hnbiandeMacBook-Pro:bin hnbian$ jps -q
1076
1077
1095
792
2.3.4 jps -m
jps -m:输出LVMID 和 类名 和 Jvm启动时传递给main()的参数
hnbiandeMacBook-Pro:bin hnbian$ jps -m
1076 LoaderTest params #params 为传送的参数
1077 Launcher /Applications/IntelliJ IDEA.app/Contents/lib/plexus-component-annotations-1.6.jar:/Applications/IntelliJ IDEA.app/Contents/lib/aether-api-1.1.0.jar:/Applications/IntelliJ IDEA.app/Contents/lib/aether-transport-http-1.1.0.jar:/Applications/IntelliJ IDEA.app/Contents/lib/aether-util-1.1.0.jar:/Applications/IntelliJ IDEA.app/Contents/lib/lz4-1.3.0.jar:/Applications/IntelliJ IDEA.app/Contents/lib/httpcore-4.4.10.jar:/Applications/IntelliJ IDEA.app/Contents/lib/guava-25.1-jre.jar:/Applications/IntelliJ IDEA.app/Contents/lib/asm-all-7.0.jar:/Applications/IntelliJ IDEA.app/Contents/lib/util.jar:/Applications/IntelliJ IDEA.app/Contents/lib/platform-api.jar:/Applications/IntelliJ IDEA.app/Contents/lib/plexus-interpolation-1.21.jar:/Applications/IntelliJ IDEA.app/Contents/lib/aether-spi-1.1.0.jar:/Applications/IntelliJ IDEA.app/Contents/lib/protobuf-java-3.4.0.jar:/Applications/IntelliJ IDEA.app/Contents/lib/aether-connector-basic-1.1.0.jar:/Applications/IntelliJ IDEA.app/Contents/lib
1078 Jps -m
792
2.3.5 jps -v
jps -v:输出Jvm 启动时显示指定的jvm参数
hnbiandeMacBook-Pro:bin hnbian$ jps -v
1076 LoaderTest -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=50744:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8
1077 Launcher -Xmx700m -Djava.awt.headless=true -Djava.endorsed.dirs="" -Djdt.compiler.useSingleThread=true -Dpreload.project.path=/Users/hnbian/Documents/GitHub/MyJava -Dpreload.config.path=/Users/hnbian/Library/Preferences/IntelliJIdea2018.3/options -Dcompile.parallel=false -Drebuild.on.dependency.change=true -Djava.net.preferIPv4Stack=true -Dio.netty.initialSeedUniquifier=6886927916990474178 -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IntelliJIdea2018.3 -Didea.home.path=/Applications/IntelliJ IDEA.app/Contents -Didea.config.path=/Users/hnbian/Library/Preferences/IntelliJIdea2018.3 -Didea.plugins.path=/Users/hnbian/Library/Application Support/IntelliJIdea2018.3 -Djps.log.dir=/Users/hnbian/Library/Logs/IntelliJIdea2018.3/build-log -Djps.fallback.jdk.home=/Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre -Djps.fallback.jdk.version=1.8.0_152-release -Dio.netty.noUnsafe=true -Djava.io.tmpdir=/Users/hnbian/Library/Caches/IntelliJIdea2018.3/compile-server/myjava_e835943a/_temp_
792 -Xms512m -Xmx2048m -XX:ReservedCodeCacheSize=512m -XX:+UseCompressedOops -Dfile.encoding=UTF-8 -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djdk.http.auth.tunneling.disabledSchemes="" -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Xverify:none -XX:ErrorFile=/Users/hnbian/java_error_in_idea_%p.log -XX:HeapDumpPath=/Users/hnbian/java_error_in_idea.hprof -Djb.vmOptionsFile=/Applications/IntelliJ IDEA.app/Contents/bin/idea.vmoptions -Didea.java.redist=jdk-bundled -Didea.home.path=/Applications/IntelliJ IDEA.app/Contents -Didea.executable=idea -Didea.paths.selector=IntelliJIdea2018.3
1098 Jps -Dapplication.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home -Xms8m
2.3.6 jps -l -m
jps -l -m:输出LVMID 和 主类全名或jar路径 和 Jvm启动时传递给main()的参数
1076 com.hnbian.loader.LoaderTest params
1077 org.jetbrains.jps.cmdline.Launcher /Applications/IntelliJ IDEA.app/Contents/lib/plexus-component-annotations-1.6.jar:/Applications/IntelliJ IDEA.app/Contents/lib/aether-api-1.1.0.jar:/Applications/IntelliJ IDEA.app/Contents/lib/aether-transport-http-1.1.0.jar:/Applications/IntelliJ IDEA.app/Contents/lib/aether-util-1.1.0.jar:/Applications/IntelliJ IDEA.app/Contents/lib/lz4-1.3.0.jar:/Applications/IntelliJ IDEA.app/Contents/lib/httpcore-4.4.10.jar:/Applications/IntelliJ IDEA.app/Contents/lib/guava-25.1-jre.jar:/Applications/IntelliJ IDEA.app/Contents/lib/asm-all-7.0.jar:/Applications/IntelliJ IDEA.app/Contents/lib/util.jar:/Applications/IntelliJ IDEA.app/Contents/lib/platform-api.jar:/Applications/IntelliJ IDEA.app/Contents/lib/plexus-interpolation-1.21.jar:/Applications/IntelliJ IDEA.app/Contents/lib/aether-spi-1.1.0.jar:/Applications/IntelliJ IDEA.app/Contents/lib/protobuf-java-3.4.0.jar:/Applications/IntelliJ IDEA.app/Contents/lib/aether-connector-basic-1.1.0.jar:/Applications/IntelliJ IDEA.app/Contents/lib
792
1102 sun.tools.jps.Jps -l -m
三、jstat
jstat (Jvm statistics Monitoring)是用于监视虚拟机运行时状态信息的命令,它可以显示出本地或者远程虚拟机进程中类装载、内存、垃圾收集、JIT编译( just in time,即时编译器)等运行数据。在没有GUI 图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。
3.1 命令格式与参数说明
jstat [option] LVMID [interval] [count]
jstat | [option] | LVMID | [interval] | [count] |
---|---|---|---|---|
jstat命令 | 操作参数 | 本地虚拟机进程ID | 连续输出的时间间隔 | 连续输出的次数 |
3.2 参数说明
参数 | 说明 |
---|---|
-class | class loader (类加载器)的行为统计。 |
-compiler | HotSpt JIT(just in time,即时)编译器行为统计。 |
-gc | 垃圾回收堆(heap)的行为统计。 |
-gccapacity | 各个垃圾回收代容量(young、old、perm)和他们相应的空间统计。 |
-gcutil | 垃圾税收统计概述。 |
-gccause | 垃圾收集统计概述(同一gcutil),附加最近两次垃圾回收事件的原因。 |
-gcnew | 新生代行为统计。 |
-gcnewcapacity | 新生代与其相应的内存空间的统计。 |
-gcold | 老年代和永生代行为统计。 |
-gcoldcapacity | 老年代行为统计。 |
-gcpermcapacity | 永生代行为统计 |
-printcompilation | HotSpot编译方法统计 |
3.3 使用示例
在使用 jstat 之前我们先使用 jps -l 命令看一下现在有哪些运行中的进程
hnbiandeMacBook-Pro:bin hnbian$ jps -l
1216 org.jetbrains.jps.cmdline.Launcher
1217 com.hnbian.loader.LoaderTest
1219 sun.tools.jps.Jps
3.3.1 jstat -class
jstat -class 1217: 监视类装载、卸载数量、总空间以及消耗的时间。
hnbiandeMacBook-Pro:bin hnbian$ jstat -class 1217
Loaded Bytes Unloaded Bytes Time
591 1191.7 0 0.0 0.08
- 详细说明
列名 | 数值 | 说明 |
---|---|---|
Loaded | 591 | 加载class的数量 |
Bytes | 1191.7 | class字节大小 |
Unloaded | 0 | 未加载class的数量 |
Bytes | 0.0 | 未加载class的字节大小 |
Time | 0.08 | 加载时间 |
3.3.2 jstat -compiler
jstat -compiler 1217:输出JIT编译过的方法数量耗时等。
hnbiandeMacBook-Pro:bin hnbian$ jstat -compiler 1217
Compiled Failed Invalid Time FailedType FailedMethod
71 0 0 0.02 0
hnbiandeMacBook-Pro:bin hnbian$ jstat -compiler 1217 200 3 # 每隔200秒打印一次,一共打印三次
Compiled Failed Invalid Time FailedType FailedMethod
71 0 0 0.02 0
71 0 0 0.02 0
71 0 0 0.02 0
- 详细说明
列名 | 数值 | 说明 |
---|---|---|
Compiled | 71 | 编译数量 |
Failed | 0 | 编译失败数量 |
Invalid | 0 | 无效数量 |
Time | 0.02 | 编译耗时 |
FailedType | 0 | 失败类型 |
FailedMethod | 失败方法的全限定名 |
3.3.3 jstat -gc
jstat -gc 1217:垃圾回收堆的行为统计,常用命令
hnbiandeMacBook-Pro:bin hnbian$ jstat -gc 1217
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
10752.0 10752.0 0.0 0.0 65536.0 6554.0 175104.0 0.0 4480.0 779.9 384.0 76.4 0 0.000 0 0.000 0.000
hnbiandeMacBook-Pro:bin hnbian$ jstat -gc 1217 2000 2 #这个命令的意思是每隔 2000ms (2秒) 输出 1217的GC情况,一共输出2次。
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
10752.0 10752.0 0.0 0.0 65536.0 6554.0 175104.0 0.0 4480.0 779.9 384.0 76.4 0 0.000 0 0.000 0.000
10752.0 10752.0 0.0 0.0 65536.0 6554.0 175104.0 0.0 4480.0 779.9 384.0 76.4 0 0.000 0 0.000 0.000
- 详细说明
C 即 Capacity 总容量。
U 即 Used 已使用的容量。
列名 | 数值 | 说明 |
---|---|---|
S0C | 10752.0 | survivor0区的总容量 |
S1C | 10752.0 | survivor1区的总容量 |
S0U | 0.0 | survivor0区的已使用的容量 |
S1U | 0.0 | survivor1区的已使用的容量 |
EC | 65536.0 | Eden区的总容量 |
EU | 6554.0 | Eden区已使用的容量 |
OC | 175104.0 | Old区的总容量 |
OU | 0.0 | Old区已使用的容量 |
MC | 4480.0 | 方法区大小 |
MU | 779.9 | 方法区使用大小 |
CCSC | 384.0 | 压缩类空间大小 |
CCSU | 76.4 | 压缩类空间使用大小 |
YGC | 0 | 新生代垃圾回收次数 |
YGCT | 0.000 | 新生代垃圾回收时间 |
FGC | 0 | 老年代垃圾回收次数 |
FGCT | 0.000 | 老年代垃圾回收时间 |
GCT | 0.000 | 垃圾回收总消耗时间 |
3.3.4 jstat -gccapacity
jstat -gccapacity 1217 :该参数与 gc 参数功能相似,不过会给出更详细的信息,增加了Java堆各区域使用到的最大、最小空间。
hnbiandeMacBook-Pro:bin hnbian$ jstat -gccapacity 1217
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
87040.0 1397760.0 87040.0 10752.0 10752.0 65536.0 175104.0 2796544.0 175104.0 175104.0 0.0 1056768.0 4480.0 0.0 1048576.0 384.0 0 0
- 详细说明
列名 | 数值 | 说明 |
---|---|---|
NGCMN | 87040.0 | 新生代占用的最小空间 |
NGCMX | 1397760.0 | 新生代占用的最大空间 |
NGC | 87040.0 | 当前新生代容量 |
S0C | 10752.0 | survivor0区的总容量 |
S1C | 10752.0 | survivor1区的总容量 |
EC | 65536.0 | Eden区的总容量 |
OGCMN | 175104.0 | 老年代占用的最小空间 |
OGCMX | 2796544.0 | 老年代占用的最大空间 |
OGC | 175104.0 | 当前老年代容量(KB) |
OC | 175104.0 | 当前老年代的空间(KB) |
MCMN | 0.0 | 最小元数据容量 |
MCMX | 1056768.0 | 最大元数据容量 |
MC | 4480.0 | 当前元数据空间大小 |
CCSMN | 0.0 | 压缩类占用的最小空间 |
CCSMX | 1048576.0 | 压缩类占用的最大空间 |
CCSC | 384.0 | 压缩类空间大小 |
YGC | 0 | 新生代垃圾回收次数 |
FGC | 0 | 老年代垃圾回收次数 |
3.3.5 jstat -gcutil
jstat -gcutil 1217:同-gc,不过输出的是已使用空间占总空间的百分比
hnbiandeMacBook-Pro:bin hnbian$ jstat -gcutil 1217
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 10.00 0.00 17.41 19.90 0 0.000 0 0.000 0.000
- 详细说明
列名 | 数值 | 说明 |
---|---|---|
S0 | 0.00 | survivor0区使用占比 |
S1 | 0.00 | survivor1区使用占比 |
E | 10.00 | Eden区的使用占比 |
O | 0.00 | 老年代使用占比 |
M | 17.41 | 元数据区使用比例 |
CCS | 19.90 | 压缩使用比例 |
YGC | 0 | 年轻代垃圾回收次数 |
YGCT | 0.000 | 年轻代垃圾回收消耗时间 |
FGC | 0 | 老年代垃圾回收次数 |
FGCT | 0.000 | 老年代垃圾回收消耗时间 |
GCT | 0.000 | 垃圾回收消耗总时间 |
3.3.6 jstat -gccause
jstat -gccause 1217:垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因
hnbiandeMacBook-Pro:bin hnbian$ jstat -gccause 1217
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
0.00 0.00 10.00 0.00 17.41 19.90 0 0.000 0 0.000 0.000 No GC No GC
- 详细说明
列名 | 数值 | 说明 |
---|---|---|
S0 | 0.00 | survivor0区使用占比 |
S1 | 0.00 | survivor1区使用占比 |
E | 10.00 | Eden区的使用占比 |
O | 0.00 | 老年代使用占比 |
M | 17.41 | 元数据区使用比例 |
CCS | 19.90 | 压缩使用比例 |
YGC | 0 | 年轻代垃圾回收次数 |
YGCT | 0.000 | 年轻代垃圾回收消耗时间 |
FGC | 0 | 老年代垃圾回收次数 |
FGCT | 0.000 | 老年代垃圾回收消耗时间 |
GCT | 0.000 | 垃圾回收消耗总时间 |
LGCC | No GC | 最近垃圾回收的原因 |
GCC | No GC | 当前垃圾回收的原因 |
3.3.7 jstat -gcnew
jstat -gcnew 1217:统计新生代的行为
hnbiandeMacBook-Pro:bin hnbian$ jstat -gcnew 1217
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
10752.0 10752.0 0.0 0.0 15 15 0.0 65536.0 6554.0 0 0.000
- 详细说明
列名 | 数值 | 说明 |
---|---|---|
S0C | 10752.0 | survivor0区的总容量 |
S1C | 10752.0 | survivor1区的总容量 |
S0U | 0.0 | survivor0区的已使用的容量 |
S1U | 0.0 | survivor1区的已使用的容量 |
TT | 15 | Tenuring threshold (提升阈值) |
MTT | 15 | 最大的Tenuring threshold |
DSS | 0.0 | survivor区域大小(KB) |
EC | 65536.0 | Eden区的总容量 |
EU | 6554.0 | Eden区已使用的容量 |
YGC | 0 | 新生代垃圾回收次数 |
YGCT | 0.000 | 新生代垃圾回收时间 |
3.3.8 jstat -gcnewcapacity
jstat -gcnewcapacity 1217:新生代与其相应的内存空间的统计
hnbiandeMacBook-Pro:bin hnbian$ jstat -gcnewcapacity 1217
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
87040.0 1397760.0 87040.0 465920.0 10752.0 465920.0 10752.0 1396736.0 65536.0 0 0
- 详细说明
列名 | 数值 | 说明 |
---|---|---|
NGCMN | 87040.0 | 新生代占用的最小空间 |
NGCMX | 1397760.0 | 新生代占用的最大空间 |
NGC | 87040.0 | 当前新生代容量(KB) |
S0CMX | 465920.0 | 最大的S0空间(KB) |
S0C | 10752.0 | 当前S0空间(KB) |
S1CMX | 465920.0 | 最大的S1空间(KB) |
S1C | 10752.0 | 当前S1空间(KB) |
ECMX | 1396736.0 | 最大Eden空间(KB) |
EC | 65536.0 | 当前Eden空间(KB) |
YGC | 0 | 新生代垃圾回收次数 |
FGC | 0 | 老年代垃圾回收次数 |
3.3.9 jstat -gcold
jstat -gcold 1217:统计老年代的行为
hnbiandeMacBook-Pro:bin hnbian$ jstat -gcold 1217
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
4480.0 779.9 384.0 76.4 175104.0 0.0 0 0 0.000 0.000
- 详细说明
列名 | 数值 | 说明 |
---|---|---|
MC | 4480.0 | 方法区大小 |
MU | 779.9 | 方法区使用大小 |
CCSC | 384.0 | 压缩类空间大小 |
CCSU | 76.4 | 压缩类空间使用大小 |
OC | 175104.0 | 老年代大小 |
OU | 0.0 | 老年代使用大小 |
YGC | 0 | 年轻代垃圾回收次数 |
FGC | 0 | 老年代垃圾回收次数 |
FGCT | 0.000 | 老年代垃圾回收消耗时间 |
GCT | 0.000 | 垃圾回收消耗总时间 |
3.3.10 gcoldcapacity
统计老年代的大小和空间
hnbiandeMacBook-Pro:bin hnbian$ jstat -gcoldcapacity 1217
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
175104.0 2796544.0 175104.0 175104.0 0 0 0.000 0.000
- 详细说明
列名 | 数值 | 说明 |
---|---|---|
OGCMN | 175104.0 | 老年代占用的最小空间 |
OGCMX | 2796544.0 | 老年代占用的最大空间 |
OGC | 175104.0 | 当前老年代容量(KB) |
OC | 175104.0 | 当前老年代的空间(KB) |
YGC | 0 | 新生代垃圾回收次数 |
FGC | 0 | 老年代垃圾回收次数 |
FGCT | 0.000 | 老年代垃圾回收消耗时间 |
GCT | 0.000 | 垃圾回收消耗总时间 |
3.3.11 jstat -gcmetacapacity
显示metaspace的大小
hnbiandeMacBook-Pro:bin hnbian$ jstat -gcmetacapacity 1217
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
0.0 1056768.0 4480.0 0.0 1048576.0 384.0 0 0 0.000 0.000
- 详细说明
列名 | 数值 | 说明 |
---|---|---|
MCMN | 0.0 | 最小元数据容量 |
MCMX | 1056768.0 | 最大元数据容量 |
MC | 4480.0 | 当前元数据空间大小 |
CCSMN | 0.0 | 压缩类占用的最小空间 |
CCSMX | 1048576.0 | 压缩类占用的最大空间 |
CCSC | 384.0 | 压缩类空间大小 |
YGC | 0 | 新生代垃圾回收次数 |
FGC | 0 | 老年代垃圾回收次数 |
FGCT | 0.000 | 老年代垃圾回收消耗时间 |
GCT | 0.000 | 垃圾回收消耗总时间 |
3.3.12 jstat -printcompilation
jstat -printcompilation 1217:hotspot编译方法统计
hnbiandeMacBook-Pro:bin hnbian$ jstat -printcompilation 1217
Compiled Size Type Method
71 13 1 java/lang/AbstractStringBuilder <init>
- 详细说明
列名 | 数值 | 说明 |
---|---|---|
Compiled | 71 | 被执行的编译任务的数量 |
Size | 13 | 方法字节码的字节数 |
Type | 1 | 编译类型 |
Method | java/lang/AbstractStringBuilder <init> | 编译方法的类名和方法名。类名使用”/” 代替 “.” 作为空间分隔符. 方法名是给出类的方法名. 格式是一致于HotSpot - XX:+PrintComplation 选项 |
四、jinfo
jinfo (configuration info for java):作用是实时地查看和调整虚拟机各项参数。使用jps -v 命令参数可以查看虚拟机启动时显式指定的参数列表,但是如果想知道未被显式指定的参数的系统默认值,除了找资料以外,还能使用info -flag 选项进行查询。
4.1 命令格式
jinfo [option] [args] LVMID
4.2 参数说明
参数 | 说明 |
---|---|
-flag | 输出指定args参数的值 |
-flag [+ or -]<name> | 启用或停用某个参数 |
-flag |
给某个参数设置值 |
-flags | 不需要args参数,输出所有JVM参数的值 |
-sysprops | 输出系统属性,等同于System.getProperties() |
4.3 使用示例
4.3.1 jinfo -flag
jinfo -flag CICompilerCount 3446:查看编译线程数,默认是2
[root@node1 ~]# jinfo -flag CICompilerCount 3446
-XX:CICompilerCount=2
4.3.2 jinfo -flag [+ or -]<name>
- 开启GC日志
[root@node1 ~]# #开启GC日志
[root@node1 ~]# jinfo -flag +PrintGCDetails 3446
[root@node1 ~]# jinfo -flag +PrintGC 3446
[root@node1 ~]#
[root@node1 ~]# jinfo -flags 3446
Attaching to process ID 3446, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.191-b12
Non-default VM flags: -XX:CICompilerCount=2 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=null -XX:InitialHeapSize=31457280 -XX:+ManagementServer -XX:MaxHeapSize=1048576000 -XX:MaxNewSize=349503488 -XX:MinHeapDeltaBytes=196608 -XX:NewSize=10485760 -XX:OldSize=20971520 -XX:OnOutOfMemoryError=null -XX:+PrintGC -XX:+PrintGCDetails -XX:+UseCompressedClassPointers -XX:+UseCompressedOops
Command line: -Dzookeeper.log.dir=/opt/zookeeper-3.5.6/bin/../logs -Dzookeeper.log.file=zookeeper-root-server-node1.log -Dzookeeper.root.logger=INFO,CONSOLE -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError=kill -9 %p -Xmx1000m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false
- 关闭GC日志
[root@node1 ~]# #关闭GC日志
[root@node1 ~]# jinfo -flag -PrintGCDetails 3446
[root@node1 ~]# jinfo -flag -PrintGC 3446
[root@node1 ~]#
[root@node1 ~]# jinfo -flags 3446
Attaching to process ID 3446, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.191-b12
Non-default VM flags: -XX:CICompilerCount=2 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=null -XX:InitialHeapSize=31457280 -XX:+ManagementServer -XX:MaxHeapSize=1048576000 -XX:MaxNewSize=349503488 -XX:MinHeapDeltaBytes=196608 -XX:NewSize=10485760 -XX:OldSize=20971520 -XX:OnOutOfMemoryError=null -XX:-PrintGC -XX:-PrintGCDetails -XX:+UseCompressedClassPointers -XX:+UseCompressedOops
Command line: -Dzookeeper.log.dir=/opt/zookeeper-3.5.6/bin/../logs -Dzookeeper.log.file=zookeeper-root-server-node1.log -Dzookeeper.root.logger=INFO,CONSOLE -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError=kill -9 %p -Xmx1000m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false
4.3.3 jinfo -flag <name>=<value>
jinfo -flag HeapDumpPath=/opt/jvmlog:设置 HeapDumpPath
[root@node1 ~]# jinfo -flag HeapDumpPath=/opt/jvmlog 3446
[root@node1 ~]#
[root@node1 ~]# jinfo -flag HeapDumpPath 3446 # 查看设置是否成功
-XX:HeapDumpPath=/opt/jvmlog
哪些参数是允许动态修改的呢,用下面这个命令可以查看
Linux 和 Mac
java -XX:+PrintFlagsInitial | grep manageablewindows
java -XX:+PrintFlagsInitial | findstr manageable
[root@node1 ~]# java -XX:+PrintFlagsInitial | grep manageable ## mac 环境查看哪些参数可以动态调整
intx CMSAbortablePrecleanWaitMillis = 100 {manageable}
intx CMSTriggerInterval = -1 {manageable}
intx CMSWaitDuration = 2000 {manageable}
bool HeapDumpAfterFullGC = false {manageable}
bool HeapDumpBeforeFullGC = false {manageable}
bool HeapDumpOnOutOfMemoryError = false {manageable}
ccstr HeapDumpPath = {manageable}
uintx MaxHeapFreeRatio = 70 {manageable}
uintx MinHeapFreeRatio = 40 {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 PrintGCID = false {manageable}
bool PrintGCTimeStamps = false {manageable}
4.3.4 jinfo -flags
jinfo -flags 3446:输出所有JVM参数的值
[root@node1 ~]# jinfo -flags 3446
Attaching to process ID 3446, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.191-b12
Non-default VM flags: -XX:CICompilerCount=2 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=null -XX:InitialHeapSize=31457280 -XX:+ManagementServer -XX:MaxHeapSize=1048576000 -XX:MaxNewSize=349503488 -XX:MinHeapDeltaBytes=196608 -XX:NewSize=10485760 -XX:OldSize=20971520 -XX:OnOutOfMemoryError=null -XX:+PrintGC -XX:+UseCompressedClassPointers -XX:+UseCompressedOops
Command line: -Dzookeeper.log.dir=/opt/zookeeper-3.5.6/bin/../logs -Dzookeeper.log.file=zookeeper-root-server-node1.log -Dzookeeper.root.logger=INFO,CONSOLE -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError=kill -9 %p -Xmx1000m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false
4.3.5 jinfo -sysprops
jinfo -sysprops 3446:输出系统属性
[root@node1 ~]# jinfo -sysprops 3446
Attaching to process ID 3446, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.191-b12
java.runtime.name = Java(TM) SE Runtime Environment
java.vm.version = 25.191-b12
sun.boot.library.path = /opt/jdk1.8.0_191/jre/lib/amd64
zookeeper.root.logger = INFO,CONSOLE
java.vendor.url = http://java.oracle.com/
java.vm.vendor = Oracle Corporation
com.sun.management.jmxremote.local.only = false
path.separator = :
java.rmi.server.randomIDs = true
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 = /opt/zookeeper-3.5.6
java.vm.specification.name = Java Virtual Machine Specification
java.runtime.version = 1.8.0_191-b12
java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
os.arch = amd64
java.endorsed.dirs = /opt/jdk1.8.0_191/jre/lib/endorsed
zookeeper.log.dir = /opt/zookeeper-3.5.6/bin/../logs
line.separator =
java.io.tmpdir = /tmp
java.vm.specification.vendor = Oracle Corporation
os.name = Linux
sun.jnu.encoding = UTF-8
jetty.git.hash = aa1c656c315c011c01e7b21aabb04066635b9f67
java.library.path = /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
java.specification.name = Java Platform API Specification
java.class.version = 52.0
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
os.version = 3.10.0-862.9.1.el7.x86_64
user.home = /root
user.timezone = GMT+08:00
java.awt.printerjob = sun.print.PSPrinterJob
file.encoding = UTF-8
java.specification.version = 1.8
user.name = root
java.class.path = /opt/zookeeper-3.5.6/bin/../zookeeper-server/target/classes:/opt/zookeeper-3.5.6/bin/../build/classes:/opt/zookeeper-3.5.6/bin/../zookeeper-server/target/lib/*.jar:/opt/zookeeper-3.5.6/bin/../build/lib/*.jar:/opt/zookeeper-3.5.6/bin/../lib/zookeeper-jute-3.5.6.jar:/opt/zookeeper-3.5.6/bin/../lib/zookeeper-3.5.6.jar:/opt/zookeeper-3.5.6/bin/../lib/slf4j-log4j12-1.7.25.jar:/opt/zookeeper-3.5.6/bin/../lib/slf4j-api-1.7.25.jar:/opt/zookeeper-3.5.6/bin/../lib/netty-transport-native-unix-common-4.1.42.Final.jar:/opt/zookeeper-3.5.6/bin/../lib/netty-transport-native-epoll-4.1.42.Final.jar:/opt/zookeeper-3.5.6/bin/../lib/netty-transport-4.1.42.Final.jar:/opt/zookeeper-3.5.6/bin/../lib/netty-resolver-4.1.42.Final.jar:/opt/zookeeper-3.5.6/bin/../lib/netty-handler-4.1.42.Final.jar:/opt/zookeeper-3.5.6/bin/../lib/netty-common-4.1.42.Final.jar:/opt/zookeeper-3.5.6/bin/../lib/netty-codec-4.1.42.Final.jar:/opt/zookeeper-3.5.6/bin/../lib/netty-buffer-4.1.42.Final.jar:/opt/zookeeper-3.5.6/bin/../lib/log4j-1.2.17.jar:/opt/zookeeper-3.5.6/bin/../lib/json-simple-1.1.1.jar:/opt/zookeeper-3.5.6/bin/../lib/jline-2.11.jar:/opt/zookeeper-3.5.6/bin/../lib/jetty-util-9.4.17.v20190418.jar:/opt/zookeeper-3.5.6/bin/../lib/jetty-servlet-9.4.17.v20190418.jar:/opt/zookeeper-3.5.6/bin/../lib/jetty-server-9.4.17.v20190418.jar:/opt/zookeeper-3.5.6/bin/../lib/jetty-security-9.4.17.v20190418.jar:/opt/zookeeper-3.5.6/bin/../lib/jetty-io-9.4.17.v20190418.jar:/opt/zookeeper-3.5.6/bin/../lib/jetty-http-9.4.17.v20190418.jar:/opt/zookeeper-3.5.6/bin/../lib/javax.servlet-api-3.1.0.jar:/opt/zookeeper-3.5.6/bin/../lib/jackson-databind-2.9.10.jar:/opt/zookeeper-3.5.6/bin/../lib/jackson-core-2.9.10.jar:/opt/zookeeper-3.5.6/bin/../lib/jackson-annotations-2.9.10.jar:/opt/zookeeper-3.5.6/bin/../lib/commons-cli-1.2.jar:/opt/zookeeper-3.5.6/bin/../lib/audience-annotations-0.5.0.jar:/opt/zookeeper-3.5.6/bin/../zookeeper-*.jar:/opt/zookeeper-3.5.6/bin/../zookeeper-server/src/main/resources/lib/*.jar:/opt/zookeeper-3.5.6/bin/../conf:
com.sun.management.jmxremote =
java.vm.specification.version = 1.8
sun.arch.data.model = 64
sun.java.command = org.apache.zookeeper.server.quorum.QuorumPeerMain /opt/zookeeper-3.5.6/bin/../conf/zoo.cfg
java.home = /opt/jdk1.8.0_191/jre
user.language = zh
java.specification.vendor = Oracle Corporation
awt.toolkit = sun.awt.X11.XToolkit
zookeeper.server.0 = node1:2888:3888
java.vm.info = mixed mode
java.version = 1.8.0_191
java.ext.dirs = /opt/jdk1.8.0_191/jre/lib/ext:/usr/java/packages/lib/ext
sun.boot.class.path = /opt/jdk1.8.0_191/jre/lib/resources.jar:/opt/jdk1.8.0_191/jre/lib/rt.jar:/opt/jdk1.8.0_191/jre/lib/sunrsasign.jar:/opt/jdk1.8.0_191/jre/lib/jsse.jar:/opt/jdk1.8.0_191/jre/lib/jce.jar:/opt/jdk1.8.0_191/jre/lib/charsets.jar:/opt/jdk1.8.0_191/jre/lib/jfr.jar:/opt/jdk1.8.0_191/jre/classes
java.vendor = Oracle Corporation
file.separator = /
java.vendor.url.bug = http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding = UnicodeLittle
sun.cpu.endian = little
zookeeper.log.file = zookeeper-root-server-node1.log
sun.cpu.isalist =