JDK常用命令jps、jinfo、jstat的使用介绍

2024-08-23 22:48

本文主要是介绍JDK常用命令jps、jinfo、jstat的使用介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述

JDK的bin目录下提供了很多命令工具,比如java.exe,javap.exe,javac.exe。。。。。。这些命令由jdk/lib/tools.jar类库中提供的,是对tools.jar中的类的封装。我们主要介绍一下JVM中处理运行日志、异常堆栈、GC日志、线程快照(threaddump / javacore文件)、堆转储快照(heapdump/hprof文件)等信息的相关常用命令(jhat就不再介绍了,用的比较少,目前都是用jmap+MAT分别进行生产heapdump文件的生成及分析),这些常用命令在JDK8中的官方文档地址为https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html,打开官方文档地址可以看到如下所示,我们所介绍的命令里面都有说明,可以对应着看一下。

常用命令介绍: 本节先介绍前三个,下面的后面进行介绍。

名称主要功能
jpsJVM Process Status Tool,显示指定系统内所有HotSpot虚拟机进程
jstatJVM Statistics Minitoring Tool,用于收集HotSpot虚拟机各方面的运行数据
jinfoConfiguration Info for Java,显示虚拟机配置信息
jmapMemory Map for Java,生成虚拟机的内存转储快照(heapdump)文件
jhatJVM Heap Dump Browser,用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果
jstackStack Trace for Java,显示虚拟机的线程快照

注意:我演示使用的是JDK1.8 

jps:虚拟机进程状况工具

jps(JVM Process Status Tool):可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID(LVMID,Local Virtual Machine Identifier)。对于本地虚拟机进程来说,LVMID与操作系统的进程ID(PID,Process Identifier)是一致的,在Linux上使用ps命令也可以查看进程ID(例如 ps -ef | grep java 查看Java进程)。官方文档地址:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jps.html

通过 jps -help 命令可以查看jps命令的使用说明

C:\Users\Administrator>jps -help
usage: jps [-help]jps [-q] [-mlvV] [<hostid>]Definitions:<hostid>:      <hostname>[:<port>]

可以看到jps命令格式:jps [option] [hostid]

jps除了查询本地Java进程,还可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名。jps的常用选项如下:

选项作用
-q只输出LVMID,省略主类的名称
-m输出虚拟机进程启动时传递给主类的main()函数的参数
-l输出主类的全名,如果进程执行的是jar包,输出jar路径
-v输出虚拟机进程启动时JVM参数

使用示例:

C:\Users\Administrator>jps -l
13120 sun.tools.jps.Jps
11332
14284 com.wkp.demo.ServiceapiApplication
6908
6924

 jinfo:Java配置信息工具

jinfo(Configuration Info for Java)的作用是实时地查看和调整虚拟机的各项参数。官方文档地址为:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jinfo.html

通过 jinfo -help 命令可以查看jinfo命令的使用信息:其使用格式为 jinfo [option] pid

C:\Users\Administrator>jinfo -help
Usage:jinfo [option] <pid>(to connect to running process)jinfo [option] <executable <core>(to connect to a core file)jinfo [option] [server_id@]<remote server IP or hostname>(to connect to remote debug server)where <option> is one of:-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-flags               to print VM flags-sysprops            to print Java system properties<no option>          to print both of the above-h | -help           to print this help message

jinfo命令选项介绍:

选项作用
-flag查看JVM参数选项值(如果没有设置过会打印默认值,使用java -XX:+PrintFlagsFinal也可以查看参数默认值)
-flag [+|-]<name>程序运行时启用/禁用JVM的Boolean类型参数选项
-flag <name>=<value程序运行时设置JVM的非Boolean类型参数选项值
-flags打印设置的JVM参数选项
-sysprops把虚拟机进程的System.getProperties()的内容打印出来
 <no option> 不写option的话会打印上面的所有信息

使用示例:

C:\Users\Administrator>jinfo -flag MaxHeapSize 14284
-XX:MaxHeapSize=67108864
C:\Users\Administrator>jinfo -flags 14284
Attaching to process ID 14284, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.112-b15
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=8388608 -XX:+ManagementServer -XX:MaxHeapSize=67108864 -XX:MaxNewSize=22347776 -XX:MaxTenuringThreshold=6 -XX:MinHeapDeltaBytes=196608 -
XX:NewSize=2752512 -XX:OldPLABSize=16 -XX:OldSize=5636096 -XX:+PrintCommandLineFlags -XX:+PrintFlagsFinal -XX:+PrintGC -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX
:+PrintHeapAtGC -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParNewGC
Command line:  -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=63038 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dspring.liveBeansVie
w.mbeanDomain -Dspring.application.admin.enabled=true -Xms8m -Xmx64m -verbose:gc -Xloggc:D:\workspaces\hgwd-Wp\logs\hgwd-usercenter\gc.log -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime -XX:+Pr
intGCTimeStamps -XX:+PrintCommandLineFlags -XX:+PrintFlagsFinal -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -
Dcom.sun.management.jmxremote.port=9004 -Djava.rmi.server.hostname=127.0.0.1 -Dfile.encoding=UTF-8

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

jstat(JVM Statistics Monitoring Tool)是用于监控虚拟机各种运行状态信息的命令行工具。它可以显示本地或远程虚拟机(需要远程主机提供RMI支持)进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图像界面,只提高了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。官方文档地址为:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html

使用jstat -help可以查看使用帮助

C:\Users\Administrator>jstat -help
Usage: jstat -help|-optionsjstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]Definitions:<option>      An option reported by the -options option<vmid>        Virtual Machine Identifier. A vmid takes the following form:<lvmid>[@<hostname>[:<port>]]Where <lvmid> is the local vm identifier for the targetJava virtual machine, typically a process id; <hostname> isthe name of the host running the target Java virtual machine;and <port> is the port number for the rmiregistry on thetarget host. See the jvmstat documentation for a more completedescription of the Virtual Machine Identifier.<lines>       Number of samples between header lines.<interval>    Sampling interval. The following forms are allowed:<n>["ms"|"s"]Where <n> is an integer and the suffix specifies the units asmilliseconds("ms") or seconds("s"). The default units are "ms".<count>       Number of samples to take before terminating.-J<flag>      Pass <flag> directly to the runtime system.

使用jstat -options可以查看jstat支持的option 

C:\Users\Administrator>jstat -options
-class
-compiler
-gc
-gccapacity
-gccause
-gcmetacapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcutil
-printcompilation

 选项option代表这用户希望查询的虚拟机信息,主要分为3类:类装载、垃圾收集和运行期编译状况,具体选项及租用参见下表:

选项作用
-class监视类装载、卸载数量、总空间及类装载所耗费的时间
-gc监视Java堆状况,包括Eden区、2个Survivor区、老年代、永久代等的容量
-gccapacity监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大和最小空间
-gcutil监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
-gccause与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
-gcnew监视新生代GC的状况
-gcnewcapacity监视内容与-gcnew基本相同,输出主要关注使用到的最大和最小空间
-gcold监视老年代GC的状况
-gcoldcapacity监视内容与——gcold基本相同,输出主要关注使用到的最大和最小空间
-gcpermcapacity输出永久代使用到的最大和最小空间
-compiler输出JIT编译器编译过的方法、耗时等信息
-printcompilation输出已经被JIT编译的方法

其实每个option的输出内容,官方文档中都有介绍,这里就不把每一个命令都演示一遍了,感兴趣的话可以自己试一下,对照着官方文档还是很好理解的。

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

对于命令格式中的VMID与LVMID需要特别说明下:如果是本地虚拟机进程,VMID和LVMID是一致的,如果是远程虚拟机进程,那VMID的格式应当是:[protocol:][//] lvmid [@hostname[:port]/servername]

参数interval和count代表查询间隔和次数,如果省略这两个参数,说明只查询一次。假设需要每1000毫秒查询一次进程14284垃圾收集状况,一共查询5次,那命令行如下:jstat -gc 14284 1000 5

C:\Users\Administrator>jstat -gc 14284 1000 5S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU      CCSC   CCSU     YGC    YGCT  FGC      FGCT     GCT
2176.0 2176.0  0.0   2176.0 17472.0   673.2    43712.0    34800.8   69760.0 66724.9 9088.0 8479.0    620    1.201  57      1.850    3.051
2176.0 2176.0  0.0   2176.0 17472.0   673.2    43712.0    34800.8   69760.0 66724.9 9088.0 8479.0    620    1.201  57      1.850    3.051
2176.0 2176.0  0.0   2176.0 17472.0   673.2    43712.0    34800.8   69760.0 66724.9 9088.0 8479.0    620    1.201  57      1.850    3.051
2176.0 2176.0  0.0   2176.0 17472.0   673.2    43712.0    34800.8   69760.0 66724.9 9088.0 8479.0    620    1.201  57      1.850    3.051
2176.0 2176.0  0.0   2176.0 17472.0   673.2    43712.0    34800.8   69760.0 66724.9 9088.0 8479.0    620    1.201  57      1.850    3.051

 通过上面的option表得知-gc用于监视Java堆状况,包括Eden区、2个Survivor区、老年代、永久代等的容量,我们对上面的打印做下简单介绍:

  • S0C和S1C表示S0和S1的可用空间都是2176.0KB(注意这里的单位是KB);

  • S0U的值表示S0区域是空的没有被占用;S1U的值是2176.0KB,说明S1被占满了;

  • EC表示Eden区域的容量是17472.0KB,EU表示Eden区使用了673.2KB;

  • OC和OU分别表示堆内存中的Old区的容量及使用大小;

  • MC和MU分别表示方法区(JDK1.8元空间)的容量及使用大小;

  • CCSC和CCSU分别表示压缩类空间的容量及使用大小;

  • YGC:年轻代垃圾回收次数

  • YGCT:年轻代垃圾回收消耗时间

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

  • FGCT:老年代垃圾回收(FullGC)消耗时间

  • GCT:垃圾回收消耗总时间(等于YGCT+FGCT)

下面再演示下:jstat -gcutil 14284 1000 5

C:\Users\Administrator>jstat -gcutil 14284 1000 5S0     S1      E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT0.00 100.00   7.31  79.61  95.65  93.30    620    1.201    57    1.850    3.0510.00 100.00   7.31  79.61  95.65  93.30    620    1.201    57    1.850    3.0510.00 100.00   7.31  79.61  95.65  93.30    620    1.201    57    1.850    3.0510.00 100.00   7.31  79.61  95.65  93.30    620    1.201    57    1.850    3.0510.00 100.00   7.31  79.61  95.65  93.30    620    1.201    57    1.850    3.051

 关于GC时间的上面已经介绍了,可以结合上面的jstat -gc看一下:

  • S0:S0区当前使用比例为0.00%,也就是空的
  • S1:S1区当前使用比例100.00%,已经满了
  • E:Eden区使用比例7.31%
  • O:老年代使用比例79.61%
  • M:元空间使用比例95.65%
  • CCS:压缩类空间使用比例93.30%

本节就先介绍到这里,下节会介绍jmap+MAT实战堆内存溢出分析。

这篇关于JDK常用命令jps、jinfo、jstat的使用介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100719

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]