• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

JDK自带监控工具查看 JVM 情况

武飞扬头像
出世&入世
帮助1

常用的JDK 自带监控工具如下:

学新通

jps:得到 Java 进程列表

  1.  
    jps
  2.  
    22261 Launcher
  3.  
    23864 common-mistakes-0.0.1-SNAPSHOT.jar
  4.  
    15608 RemoteMavenServer
  5.  
    3623243 Main
  6.  
    23868 Jps

jinfo: 打印 JVM 的各种参数

  1.  
    ➜ ~ jinfo 23864
  2.  
    Java System Properties:
  3.  
    #Wed Jan 29 12:49:47 CST 2020
  4.  
    ...
  5.  
    user.name=zhuye
  6.  
    path.separator=\:
  7.  
    os.version=10.15.2
  8.  
    java.runtime.name=Java(TM) SE Runtime Environment
  9.  
    file.encoding=UTF-8
  10.  
    java.vm.name=Java HotSpot(TM) 64-Bit Server VM
  11.  
    ...
  12.  
     
  13.  
     
  14.  
    VM Flags:
  15.  
    -XX:CICompilerCount=4 -XX:ConcGCThreads=2 -XX:G1ConcRefinementThreads=8 -XX:G1HeapRegionSize=1048576 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=268435456 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=4294967296 -XX:MaxNewSize=2576351232 -XX:MinHeapDeltaBytes=1048576 -XX:NonNMethodCodeHeapSize=5835340 -XX:NonProfiledCodeHeapSize=122911450 -XX:ProfiledCodeHeapSize=122911450 -XX:ReservedCodeCacheSize=251658240 -XX: SegmentedCodeCache -XX: UseCompressedClassPointers -XX: UseCompressedOops -XX: UseG1GC
  16.  
     
  17.  
     
  18.  
    VM Arguments:
  19.  
    java_command: common-mistakes-0.0.1-SNAPSHOT.jar -Xms1g -Xmx1g
  20.  
    java_class_path (initial): common-mistakes-0.0.1-SNAPSHOT.jar
  21.  
    Launcher Type: SUN_STANDARD
学新通

jstack: 打印JVM的线程栈和锁情况

类似于Arthas的 thread 命令

  1.  
    ➜ ~ jstack 23940
  2.  
    2020-01-29 13:08:15
  3.  
    Full thread dump Java HotSpot(TM) 64-Bit Server VM (11.0.3 12-LTS mixed mode):
  4.  
     
  5.  
    ...
  6.  
     
  7.  
    "main" #1 prio=5 os_prio=31 cpu=440.66ms elapsed=574.86s tid=0x00007ffdd9800000 nid=0x2803 waiting on condition [0x0000700003849000]
  8.  
    java.lang.Thread.State: TIMED_WAITING (sleeping)
  9.  
    at java.lang.Thread.sleep(java.base@11.0.3/Native Method)
  10.  
    at java.lang.Thread.sleep(java.base@11.0.3/Thread.java:339)
  11.  
    at java.util.concurrent.TimeUnit.sleep(java.base@11.0.3/TimeUnit.java:446)
  12.  
    at org.geekbang.time.commonmistakes.troubleshootingtools.jdktool.CommonMistakesApplication.main(CommonMistakesApplication.java:41)
  13.  
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@11.0.3/Native Method)
  14.  
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@11.0.3/NativeMethodAccessorImpl.java:62)
  15.  
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.3/DelegatingMethodAccessorImpl.java:43)
  16.  
    at java.lang.reflect.Method.invoke(java.base@11.0.3/Method.java:566)
  17.  
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
  18.  
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
  19.  
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
  20.  
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
  21.  
     
  22.  
    "Thread-1" #13 prio=5 os_prio=31 cpu=17851.77ms elapsed=574.41s tid=0x00007ffdda029000 nid=0x9803 waiting on condition [0x000070000539d000]
  23.  
    java.lang.Thread.State: TIMED_WAITING (sleeping)
  24.  
    at java.lang.Thread.sleep(java.base@11.0.3/Native Method)
  25.  
    at java.lang.Thread.sleep(java.base@11.0.3/Thread.java:339)
  26.  
    at java.util.concurrent.TimeUnit.sleep(java.base@11.0.3/TimeUnit.java:446)
  27.  
    at org.geekbang.time.commonmistakes.troubleshootingtools.jdktool.CommonMistakesApplication.lambda$null$1(CommonMistakesApplication.java:33)
  28.  
    at org.geekbang.time.commonmistakes.troubleshootingtools.jdktool.CommonMistakesApplication$$Lambda$41/0x00000008000a8c40.run(Unknown Source)
  29.  
    at java.lang.Thread.run(java.base@11.0.3/Thread.java:834)
  30.  
     
  31.  
     
学新通

jmap: 堆内存分析工具

类似于 Arthas的 heapdump 命令,用于生成 heap dump 文件。

如果不使用这个命令,还可以使用 -XX: HeapDumpOnOutOfMemoryError 参数来让虚拟机出现 OOM 的时候,自动生成 dump 文件。

jmap -dump:live,format=b,file=heap.hprof 6268 

生成dump文件我们可以使用eclipse的MAT,jdk自带的jvisualvm分析内存泄露和内存溢出问题;

使用MAT查看dump文件见 阿里开源Java诊断工具 Arthas 使用

jstat: 监控jvm的性能指标,常用查看GC回收

类似于

用于查看JVM中堆的垃圾收集情况的统计

  1.  
    [root@hadoop ~]# jstat -gc 3346
  2.  
    S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
  3.  
    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:年轻代中第一个survivor(幸存区)的容量 (字节)
  • S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
  • S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
  • S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
  • EC:年轻代中Eden(伊甸园)的容量 (字节)
  • EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
  • OC:Old代的容量 (字节)
  • OU:Old代目前已使用空间 (字节)
  • MC:metaspace(元空间)的容量 (字节)
  • MU:metaspace(元空间)目前已使用空间 (字节)
  • CCSC:当前压缩类空间的容量 (字节)
  • CCSU:当前压缩类空间目前已使用空间 (字节)
  • YGC:从应用程序启动到采样时年轻代中gc次数
  • YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
  • FGC:从应用程序启动到采样时old代(全gc)gc次数
  • FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
  • sGCT:从应用程序启动到采样时gc用的总时间(s)

jconsole: 查看各个内存区的 GC 曲线图

jconsole 也是一个综合性图形界面监控工具,比 jvisualvm 更方便的一点是,可以用曲线的形式监控各种数据,包括 MBean 中的属性值: 

学新通

jvisualvm: jvm图形化监控工具

我们可以在监视面板看到 JVM 的基本情况,也可以直接在这里进行手动 GC 和堆 Dump 操作:

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcajba
系列文章
更多 icon
同类精品
更多 icon
继续加载