JVM相关工具(JDK自带)

本文详细介绍JDK自带的多个命令行工具,包括jps、jstat、jinfo、jmap、jhat、jstack及jconsole的功能及使用方法,帮助开发者有效定位和解决Java应用程序中的性能瓶颈。

1.jps(JVM Process Status Tool)列出正在运行的虚拟机进程

  • 作用:列出正在运行的虚拟机进程,并显示虚拟机执行主类(main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID

  • 指令

    jps -l	# 输出主类的全名,如果进程执行的是jar包则输出jar路径
    jps -v	# 输出虚拟机进程启动时JVM参数
    

2.jstat(JVM Statistics Monitoring Tool)监视虚拟机各种运行状态信息的命令行工具

  • 作用:用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具

  • 指令

    jstat -gc 14607 250 3	# 14607是进程id,250表示250毫秒打印一次,3表示一共打印3次
    S0C    第一个幸存区大小
    S1C    第二个幸存区大小
    S0U    第一个幸存区使用大小
    S1U    第二个幸存区使用大小
    EC     伊甸园区大小
    EU     伊甸园区使用大小
    OC     老年代大小
    OU     老年代使用大小
    MC     方法区大小
    MU     方法区使用大小
    CCSC   压缩类空间大小
    CCSU   压缩类空间使用大小
    YGC    新生代垃圾回收次数
    YGCT   新生代垃圾回收消耗时间
    FGC    老年代垃圾回收次数
    FGCT   老年代垃圾回收消耗时间
    GCT	   垃圾回收消耗总时间
    

3.jinfo(Configuration Info for Java)实时的查看和调整虚拟机各项参数

  • 作用:实时的查看和调整虚拟机各项参数。使用jps -v命令可以查看虚拟机启动时显示指定的参数列表,但如果想知道未被显示指定的参数的系统默认值,除了去找资料外,就只能使用info -flag进行查询

  • 指令

    jinfo -flags 14607
    

4.jmap(Memory Map for Java)生成堆转储快照

  • 作用:用于生成堆转储快照。如果不使用jmap命令,想要获取Java堆转储快照,还有一些比较“暴力”的手段:-XX:+HeapDumpOnOutOfMemoryError参数可以让虚拟机在OOM异常出现之后自动生成dump文件,用于系统复盘环节

  • 指令

    jmap -dump:format=b,file=/root/a 14607	# 生成Java堆转储快照
    
    jmap -histo 14607 | more	# 显示堆中对象统计信息,包括类、实例数量、合计容量
    B:byte
    C:char
    I:int
    

5.jhat(JVM Heap Analysis Tool)分析jmap生成的堆转储快照

  • 作用:jhat命令常与jmap搭配使用,来分析jmap生成的堆转储快照。jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,可以在浏览器中查看

  • 特点

    • jhat分析工作是一个耗时且消费硬件资源的过程,一般从服务下载到本地分析
    • jhat的分析功能相对来说比较简陋
  • 指令

    ./jhat d://a
    

6.jstack(Stack Trace for Java)生成虚拟机当前时刻的线程快照

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

  • 指令

    jstack -l 14607		# 常用命令
    jstack -F 14607		# 当正常输出的请求不被响应时,强制输出线程堆栈Force
    

7.jconsole(Java Monitoring and Management Console)可视化监视、管理工具

  • 作用:是一种基于JMX的可视化监视、管理工具,它管理部分的功能是针对JMXBean进行管理,由于XBean可以使用代码、中间件服务器的管理控制台或者所有符合JMX规范的软件进行访问

  • 特点:jconsole集成了线程与内存的可视化展示

### JDK自带JVM 监控工具及其使用方法 #### 工具概述 JDK 提供了一系列用于监控和诊断 JVM工具,这些工具可以帮助开发者分析应用程序的性能、内存分配以及线程状态等问题。在 JDK 1.6 版本之后,许多早期的工具被 JVisualVM 替代[^1]。 --- #### 常见工具及用法 ##### **jps** `jps` 是一个轻量级的命令行工具,主要用于列出当前运行Java 进程。以下是其主要参数说明: - `-q`: 只显示进程 ID (PID)[^3]。 - `-l`: 显示完整的类名或 jar 文件路径[^4]。 - `-m`: 输出传递给 `main()` 方法的参数。 - `-v`: 列出 JVM 启动时使用的参数。 示例: ```bash jps -lv ``` 上述命令将返回所有正在运行Java 进程的 PID、完整类名以及 JVM 参数。 --- ##### **jstat** `jstat` 是一款强大的 JVM 统计信息监控工具,可以实时查看垃圾回收 (GC) 和内存使用情况。它支持多种选项来获取不同类型的统计数据。 常见选项包括: - `-gcutil`: 查看 GC 活动摘要。 - `-gccapacity`: 查看各代内存容量。 - `-class`: 查看类加载统计信息。 - `-compiler`: 查看 JIT 编译器活动。 示例: ```bash jstat -gcutil <pid> 1000 5 ``` 此命令每秒打印一次指定 PID 对应进程的 GC 使用率数据,共执行 5 次。 --- ##### **jvisualvm** `jvisualvm` 是一种图形化界面工具,集成了多个功能模块,能够全面监控 JVM运行状况。它的概览选项卡提供了关于系统资源、堆使用量、CPU 占用率等方面的高级视图[^2]。 启动方式: ```bash jvisualvm ``` 打开后可以通过连接本地或远程 JVM 实例来进行深入分析。 --- ##### **jconsole** 作为另一款 GUI 类型的应用程序,`jconsole` 支持对本地或者网络上的 Java 虚拟机进行管理与监视操作[^5]。 要实现远程 Tomcat 进程监控,则需先设置好相应的环境变量并重启服务使其生效;接着利用如下指令开启客户端窗口: ```bash jconsole localhost:12345 ``` 其中,“localhost:12345”代表目标服务器地址加端口号组合形式。 --- #### 小结 以上介绍了几种典型的 JDK 自带 JVM 监控手段及相关语法结构。具体选择哪一类取决于实际需求场景和个人偏好程度等因素考量之下决定采用何种方案最为合适有效。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值