Performance Tuning -- 02 -- JVM监控和调优常用命令

本文介绍JVM性能监控与调优的常用命令,包括jps、jinfo、jstat、jmap、jstack、jhat的功能及使用方法,帮助开发者定位和解决生产环境中程序的性能问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接:Performance Tuning – 02 – JVM监控和调优常用命令


相关文章:


在生产环境下,程序或多或少都会碰到卡顿、CPU 占用率高等问题,而因为是生产环境,我们不能随意地关闭或重启程序。此时,我们可以通过 JDK 自带的状态监控命令和图形化管理工具来定位和解决问题,并作出相应的优化


一、jps (JVM Process Status Tool)

  • 用于列出正在运行的虚拟机进程,并显示虚拟机执行主类 (main() 方法所在的类) 名称以及虚拟机进程 ID

  • 命令格式

    • jps [options] <hostid>
  • 格式说明

    参数名含义
    options命令参数
    hostid进程 ID
  • 命令参数

    参数名含义
    -q只查看虚拟机进程 ID,忽略主类名称
    -m查看虚拟机启动时传递给主类 main() 方法的参数
    -l查看主类全名或 jar 包路径
    -v查看虚拟机启动时的 JVM 参数
  • 示例

    • 查看主类全名或 jar 包路径

      在这里插入图片描述


二、jinfo (Configuration Info for Java)

  • 用于实时查看和调整虚拟机的各项参数

  • 命令格式

    • jinfo [option] <pid>

    • jinfo [option] <executable core>

    • jinfo [option] [server_id] <remote server IP or hostname>

  • 格式说明

    参数名含义
    option命令参数
    pid进程 ID
    executable core可执行文件
    server_id调试服务器在远程服务器上的唯一 ID
    remote server IP or hostname远程服务器的 IP 地址或 hostname
  • 命令参数

    参数名含义
    -flag <name>查看指定参数
    -flag [+/-] <name>打开或关闭指定参数
    -flag <name> = <value>设置参数
    -flags查看所有 JVM 参数
    -sysprops查看所有系统参数
    <no-option>查看所有 JVM 参数和系统参数
    -h查看命令帮助信息
    -help查看命令帮助信息
  • 示例

    • 查看最大内存

      在这里插入图片描述

    • 查看是否启用了 CMS 收集器

      在这里插入图片描述

    • 查看是否启用了 G1 收集器

      在这里插入图片描述

    • 查看是否启用了 Parallel Scavenge 收集器

      在这里插入图片描述


三、jstat (JVM Statistics Monitoring Tool)

  • 用于查看虚拟机各种运行状态信息

  • 可以显示本地或远程虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据

  • 命令格式

    • jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
  • 格式说明

    参数名含义
    option命令参数
    -t将时间戳置为样本输出的第一列
    时间戳指的是目标 JVM 自启动以来经过的毫秒数
    -h每隔 n 个样本显示一行标题,n 为正整数
    默认为 0 只显示第一行数据的标题
    lines标题行之间的样本数
    vmid进程 ID
    interval采样间隔,取值范围 [s, ms],默认为 ms (可省略不写)
    count采样次数
  • 命令参数

    参数名含义
    -class查看类加载、卸载数量、总空间以及类装载所耗费的时间
    -gc查看 Java 堆状况,包括 Eden 区、2 个 Survivor 区、老年代、永久代等的容量,已用空间,垃圾收集时间合计等信息
    -gccapacity查看 Java 堆状况,主要关注 Java 堆各个区域使用到的最大、最小空间
    -gcutil查看 Java 堆状况,主要关注已使用空间占总空间的百分比
    -gccause作用与 -gcutil 一样,但是会额外输出导致上一次垃圾收集产生的原因
    -gcnew查看新生代垃圾收集状况
    -gcnewcapacity查看新生代垃圾收集状况,主要关注使用到的最大、最小空间
    -gcold查看老年代垃圾收集状况
    -gcoldcapacity查看老年代垃圾收集状况,主要关注使用到的最大、最小空间
    -gcmetacapacity查看元空间使用到的最大、最小空间
    -compiler查看即时编译器编译过的方法、耗时等信息
    -printcompilation查看已经被即时编译的方法
  • 示例

    • 查看类加载器行为统计信息

      在这里插入图片描述

    • 查看堆行为统计信息

      在这里插入图片描述

  • 输出说明

    • 查看类加载器行为统计信息

      字段含义
      Timestamp目标 JVM 自启动以来经过的毫秒数
      Loaded加载的类数
      Bytes加载的字节数
      Unloaded卸载的类数
      Bytes卸载的字节数
      Time执行类加载和类卸载消耗的时间
    • 查看有关垃圾回收堆行为的统计信息

      字段含义
      Timestamp目标 JVM 自启动以来经过的毫秒数
      S0Csurvivor0 空间大小
      S1Csurvivor1 空间大小
      S0Usurvivor0 已使用空间大小
      S1Usurvivor1 已使用空间大小
      ECEden 空间大小
      EUEden 已使用空间大小
      OC老年代空间大小
      OU老年代已使用空间大小
      MC元空间大小
      MU元空间已使用大小
      CCSC压缩类空间大小
      CCSU压缩类已使用空间大小
      YGC新生代垃圾回收次数
      YGCT新生代垃圾回收消耗的时间
      FGC老年代垃圾回收次数
      FGCT老年代垃圾回收消耗的时间
      GCT垃圾回收消耗的总时间
    • 其余命令输出字段含义,详见官方文档


四、jmap (Memory Map for Java)

  • 用于生成堆转储快照 (dump 文件)

  • 可以结合其他工具,用于定位程序内存溢出等问题

  • 命令格式

    • jmap [options] <pid>

    • jmap [options] <executable core>

    • jmap [options] [server_id] <remote server IP or hostname>

  • 格式说明

    参数名含义
    option命令参数
    pid进程 ID
    executable core可执行文件
    server_id调试服务器在远程服务器上的唯一 ID
    remote server IP or hostname远程服务器的 IP 地址或 hostname
  • 命令参数

    参数名含义
    <no-option>查看目标 JVM 中加载的每个共享对象的起始地址、映射大小和共享文件的完整路径
    -dump:[live], [format=b], [file=filename]生成 Java 堆的 dump 文件
    live:只转储堆中存活的对象,如果没有指定则转储所有对象
    format=b:二进制格式
    file=filename:dump 文件名称
    -finalizerinfo查看在 F-Queue 中等待 Finalizer 线程执行 finalizer() 方法的对象信息
    -heap查看 Java 堆详细信息,如使用哪种回收器、参数配置、分代状况等
    -histo[:live]查看 Java 堆中对象统计信息,包括类、实例数量、合计容量
    live:仅查看存活对象的统计信息
    -clstats查看类加载器统计信息,包括它的名称、活动程度、地址、父类加载器、加载的类数量、加载的类大小等信息
    -F当虚拟机进程对 -dump 命令没有响应时,可使用该选项强制生成 dump 文件
    -h查看命令帮助信息
    -help查看命令帮助信息
  • 示例

    • 生成堆转储快照 (dump 文件)

      在这里插入图片描述


五、jstack (Stack Trace for Java)

  • 用于生成当前时刻线程快照

  • 可以用于定位程序长时间卡顿的原因,如死锁、死循环等

  • 命令格式

    • jstack [options] <pid>

    • jstack [options] <executable core>

    • jstack [options] [server_id] <remote server IP or hostname>

  • 格式说明

    参数名含义
    options命令参数
    pid进程 ID
    executable core可执行文件
    server_id调试服务器在远程服务器上的唯一 ID
    remote server IP or hostname远程服务器的 IP 地址或 hostname
  • 命令参数

    参数名含义
    -F当正常输出的请求没有被响应时,强制输出线程堆栈
    -l查看线程堆栈信息,并同时查看锁的附加信息
    -m如果调用了本地方法,可用于查看 C/C++ 的堆栈信息
    -h查看命令帮助信息
    -help查看命令帮助信息
  • 示例

    • 查看线程堆栈信息

      在这里插入图片描述


六、jhat (JVM Heap Analysis Tool)

  • 用于分析堆转储快照 (dump 文件),并启动 Web 服务器,将分析结果以 Html 的形式展示出来,默认端口为 7000

  • 命令格式

    • jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>] [-version] [-h|-help] <file>
  • 命令参数

    参数名含义
    -Jflag将指令传递给虚拟机,如:-J-Xmx512m 表示能使用的最大堆大小为 512 MB
    -stack <bool>是否关闭跟踪对象分配调用堆栈,默认为 true
    -refs <bool>是否关闭对对象的引用跟踪,默认为 true
    -port <port>指定 Web 服务器的端口,默认为 7000
    -exclude <file>指定一个文件,该文件列出了应从可达对象查询中排除的数据成员
    -baseline <file>指定 Java 堆 dump 文件的基准
    两个 dump 文件中具有相同 ID 的对象标记为不是新对象,其他对象标记为新对象,这对于比较两个不同 dump 文件很有帮助
    -debug <int>设置调试级别
    0:没有调试输出
    1:调试 hprof 文件解析
    2:调试 hprof 文件解析,没有服务器
    -version查看版本信息
    -h查看命令帮助信息
    -help查看命令帮助信息
  • 示例

    • 启用 Web 服务分析 dump 文件

      在这里插入图片描述

      在这里插入图片描述

七、归纳总结

命令作用
jps用于列出正在运行的虚拟机进程
jinfo用于实时查看和调整虚拟机的各项参数
jstat用于查看虚拟机各种运行状态信息
jmap用于生成堆转储快照 (dump 文件)
jstack用于生成当前时刻线程快照
jhat用于分析堆转储快照 (dump 文件)

八、参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值