深入理解Java虚拟机之性能监控与故障处理工具

栏目: Java · 发布时间: 5年前

内容简介:前面几篇讲了关于JVM的理论知识,今天介绍几个JDK的命令行工具,来快速定位线上问题。

前面几篇讲了关于JVM的理论知识,今天介绍几个JDK的命令行工具,来快速定位线上问题。

JDK的命令行工具

深入理解 <a href='https://www.codercto.com/topics/22013.html'>Java</a> 虚拟机之性能监控与故障处理工具

jps:虚拟机进程状况工具

用法:jps命令格式:jsp [options] [hostid]

jps执行样例:

[root@izbp13zpfq979odk0kub10z ~]# jps -l
3409 tale-least.jar
23702 org.apache.catalina.startup.Bootstrap
26779 sun.tools.jps.Jps
复制代码

jps工具主要选项:

深入理解Java虚拟机之性能监控与故障处理工具

jstat:虚拟机统计信息监视工具

jstat命令格式:jstat [option vmid [ interval[s|ms] [count] ] ]

jstat执行样例:

[root@izbp13zpfq979odk0kub10z ~]# jstat -gc 3409 5s 2
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
4352.0 4352.0  0.0   208.6  34944.0  26126.4   87424.0    28452.7   28160.0 26891.3 3072.0 2755.0   3583    9.813   1      0.035    9.848
4352.0 4352.0  0.0   208.6  34944.0  26126.4   87424.0    28452.7   28160.0 26891.3 3072.0 2755.0   3583    9.813   1      0.035    9.848
复制代码

执行样例中3409是进程ID,5s是每隔五秒查询一次,2是一共查询两次。

  • S0C: Young Generation第一个survivor space的内存大小 (kB).
  • S1C: Young Generation第二个survivor space的内存大小 (kB).
  • S0U: Young Generation第一个Survivor space当前已使用的内存大小 (kB).
  • S1U: Young Generation第二个Survivor space当前已经使用的内存大小 (kB).
  • EC: Young Generation中eden space的内存大小 (kB).
  • EU: Young Generation中Eden space当前已使用的内存大小 (kB).
  • OC: Old Generation的内存大小 (kB).
  • OU: Old Generation当前已使用的内存大小 (kB).
  • PC: Permanent Generation的内存大小 (kB)
  • PU: Permanent Generation当前已使用的内存大小 (kB).
  • YGC: 从启动到采样时Young Generation GC的次数
  • YGCT: 从启动到采样时Young Generation GC所用的时间 (s).
  • FGC: 从启动到采样时Old Generation GC的次数.
  • FGCT: 从启动到采样时Old Generation GC所用的时间 (s).
  • GCT: 从启动到采样时GC所用的总时间 (s).
    可以使用 ps -p pid -o etime 查看下进程的运行时间:
[root@izbp13zpfq979odk0kub10z ~]# ps -p 3409 -o etime
    ELAPSED
104-04:30:20
复制代码

哈哈,104天才执行一次YGC与FGC才这么点。如果YGC过于频繁说明eden不够了,可以考虑加机器。正常来说FGC应该占整个GC(YGC+FGC)的1%到5%才正常,如果FGC过于频繁,可以考虑增大MaxPermSize的值。

jstat主要 工具 选项:

深入理解Java虚拟机之性能监控与故障处理工具

jinfo:Java配置信息工具

用来实时地查看和调整虚拟机各项参数

jinfo命令格式:jinfo [ option ] pid

jinfo执行样例:

[root@izbp13zpfq979odk0kub10z ~]# jinfo -flag MaxHeapSize 3409
-XX:MaxHeapSize=134217728
复制代码

jinfo工具主要选项:

深入理解Java虚拟机之性能监控与故障处理工具

jmap:Java内存映像工具

命令用于生成堆转储快照(一般称为heapdump或dump文件)

jmap命令格式:jmap [option] vmid

jmap执行样例:

[root@izbp13zpfq979odk0kub10z ~]# jmap -dump:live,format=b,file=blog.log 3409
Dumping heap to /root/blog.log ...
Heap dump file created
复制代码

jmap主要工具选项:

深入理解Java虚拟机之性能监控与故障处理工具

jhat:虚拟机堆转储快照分析工具

jhat(JVM Heap Analysis Tool)命令与jmap搭配使用,来分析jmap生成的堆转储快照。一般不会直接使用jhat命令来分析dump文件,主要原因有二:一是一般不会在部署应用程序的服务器上直接分析dump文件;另外一个原因是jhat的分析功能相对来说比较简陋。

jhat执行样例:

[root@izbp13zpfq979odk0kub10z ~]# jhat blog.log 
Reading from blog.log...
Dump file created Tue Sep 11 22:52:53 CST 2018
Snapshot read, resolving...
Resolving 281153 objects...
Chasing references, expect 56 dots........................................................
Eliminating duplicate references........................................................
Snapshot resolved.
复制代码

jstack:Java堆栈跟踪工具

jstack(Stack Trace for Java)命令用于生产虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。线程快照就是当虚拟机内每一条线程正在执行的方法堆栈集合,生产线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致长时间等待等都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源。

jstack命令格式:jstack [option] vmid

jstack执行样例:

[root@izbp13zpfq979odk0kub10z ~]# jstack -l 3409
2018-09-11 22:57:24
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.152-b16 mixed mode):

"blade-pool-252" #252 prio=5 os_prio=0 tid=0x00007fcbf00bb000 nid=0x4845 waiting on condition [0x00007fcbd2fee000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000000fb242608> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
    at org.eclipse.jetty.util.BlockingArrayQueue.poll(BlockingArrayQueue.java:392)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.idleJobPoll(QueuedThreadPool.java:564)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.access$800(QueuedThreadPool.java:49)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:627)
    at java.lang.Thread.run(Thread.java:748)

   Locked ownable synchronizers:
    - None
复制代码

jstack主要工具选项:

深入理解Java虚拟机之性能监控与故障处理工具

如果读完觉得有收获的话,欢迎点赞、关注、加公众号【Java在线】,查阅更多精彩历史!!!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

移动互联网商规28条

移动互联网商规28条

王吉斌、彭盾、程成 / 机械工业出版社 / 2014-6 / 49.00

每一次信息技术革命都会颠覆很多行业现有的商业模式和市场规则,当前这场移动互联网变革的波及面之广和蔓延速度之快,完全超出我们的想象。行业的边界被打破并互相融合,在此之前,我们只面临来自同行业的竞争,但是今天,我们不知道竞争对手会来自哪里。也许今天我们还是行业的巨人,但是明天就会被踩在脚下,当我们的体温犹热时,新的巨人已经崛起。诺基亚等传统科技巨头的衰退告诉我们,企业在一个时代的优势,到了另外一个新时......一起来看看 《移动互联网商规28条》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具