JVM-虚拟机常用命令和常用调试工具记录,jps,jstat,jinfo,jmap,jhat,jstack命令详解

本文详细介绍了Java诊断工具的使用,包括jps(显示Java进程)、jstat(监控虚拟机性能)、jinfo(查看虚拟机配置信息)、jmap(生成堆转储)、jhat(分析堆转储)和jstack(查看线程堆栈)。这些工具帮助开发者监控和排查Java应用的性能问题。
摘要由CSDN通过智能技术生成

1.常用工具所在位置

Jdk的安装路径下的bin目录中,具体有哪些自己看去
在这里插入图片描述
常用JDK监控和故障的处理工具

命令用途
jps显示指定系统内所有的虚拟机进程
jstat用于收集虚拟机各方面的运行数据
jinfo显示虚拟机配置信息
jmap生成虚拟机快照
jhat用于分析heapdump文件,会建立一个http/html服务器,可以在浏览器上查看分析结果
jstack显示虚拟机快照

2.具体命令的执行效果展示

2.1. JPS命令

jps命令是用来显示指定系统内所有的虚拟机进程用的,支持远程

2.1.1 命令:jps -help

帮助命令,可以查看支持哪些操作
在这里插入图片描述
jps详细参考资料

2.1.2. 命令: jps

查看全部的java进程
在这里插入图片描述

2.1.3. 命令: jps -q

查看进程号, 只显示pid,不显示class名称,jar文件名和传递给main 方法的参数
在这里插入图片描述

2.1.4. 命令: jps -m

-m 输出传递给main 方法的参数,在嵌入式jvm上可能是null
在这里插入图片描述

2.1.5. 命令: jps -l

-l 输出应用程序main class的完整package名 或者 应用程序的jar文件完整路径名
在这里插入图片描述

2.1.6. 命令: jps -v

-v 输出传递给JVM的参数
在这里插入图片描述

2.1.7. 命令: jps -V

测试和发现该参数-V没啥用
在这里插入图片描述

2.1.8. 命令: jps [ip]:[port]

查看远程服务器的服务
在这里插入图片描述

2.2. jstat命令

主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。

2.2.1 命令: jstat -help

在这里插入图片描述
Jstat详细参考资料

可以列出当前JVM版本支持的选项,常见的有

  • l class (类加载器)
  • l compiler (JIT)
  • l gc (GC堆状态)
  • l gccapacity (各区大小)
  • l gccause (最近一次GC统计和原因)
  • l gcnew (新区统计)
  • l gcnewcapacity (新区大小)
  • l gcold (老区统计)
  • l gcoldcapacity (老区大小)
  • l gcpermcapacity (永久区大小)
  • l gcutil (GC统计汇总)
  • l printcompilation (HotSpot编译统计)

具体执行参数和详细的请看参考资料
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

2.3. jinfo命令

2.3.1. 命令: jinfo -help

在这里插入图片描述
Jinfo详细参考资料

2.3.2. 命令: jinfo [pid]

查看对应进程的信息
在这里插入图片描述
完整信息如下:

Attaching to process ID 10207, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.121-b13
Java System Properties:

java.vendor = Oracle Corporation
sun.java.launcher = SUN_STANDARD
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
sun.nio.ch.bugLevel = 
os.name = Linux
sun.boot.class.path = /usr/java/jdk1.8.0_121/jre/lib/resources.jar:/usr/java/jdk1.8.0_121/jre/lib/rt.jar:/usr/java/jdk1.8.0_121/jre/lib/sunrsasign.jar:/usr/java/jdk1.8.0_121/jre/lib/jsse.jar:/usr/java/jdk1.8.0_121/jre/lib/jce.jar:/usr/java/jdk1.8.0_121/jre/lib/charsets.jar:/usr/java/jdk1.8.0_121/jre/lib/jfr.jar:/usr/java/jdk1.8.0_121/jre/classes
blade.service.version = 2.8.1.RELEASE
java.vm.specification.vendor = Oracle Corporation
java.runtime.version = 1.8.0_121-b13
spring.datasource.dynamic.enabled = false
user.name = root
blade.env = dev
spring.zipkin.base-url = http://47.104.151.36:9411
blade.dev-mode = true
user.language = zh
sun.boot.library.path = /usr/java/jdk1.8.0_121/jre/lib/amd64
info.version = 2.8.1.RELEASE
info.desc = blade-auth
PID = 10207
java.version = 1.8.0_121
user.timezone = Asia/Shanghai
sun.arch.data.model = 64
java.endorsed.dirs = /usr/java/jdk1.8.0_121/jre/lib/endorsed
sun.cpu.isalist = 
sun.jnu.encoding = UTF-8
file.encoding.pkg = sun.io
file.separator = /
java.specification.name = Java Platform API Specification
JM.LOG.PATH = /root/logs
java.class.version = 52.0
csp.sentinel.api.port = 8719
knife4j.enable = true
user.country = CN
java.home = /usr/java/jdk1.8.0_121/jre
spring.cloud.nacos.discovery.server-addr = 47.104.151.36:8848
java.vm.info = mixed mode
os.version = 3.10.0-1160.6.1.el7.x86_64
sun.font.fontmanager = sun.awt.X11FontManager
path.separator = :
java.vm.version = 25.121-b13
java.protocol.handler.pkgs = org.springframework.boot.loader
spring.cloud.nacos.config.server-addr = 47.104.151.36:8848
java.awt.printerjob = sun.print.PSPrinterJob
sun.io.unicode.encoding = UnicodeLittle
awt.toolkit = sun.awt.X11.XToolkit
spring.cloud.sentinel.transport.dashboard = 47.104.151.36:8858
user.home = /root
blade.name = blade-auth
csp.sentinel.dashboard.server = 47.104.151.36:8858
java.specification.vendor = Oracle Corporation
java.library.path = /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
java.vendor.url = http://java.oracle.com/
spring.beaninfo.ignore = true
java.vm.vendor = Oracle Corporation
java.runtime.name = Java(TM) SE Runtime Environment
sun.java.command = /home/bladex/blade-auth.jar
java.class.path = /home/bladex/blade-auth.jar
blade.is-local = false
java.vm.specification.name = Java Virtual Machine Specification
java.vm.specification.version = 1.8
sun.cpu.endian = little
sun.os.patch.level = unknown
java.awt.headless = true
java.io.tmpdir = /tmp
csp.sentinel.app.name = blade-auth
java.vendor.url.bug = http://bugreport.sun.com/bugreport/
os.arch = amd64
java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
java.ext.dirs = /usr/java/jdk1.8.0_121/jre/lib/ext:/usr/java/packages/lib/ext
@appId = blade-auth
user.dir = /root
spring.application.name = blade-auth
spring.profiles.active = dev
line.separator = 

java.vm.name = Java HotSpot(TM) 64-Bit Server VM
file.encoding = UTF-8
csp.sentinel.charset = UTF-8
csp.sentinel.flow.cold.factor = 3
java.specification.version = 1.8

VM Flags:
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=536870912 -XX:MaxHeapSize=536870912 -XX:MaxNewSize=178782208 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=178782208 -XX:OldSize=358088704 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC 
Command line:  -Xms512m -Xmx512m

2.3.3. 命令: jinfo -flags [pid]

查看进程虚拟机的参数
在这里插入图片描述

2.3.4. 命令: jinfo -flag xxx [pid]相关操作

该命令支持修改服务的命令参数
下方用打印GC日志参数为参考:PrintGC

命令用途
jinfo -flag <name> pid展示指定的参数
jinfo -flag [+|-]<name> pid开启或者禁用指定的参数
jinfo -flag <name>=<value> pid给指定的参数复制,可以修改

在这里插入图片描述

2.4. jmap命令

2.4.1 命令: jmap -help

在这里插入图片描述
jmap命令详细参考资料

2.4.2. 命令: jmap -heap [pid]

打印进程的堆信息
在这里插入图片描述

2.4.3. 命令: jmap -dump:live,format=b,file=heap.bin [pid]

生成一个进程的dump文件,可以下载下来使用工具查看
在这里插入图片描述

2.4.4. 命令:jmap -clastats [pid]

打印classload和jvm heap持久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来
在这里插入图片描述

2.4.5. 命令:jmap -finalizerinfo [pid]

查看等待回收的对象信息
在这里插入图片描述

2.4.6. 命令:jmap -histo:live [pid]

打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
在这里插入图片描述

2.5. jhat命令

2.5.1 命令: jhat -help

在这里插入图片描述

2.5.2. 命令: jhat [dumpfile]

读取dump文件,使得可以通过访问网页一样去查看dump内容
在这里插入图片描述
在这里插入图片描述

2.6. jstack命令

2.6.1. 命令: jstack -help

在这里插入图片描述
jstack命令参考资料

2.6.2. 命令:jstack -l [pid]

通过jstack输出的线程信息主要包括:jvm自身线程、用户线程等。其中jvm线程会在jvm启动时就会存在。对于用户线程则是在用户访问时才会生成。
在这里插入图片描述
从上述的代码示例中我们可以看到该用户线程的以下几类信息:
Ø 线程的状态:waiting on condition(等待条件发生)
Ø 线程的调用情况;
Ø 线程对资源的锁定情况;

2.6.3. 命令:jstack -m [pid]

在这里插入图片描述

2.6.4. 命令:jstack -F [pid]

常用:检测死锁,查看cpu占用高进程,
在这里插入图片描述

参考资料:
https://blog.csdn.net/jackyemail/article/details/80484892

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汉风唐尚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值