JVM调优常用的工具JPS、JMAP、JSTAT、JSTACK和JCMD的使用详解

这篇具有很好参考价值的文章主要介绍了JVM调优常用的工具JPS、JMAP、JSTAT、JSTACK和JCMD的使用详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

查看PID信息

首先启动一个服务

jstack和jmap的区别,jvm,java,jvm调优,jvm调优工具,jcmd

 使用jps 和 jps -l 的区别,使用jps -l 能够显示出服务的名称

jstack和jmap的区别,jvm,java,jvm调优,jvm调优工具,jcmd

 熟悉JVM调优中常用的工具JMAP、JSTAT和JSTACK

JMAP、JSTAT和JSTACK是Java开发中常用的工具,用于分析和调试Java应用程序。它们的使用场景如下:

  • JMAP:JMAP用于生成Java堆转储快照,以便分析Java应用程序的内存使用情况。它可以提供关于对象数量、类型、大小等信息,帮助识别内存泄漏或者内存溢出问题。
  • JSTAT:JSTAT用于监视和收集Java虚拟机(JVM)的各种统计数据,例如垃圾回收情况、类加载情况、线程数量等。它可以实时显示这些统计数据,帮助开发人员了解应用程序的性能状况。
  • JSTACK:JSTACK用于生成Java线程转储快照,以便分析Java应用程序的线程状态和调用栈信息。它可以帮助开发人员定位死锁、死循环、线程阻塞等问题,并提供线程运行轨迹,有助于进行线程级别的故障排查。
  • JCMD是一个多功能的工具,它是一个运用更为全面的工具,可用于获取目标 Java 进程的性能统计、内存使用、垃圾收集、线程堆栈、JVM 运行时间,GC、导出线程信息、堆信息等、简单理解为它可以直接使用相关的名称获取信息

综上所述,JMAP适用于内存分析,JSTAT适用于性能监控,JSTACK适用于线程分析。根据具体的问题和需求,选择合适的工具可以更好地帮助开发人员进行调试和优化。

JMAP的使用

JMAP是一个命令行工具,用于生成Java堆转储快照。

以下是JMAP的使用方法和常用属性的解析:

使用方法:
输入jmap -<option> <pid>,其中<option>为JMAP的选项,<pid>为Java进程的进程ID。


常用选项(属性):

  • heap: 生成Java堆转储快照。示例:jmap -heap <pid>
  • histo: 生成Java堆中对象的统计信息,包括对象数量、类型和大小等。示例:jmap -histo <pid>
  • dump: 生成Java堆转储快照,并保存到文件中。示例:jmap -dump:format=b,file=<filename> <pid>
  • finalizerinfo: 显示等待终结的对象信息。示例:jmap -finalizerinfo <pid>
  • clstats: 显示类加载器的统计信息。示例:jmap -clstats <pid>
  • permstat: 显示永久代(PermGen/Metaspace)的统计信息。示例:jmap -permstat <pid>

也可以在服务中查看:

jstack和jmap的区别,jvm,java,jvm调优,jvm调优工具,jcmd

例如:jmap -heap <pid>  

jstack和jmap的区别,jvm,java,jvm调优,jvm调优工具,jcmd

参数说明:  
Heap Configuration:   #堆配置情况 
   MinHeapFreeRatio         #堆最小使用比例
   MaxHeapFreeRatio        #堆最大使用比例
   MaxHeapSize                 #堆最大空间
   NewSize                         #新生代初始化大小
   MaxNewSize                  #新生代可使用最大容量大小
   OldSize                          #老生代大小
   NewRatio                       #新生代比例
   SurvivorRatio                 #新生代与suvivor的占比
   MetaspaceSize              #元数据空间初始大小
   CompressedClassSpaceSize     #类指针压缩空间大小, 默认为1G
   MaxMetaspaceSize  #元数据空间的最大值, 超过此值就会触发 GC溢出( JVM会动态地改变此值)
   G1HeapRegionSize       #区块的大小

jstack和jmap的区别,jvm,java,jvm调优,jvm调优工具,jcmd

Heap Usage:
G1 Heap:
   regions       # G1区块初始化大小
   capacity     #G1区块最大可使用大小
   used      #G1区块已使用内存
   free        #G1区块空闲内存
   18.137190118432045% used     #G1区块使用比例
G1 Young Generation:  #新生代
Eden Space:  #Eden区空间
   regions  = 670
   capacity = 2699034624 (2574.0MB)
   used     = 1405091840 (1340.0MB)
   free     = 1293942784 (1234.0MB)
   52.05905205905206% used
Survivor Space: #Survivor区
   regions  = 3
   capacity = 6291456 (6.0MB)
   used     = 6291456 (6.0MB)
   free     = 0 (0.0MB)
   100.0% used
G1 Old Generation: #老生代
   regions  = 72
   capacity = 1589641216 (1516.0MB)
   used     = 146589472 (139.79861450195312MB)
   free     = 1443051744 (1376.2013854980469MB)
   9.221544492213267% used

JSTAT的使用

JSTAT是一个用于监视和收集Java虚拟机(JVM)统计数据的命令行工具。它提供了多个选项和属性,用于显示不同方面的JVM统计信息。

以下是JSTAT的使用方法和常用属性的解析:

使用方法:
输入jstat -<option> <pid> [<interval> [<count>]]

其中<option>为JSTAT的选项,<pid>为Java进程的进程ID,

<interval>为采样间隔时间(以毫秒为单位),<count>为采样次数。

常用选项(属性):

  • -class:显示类加载、卸载数量和总空间等信息。
  • -compiler:显示JIT编译器的编译任务和耗时等信息。
  • -gc:显示垃圾回收器的统计信息,包括堆内存使用、GC时间、吞吐量等。
  • -gcutil:显示垃圾回收器的详细统计信息,包括堆内存使用、GC时间、吞吐量、GC持续时间等。
  • -gccause 显示GC触发的原因的时间等
  • -gccapacity:显示堆内存容量和使用情况的详细信息。
  • -gcnew:显示新生代垃圾回收器的统计信息。
  • -gcnewcapacity:显示新生代堆内存容量和使用情况的详细信息。
  • -gcold:显示老年代垃圾回收器的统计信息。
  • -gcoldcapacity:显示老年代堆内存容量和使用情况的详细信息。
  • -gcpermcapacity:显示永久代(PermGen/Metaspace)容量和使用情况的详细信息。

也可以在Linux中查看具体的选项:

jstack和jmap的区别,jvm,java,jvm调优,jvm调优工具,jcmd

例如:jstat -gcutil 23397 1000 15     -- 每秒中打印一次,打印15次

jstack和jmap的区别,jvm,java,jvm调优,jvm调优工具,jcmd

 也可以换成如下写法:

jstack和jmap的区别,jvm,java,jvm调优,jvm调优工具,jcmd

通过查看 新生代、老年代以及GC的次数、时间、调整服务启动参数的设置

参数解析:

  • S0: 幸存者区(Survivor)0的使用百分比。
  • S1: 幸存者区(Survivor)1的使用百分比。
  • E: 伊甸园(Eden)区的使用百分比。
  • O: 老年代(Old Generation)的使用百分比。
  • M: 元空间(Metaspace)的使用百分比。
  • CCS: 压缩类空间(Compressed Class Space)的使用百分比。
  • YGC: 年轻代垃圾回收的次数。
  • YGCT: 年轻代垃圾回收的总时间(以秒为单位)。
  • FGC: Full GC(全局垃圾回收)的次数。
  • FGCT: Full GC(全局垃圾回收)的总时间(以秒为单位)。
  • GCT: 所有垃圾回收的总时间(以秒为单位)。
  • NGCMN: 年轻代最小容量(以KB为单位)。
  • NGCMX: 年轻代最大容量(以KB为单位)。
  • NGC: 年轻代当前容量(以KB为单位)。
  • OGCMN: 老年代最小容量(以KB为单位)。
  • OGCMX: 老年代最大容量(以KB为单位)。
  • OGC: 老年代当前容量(以KB为单位)。
  • MCMN: 元空间最小容量(以KB为单位)。
  • MCMX: 元空间最大容量(以KB为单位)。
  • MC: 元空间当前容量(以KB为单位)。
  • CCSMN: 压缩类空间最小容量(以KB为单位)。
  • CCSMX: 压缩类空间最大容量(以KB为单位)。
  • CCSC: 压缩类空间当前容量(以KB为单位)。

通过分析这些参数信息,可以了解垃圾回收器的使用情况、堆内存的使用情况和变化趋势等,帮助识别内存问题并进行性能调优。

例如:jstat -gccause 23397 1s 10     -- 查看GC的原因

jstack和jmap的区别,jvm,java,jvm调优,jvm调优工具,jcmd

JSTACK的使用

jstack是一个用于生成Java线程转储快照的命令行工具,它可以帮助分析和诊断Java应用程序中的线程问题。

使用方法:
     输入jstack [-m] <pid>,其中<pid>为Java进程的进程ID。


常用选项(属性):

  • -l:输出长格式线程转储,包括锁信息。
  • -F:当目标Java进程无响应时,强制生成线程转储。
  • -m:输出Java和本地堆栈信息。
  • -h:显示帮助信息。

输出解析:
jstack输出的内容包含了当前Java进程中所有线程的堆栈跟踪信息。每个线程的堆栈跟踪以线程ID开始,并按照调用层次结构显示方法调用序列。

以下是一些常见的线程状态和属性的解析:

  • java.lang.Thread.State:线程的状态,如RUNNABLE(运行中)、WAITING(等待中)、TIMED_WAITING(定时等待中)等。
  • at <class>.<method>(<file>:<line>):方法调用的堆栈跟踪信息,包括类名、方法名和源代码文件位置。
  • Locked <monitor>:线程正在持有某个监视器锁。
  • Waiting on <monitor>:线程正在等待某个监视器锁。
  • Blocked on <monitor>:线程被阻塞在某个监视器锁上。

通过分析线程转储快照,可以了解Java应用程序中各个线程的状态、堆栈跟踪信息以及可能存在的死锁或性能问题。这对于诊断和解决线程相关的问题非常有帮助。

请注意,jstack命令需要与目标Java进程具有相同的用户权限才能执行成功。另外,建议在生产环境中谨慎使用该命令,以避免对应用程序性能产生不利影响。

例如: jstack -l 23397

jstack和jmap的区别,jvm,java,jvm调优,jvm调优工具,jcmd

JCMD的使用

使用帮助文档:

jstack和jmap的区别,jvm,java,jvm调优,jvm调优工具,jcmd

 使用 jcmd 获取服务进程

jstack和jmap的区别,jvm,java,jvm调优,jvm调优工具,jcmd

使用 jcmd <pid> help 获取可执行命令

jstack和jmap的区别,jvm,java,jvm调优,jvm调优工具,jcmd

例如: jcmd 23397 GC.heap_info

jstack和jmap的区别,jvm,java,jvm调优,jvm调优工具,jcmd

 例如: jcmd 23397  Thread.print

jstack和jmap的区别,jvm,java,jvm调优,jvm调优工具,jcmd

 总之,jcmd是一个功能强大的工具,可以帮助开发人员和运维人员对Java应用程序进行诊断、监控和管理,从而提高应用程序的可靠性和性能。文章来源地址https://www.toymoban.com/news/detail-768123.html

到了这里,关于JVM调优常用的工具JPS、JMAP、JSTAT、JSTACK和JCMD的使用详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JVM工具之jstat

    JVM工具之jstat查询GC统计信息分析jstat基本使用语法jstat -class 加载类统计jstat -compiler 编译统计jstat -gc 垃圾回收统计jstat -gccapacity 垃圾回收器内存空间统计jstat -gccause 垃圾回收器分析统计jstat -gcmetacapacity 元数据内存空间统计jstat -gcnew 新生代垃圾回收统计jstat -gcnewcapacity 新生代

    2024年02月04日
    浏览(28)
  • JVM之jmap java内存映射工具

    jdk安装后会自带一些小工具, jmap 命令( Memory Map for Java )是其中之一。主要用于打印指定Java进程(或核 心文件、远程调试服务器)的共享对象内存映射或堆内存细节。 jmap命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的 大

    2024年02月04日
    浏览(36)
  • linux的jstack,jmap命令的正确安装附详细教程

    先执行命令    

    2024年02月11日
    浏览(35)
  • Java线上故障排查(CPU、磁盘、内存、网络、GC)+JVM性能调优监控工具+JVM常用参数和命令

    根据服务部署和项目架构,从如下几个方面排查: (1)运用服务器:排查内存,cpu,请求数等; (2)文件图片服务器:排查内存,cpu,请求数等; (3)计时器服务器:排查内存,cpu,请求数等; (4)redis服务器:排查内存,cpu,连接数等; (5)db服务器:排查内存,cpu,连接数

    2024年02月07日
    浏览(46)
  • JVM工具-1. jps:虚拟机进程状态工具

    jps(JVM Process Status Tool):虚拟机进程状态工具,可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID(LVMID,Local Vitual Machine Identifier),它是使用频率最高的JDK命令行工具,因为其他JDK工具大多需要

    2024年02月11日
    浏览(27)
  • JDK 常用工具 —— jmap 详解

    jmap 是 JDK 自带的一个命令行工具,可以用于生成 Java Heap Dump 文件,以及查看 Java 进程中的内存使用情况。 本文内容来自一篇整理得非常详细的文档: https://juejin.cn/post/6844904062526160904 option:命令选项,常用选项如下: -heap:打印 Java 堆概要信息,包括使用的 GC 算法、堆配置

    2024年02月06日
    浏览(29)
  • jps(JVM Process Status Tool):虚拟机进程状况工具

    列出正在运行的虚拟机进程,并显示虚拟机执行主类名称(Main Class,main()函数所在的类)以及这些进程的本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)。对于本地虚拟机进程来说,LVMID与操作系统的进程ID(PID,Process Identifier)是一致的, 使用Windows的任务管理器或者

    2024年02月12日
    浏览(30)
  • JVM常用调优策略

    调优之前首先我们要知道怎样才算是“优”,不能笼统的说我的程序性能很好,所以就需要有一个具体的指标来衡量性能情况,而在JVM里面衡量性能两个指标分别“吞吐量”和“停顿时间”。 吞吐量: 程序运行过程中执行两种任务,分别是执行业务代码和进行垃圾回收,吞

    2024年02月09日
    浏览(27)
  • JVM实战(19)——JVM调优工具概述

    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖,挖的越深,基础越扎实! 阶段1、深入多线程 阶段2、深入多线程设计模式 阶段3、深入juc源码解析

    2024年01月18日
    浏览(42)
  • JVM——配置常用参数,GC调优策略

    Java内存区域常见配置参数概览 堆参数; 回收器参数; 项目中常用配置; 常用组合; Java内存区域常见配置参数概览 堆参数 回收器参数 如上表所示,目前 主要有串行、并行和并发三种 ,对于大内存的应用而言,串行的性能太低,因此使用到的主要是并行和并发两种。并行

    2024年02月12日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包