Java虚拟机实现了内存自动分配,垃圾回收机制,但是这一过程,究竟什么时候执行,执行到什么地步,却需要jdk提供的一些工具来监控。

比如jps,jstat,jinfo,jmap,jhat,jstack。

1,jps

首先看看jps,jps——java process status tool,也就是java进程状态工具,奥~,原来是看现在运行的java进程的状态的,jps也有点像linux的ps命令,那么如何使用呢?

jps  [option]

看例子吧

jps -m 这个命令就是查看机器上虚拟机进程启动时传递给main方法的参数。

jps -q 输出LVMID 省略主类。输出的就是pid

jps -l 输出主类的全名,如果是jar包,则输出jar路径。

jps -v 这个是输出虚拟机进程启动时jvm的参数。

2,jstat

jstat,  java statistics monitoring tool  状态监视工具,可以显示虚拟机进程中的类加载,内存,垃圾回收,JIT即时编译等的运行数据。纯文本的展示。如何使用呢?

jstat [option] [pid/host_id] [interval (ms)] [count]

直接看例子,比如我们查到一个java进程的pid是7689,那么使用起来就是这样:

jstat -gc 7689 250 20  这句话就是查询这个进程的垃圾回收情况,每隔250ms查看一次,总共查询20次。

当然也可以不输入后面两个参数,这样就只统计一次。

S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
4544.0 4544.0  0.0    41.5  36864.0  17882.8   91472.0    70365.5   87424.0 84851.3 10112.0 9586.1    791    5.742   4      0.723    6.465

这是统计GC时的参数

S0C 是S0区域的capacity总容量,S1C是S1区域的capacity,S0U的U是used,已使用容量S0C:第一个幸存区的大小

  • S1C:第二个幸存区的大小
  • S0U:第一个幸存区的使用大小
  • S1U:第二个幸存区的使用大小
  • EC:伊甸园区的大小
  • EU:伊甸园区的使用大小
  • OC:老年代大小
  • OU:老年代使用大小
  • MC:方法区大小
  • MU:方法区使用大小
  • CCSC:压缩类空间大小
  • CCSU:压缩类空间使用大小
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

option选项主要有下面这些

-class   监视类加载,卸载,总空间以及类装载耗费的时间

-gc      监视java堆情况,包括Eden区,两个survivor,老年代,永久代容量,已用空间,gc时间合计。

-gccapacity   类似-gc,主要关注java堆各个区域的最大和最小空间

-gcutil      类似-gc,但是主要输出已使用空间所占的百分比

-gccause   类似-gc,额外输出上一次gc的原因。

-gcnew    监视新生代

-gcnewcapacity  类似-gcnew,但主要关注新生代使用到的的最大和最小空间

-gcold     监视老年代

-gcoldcapacity  类似-gcold,但是主要关注老年代使用到的的最大和最小空间

-gcpermcapacity  输出永久代使用到的最大和最小空间

-compiler    输出JIT编译过得方法,耗时等信息

-printcompilation     输出已经被JIT编译过得方法。

3,jinfo  配置信息工具

-flag <name>         to print the value of the named VM flag 打印虚拟机参数
    -flag [+|-]<name>    to enable or disable the named VM flag  
    -flag <name>=<value> to set the named VM flag to the given value 设置jvm参数,注意堆栈大小不能变,不能设置
    -flags               to print VM flags   打印所有jvm参数
    -sysprops            to print Java system properties  打印此次启动java的所有系统参数
    <no option>          to print both of the above  不加option打印所有

-h | -help           to print this help message

使用举例 jinfo -flags 20698  打印这个pid的所有jvm参数

4,jmap  jhat jstack用到的时候再写

4. jstack

使用方式:

jstack -l pid >1.txt  导出到文件

jstack pid   直接展示

可以打印出来线程的堆栈信息。

"Log4j2-Log4j2Scheduled-2" #17 daemon prio=5 os_prio=0 tid=0x000000001eaba000 nid=0x4c34 waiting on condition [0x0000000022c4e000]java.lang.Thread.State: TIMED_WAITING (parking)  //线程现在的状态at sun.misc.Unsafe.park(Native Method)  //正执行到的方法- parking to wait for  <0x00000006c1a16188> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)at java.lang.Thread.run(Unknown Source)

对死锁问题可以直接展示,形如:

Found one Java-level deadlock:
=============================
"Thread-1":waiting to lock monitor 0x000000001ca50e48 (object 0x000000076b758920, a java.lang.Object),which is held by "Thread-0"
"Thread-0":waiting to lock monitor 0x000000001ca53628 (object 0x000000076b758930, a java.lang.Object),which is held by "Thread-1"

5,jmap 

主要的可以导出hprof文件:

jmap -dump:file=hprof-jvm.bin -F  pid  直接导出。

导出的文件可以使用eclipse的mat来进行分析

虚拟机的性能监控与故障处理——jps,jstat,jinfo,jmap,jhat,jstack相关推荐

  1. jps,jstat,jinfo,jmap,jhat,jstack工具的使用/查看Linux磁盘信息

    1.查看磁盘还剩多少空间,使用df命令(查看Linux版本:lsb_release -a,uname -a) 2.当前文件夹下的磁盘使用情况:(du --max-depth=1 -h后面没有显示跟路径 ...

  2. Java基础JDK命令行工具(jps,jstat,jinfo,jmap,jhat,jstack)

    本篇博文目录: 前言 1.Java的JDK工具 2.jps (JVM Process Status)工具 3.jstat(JVM Statistics Monitoring Tool) 4.jinfo ...

  3. Java虚拟机:性能监控与故障处理工具

    概述: 给一个系统定位问题的时候,知识.经验是关键基础,数据是依据.工具是运用知识处理数据的手段.这里说的数据包括:运行日志.异常堆栈.GC日志.线程快照文件(threaddump/javacore文 ...

  4. jdk命令行工具(jps+jstat+jinfo+jmap+jstack)

    jps:虚拟机进程状况工具 可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(main class,class()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID. jps命令格式: jps ...

  5. JVM-11虚拟机性能监控与故障处理工具之【JDK的可视化工具-JConsole】

    文章目录 思维导图 概述 JConsole: Java监视与管理平台 启动jconsole 内存监控示例 VM ARGS 代码 JConsole监控展示及说明 扩展问题 没有指定-Xmn,如何确定新生 ...

  6. JVM-10虚拟机性能监控与故障处理工具之【JDK的命令行】

    文章目录 思维导图 概述 命令行工具 jps 虚拟机进程状况工具 概述 语法及使用 jstat 虚拟机统计信息监视工具 概述 语法及使用 jinfo Java配置信息工具 概述 语法及使用 jmap ...

  7. jvm(4)-虚拟机性能监控与故障处理工具

    [0]README 0.1)本文文字描述转自 "深入理解jvm",旨在了解 虚拟机性能监控与故障处理工具的基础知识(仅仅在于了解): [1]概述 1)给一个系统定位问题的时候,知识 ...

  8. 第4章 虚拟机性能监控、故障处理工具(上)

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 4.1 概述 经过前面两章对于虚拟机内存分配与回收技术各方面的介绍,相信读者已经建立了一个比 ...

  9. 虚拟机性能监控、故障处理工具

    目录 基础故障处理工具 jps:虚拟机进程状况工具 jstat:虚拟机统计信息监视工具 jinfo:Java配置信息工具 jmap:Java内存映像工具 jhat:虚拟机堆转储快照分析工具 jstac ...

最新文章

  1. 【图解】算法原理!通俗理解机器学习算法
  2. 龙邱树莓派Raspberry Pi 扩展板电路及其相关实验
  3. Fragment.setArguments()
  4. 调焦后焦实现不同距离成像_“物镜校正环调节”对显微成像的影响
  5. 一个完整的机器学习项目在Python中演练
  6. [渝粤教育] 西南科技大学 经济法概论 在线考试复习资料2021版
  7. 如何在 Mac 上的“终端”中执行命令和运行工具?
  8. 基于大并发抽奖的队列实现
  9. web网站页面实现设计代码
  10. C++ 与 python 语法 对比
  11. 【嵌入式】牧马人G3 电子竞技鼠标拆解分析
  12. cad沿线插入块 lisp_AutoCAD导出块名和块插入点列表(AutoLISP源码)——好用的AutoCAD块统计工具...
  13. vbox虚拟机网络设置
  14. chrome浏览器 下载网页视频的方法
  15. 【韩顺平utility工具类】
  16. 第三方支付平台:易宝支付
  17. 《C语言程序设计》江宝钏主编-习题3-7-交换变量
  18. 从利用gensim 训练好的word2vec模型中取出向量并计算余弦相似度,Levenshtein distance 计算
  19. 如何安装VMware Tool
  20. 用CSS3写一个旋转魔方相册

热门文章

  1. zblog php版调用代码,zblog PHP分类列表调用方法
  2. 【机器学习算法专题(蓄力计划)】八、机器学习中数据的方差分析
  3. /和//在python中使用
  4. Graphviz使用
  5. python chm制作_生成chm文档的方法
  6. ​GPLinker:基于GlobalPointer的实体关系联合抽取
  7. 飞桨领航团邀你出战!黑客松线下48H Coding Party等你来
  8. 今日arXiv精选 | 9篇ICCV 2021最新论文
  9. 基于结构化数据的文本生成:非严格对齐生成任务及动态轻量的GCN生成模型
  10. NeurIPS 2019 开源论文 | 万能的GNN解释器