06-jvm-查询命令-01

查询jvm中的信息

运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole、大名鼎鼎的VisualVM,IBM的Memory Analyzer等等,但是在生产环境出现问题的时候,一方面工具的使用会有所限制,另一方面喜欢装X的我们,总喜欢在出现问题的时候在终端输入一些命令来解决。所有的工具几乎都是依赖于jdk的接口和底层的这些命令,研究这些命令的使用也让我们更能了解jvm构成和特性。

命令分类
  • jps
  • jstat
  • jmap
  • jhat
  • jstack
  • jinfo
jps

jps是jdk提供的一个查看当前java进程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的缩写。非常简单实用。

命令格式
jps [options ] [ hostid ] 

options 参数

  • -l:输出主类全名或jar的路径
  • -q:仅输出VM标识符
  • -m:输出jvm启动时,传递给main()的参数
  • -v:输出JVM启动时显示指定的jvm参数
示例

C:\Users\Administrator>jps -l
11204
3876 sun.tools.jps.Jps
6324 org.jetbrains.idea.maven.server.RemoteMavenServer
14680 org.jetbrains.jps.cmdline.Launcher
6488 com.tianshen.mini.apps.stepsns.StepSnsApplication
8988 org.jetbrains.kotlin.daemon.KotlinCompileDaemon

C:\Users\Administrator>jps -q
14240
11204
6324
14680
6488
8988

C:\Users\Administrator>jps -m
11204
6324 RemoteMavenServer
14680 Launcher D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/maven-builder-support-3.3.9.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/netty-transport-4.1.32.Final.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/aether-connector-basic-1.1.0.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/aether-dependency-resolver.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/jps-model.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/maven-artifact-3.3.9.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/netty-common-4.1.32.Final.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/idea_rt.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/annotations.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/plexus-utils-3.0.22.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/maven-model-3.3.9.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/netty-codec-4.1.32.Final.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/aether-transport-http-1.1.0.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/li
6488 StepSnsApplication
15932 Jps -m
8988 KotlinCompileDaemon --daemon-runFilesPath C:\Users\Administrator\AppData\Local\kotlin\daemon --daemon-autoshutdownIdleSeconds=7200 --daemon-compilerClasspath D:\workpath\JetBrains\IntelliJ IDEA 2019.1\plugins\Kotlin\kotlinc\lib\kotlin-compiler.jar;D:\workpath\java\jdk1.8.0_201\lib\tools.jar

C:\Users\Administrator>jps -v
16304 Jps -Denv.class.path=.;D:\workpath\java\jdk1.8.0_201\lib\dt.jar;D:\workpath\java\jdk1.8.0_201\lib\tools.jar; -Dapplication.home=D:\workpath\java\jdk1.8.0_201 -Xms8m
11204  -Xms128m -Xmx750m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djdk.http.auth.tunneling.disabledSchemes="" -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -javaagent:D:\workpath\JetBrains\IntelliJ IDEA 2019.1\bin\JetbrainsIdesCrack-4.2.jar -Djb.vmOptionsFile=D:\workpath\JetBrains\IntelliJ IDEA 2019.1\bin\idea64.exe.vmoptions -Didea.jre.check=true -Dide.native.launcher=true -Didea.paths.selector=IntelliJIdea2019.1 -XX:ErrorFile=C:\Users\Administrator\java_error_in_idea_%p.log -XX:HeapDumpPath=C:\Users\Administrator\java_error_in_idea.hprof
6324 RemoteMavenServer -Djava.awt.headless=true -Didea.version==2019.1 -Xmx768m -Didea.maven.embedder.version=3.3.9 -Dfile.encoding=GBK
14680 Launcher -Xmx700m -Djava.awt.headless=true -Djava.endorsed.dirs="" -Djdt.compiler.useSingleThread=true -Dpreload.project.path=D:/workcode/step-trade -Dpreload.config.path=C:/Users/Administrator/.IntelliJIdea2019.1/config/options -Dexternal.project.config=C:\Users\Administrator\.IntelliJIdea2019.1\system\external_build_system\step-trade.a2d39cdb -Dcompile.parallel=false -Drebuild.on.dependency.change=true -Djava.net.preferIPv4Stack=true -Dio.netty.initialSeedUniquifier=-7273493625106742150 -Dfile.encoding=GBK -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IntelliJIdea2019.1 -Didea.home.path=D:\workpath\JetBrains\IntelliJ IDEA 2019.1 -Didea.config.path=C:\Users\Administrator\.IntelliJIdea2019.1\config -Didea.plugins.path=C:\Users\Administrator\.IntelliJIdea2019.1\config\plugins -Djps.log.dir=C:/Users/Administrator/.IntelliJIdea2019.1/system/log/build-log -Djps.fallback.jdk.home=D:/workpath/JetBrains/IntelliJ IDEA 2019.1/jre64 -Djps.fallback.jdk.version=1.8.0_202-release -Dio.netty.noUnsafe=true -Djava.io.tmp
6488 StepSnsApplication -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:53869,suspend=y,server=n -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -javaagent:C:\Users\Administrator\.IntelliJIdea2019.1\system\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8
8988 KotlinCompileDaemon -Djava.awt.headless=true -Djava.rmi.server.hostname=127.0.0.1 -Xmx700m -Dkotlin.incremental.compilation=true -Dkotlin.incremental.compilation.js=true

C:\Users\Administrator>jps -l -m
11204
6324 org.jetbrains.idea.maven.server.RemoteMavenServer
14680 org.jetbrains.jps.cmdline.Launcher D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/maven-builder-support-3.3.9.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/netty-transport-4.1.32.Final.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/aether-connector-basic-1.1.0.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/aether-dependency-resolver.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/jps-model.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/maven-artifact-3.3.9.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/netty-common-4.1.32.Final.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/idea_rt.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/annotations.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/plexus-utils-3.0.22.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/maven-model-3.3.9.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/netty-codec-4.1.32.Final.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/lib/aether-transport-http-1.1.0.jar;D:/workpath/JetBrains/IntelliJ IDEA 2019.1/li
6488 com.tianshen.mini.apps.stepsns.StepSnsApplication
3660 sun.tools.jps.Jps -l -m
8988 org.jetbrains.kotlin.daemon.KotlinCompileDaemon --daemon-runFilesPath C:\Users\Administrator\AppData\Local\kotlin\daemon --daemon-autoshutdownIdleSeconds=7200 --daemon-compilerClasspath D:\workpath\JetBrains\IntelliJ IDEA 2019.1\plugins\Kotlin\kotlinc\lib\kotlin-compiler.jar;D:\workpath\java\jdk1.8.0_201\lib\tools.jar

C:\Users\Administrator>
jstat

jstat(JVM statistics Monitoring)是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。

命令格式
jstat [option] LVMID [interval] [count]
参数
  • option:操作参数
  • LVMID: 上面显示的lvmId
  • interval:连续输出的时间间隔
  • count: 连续输出的次数

option参数的总览

option示意
classclass loader的行为统计
compilerHotSpt JIT编译器行为统计
gc垃圾回收堆的行为统计
gccapacity各个垃圾回收代容量(young,old,perm)和他们相应的空间统计
gcutil垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因
gcnew新生代行为统计
gcnewcapacity新生代与其相应的内存空间的统计
gcold年老代和永生代行为统计
gcoldcapacity年老代行为统计
gcpermcapacity永生代行为统计
printcompilationHotSpot编译方法统计
示例

-class

监视类装载、卸载数量、总空间以及耗费的时间

注意:19492就是上面的6488 的LVMId
C:\Users\Administrator>jstat -class 19492
Loaded  Bytes  Unloaded  Bytes     Time
 13563 24983.9       36    56.2      10.02
  • Loaded:加载class的数量
  • Bytes:class总的大小 kb
  • Unloaded:未加载class的数量
  • Bytes: 未加载class的字节大小
  • Time:加载的时间

-compiler

输出JIT编译过的方法数量耗时等

C:\Users\Administrator>jstat -compiler 19492
Compiled Failed Invalid   Time   FailedType FailedMethod
    9825      9       0     2.60          1 shaded/org/apache/http/client/utils/URLEncodedUtils parse
  • Compiled:编辑的数量
  • Failed:编译失败的数量
  • Invalid:无效数量
  • Time:编译的耗时
  • FailedType:失败类型
  • FailedMethod:失败方法的全限定名

-gc

垃圾回收堆的行为统计,常用命令

C:\Users\Administrator>jstat -gc 19492
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
25600.0 25600.0 672.0   0.0   637440.0 361147.5  131584.0   91293.3   72700.0 69810.0 9472.0 8851.6     18    0.242   3      0.441    0.683
  • S0C: survivor0区的总容量

  • S1C:survivor1区的总容量

  • S0U:survivor0区已使用的容量

  • S1U:survivor1区已使用的容量

  • EC: Eden区的总容量

  • EU:Eden区已使用的容量

  • OC:Old区的总容量

  • OU:Old区已使用的容量

  • MC:

  • MU:

  • CCSC:

  • CCSU :

  • YGC :新生代垃圾回收次数

  • YGCT: 新生代垃圾回收时间

  • FGC:老年代垃圾回收次数

  • FGCT:老年代垃圾回收时间

  • GCT:垃圾回收总消耗时间

    $ jstat -gc 1262 2000 20
    这个命令意思就是每隔2000ms输出1262的gc情况,一共输出20次
    

-gccapacity

同-gc,不过还会输出Java堆各区域使用到的最大、最小空间

C:\Users\Administrator>jstat -gccapacity 19492
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC
 43520.0 688640.0 688640.0 25600.0 25600.0 637440.0    87552.0  1377792.0   131584.0   131584.0      0.0 1112064.0  72700.0      0.0 1048576.0   9472.0     18     3

C即Capacity 总容量,U即Used 已使用的容量

  • NGCMN:新生代占用的最小空间
  • NGCMX :新生代占用的最大空间
  • OGCMN :老年代占用的最小空间
  • OGCMX:老年代占用的最大空间
  • OGC:当前年老代的容量
  • OC:当前年老代的空间
  • PGCMN :parm占用的最小空间
  • PGCMX :perm占用的最大空间

-gcutil

同-gc,不过输出的是已使用空间占总空间的百分比

C:\Users\Administrator>jstat -gcutil 19492
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
  2.62   0.00  59.88  69.38  96.02  93.45     18    0.242     3    0.441    0.683

-gccause

垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因

C:\Users\Administrator>jstat -gccause 19492
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC
  2.62   0.00  60.44  69.38  96.02  93.45     18    0.242     3    0.441    0.683 Allocation Failure   No GC
  • LGCC:最近垃圾回收的原因
  • GCC:当前垃圾回收的原因

-gcnew

统计新生代的行为

C:\Users\Administrator>jstat -gcnew 19492
 S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
25600.0 25600.0  672.0    0.0  3  15 25600.0 637440.0 387013.9     18    0.242
  • TT:Tenuring threshold(提升阈值)
  • MTT:最大的tenuring threshold
  • DSS:survivor区域大小 (KB)

-gcnewcapacity

新生代与其相应的内存空间的统计

C:\Users\Administrator>jstat -gcnewcapacity 19492
  NGCMN      NGCMX       NGC      S0CMX     S0C     S1CMX     S1C       ECMX        EC      YGC   FGC
   43520.0   688640.0   640000.0 229376.0   1024.0 229376.0  25088.0   687616.0   580608.0    20     3

-gcold

统计旧生代的行为

-gcoldcapacity

统计旧生代的大小和空间

-gcpermcapacity

永生代行为统计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值