Java性能分析中常用的命令和工具

命令功能
jps用于查看正在运行的Java进程的状态信息
jinfo用于查看和修改正在运行的 Java 进程的 Java 虚拟机(JVM)参数和系统属性。
jstack用于生成 Java 进程的线程转储信息
jmap用于生成 Java 进程的内存映射信息
jconsole是 Java 自带的监控和管理控制台,它提供了一个图形化界面,允许您监视和管理正在运行的 Java 应用程序的性能和资源使用情况
jvisualvm是一款功能强大的多合一故障诊断和性能监控的图形化工具

jps

jps (JVM Process Status Tool)命令用于查看正在运行的 Java 进程的状态信息,包括进程 ID 和主类名。

  1. 查看所有 Java 进程的进程 ID 和主类名:
    在这里插入图片描述

  2. 只输出 Java 进程的进程 ID:(-q:只输出进程ID,不包括类名和JAR文件名。)
    在这里插入图片描述

  3. 输出 Java 进程的进程 ID 和传递给 main 方法的参数:(-m:输出传递给 main 方法的参数。)
    在这里插入图片描述

  4. 输出 Java 进程的进程 ID 和主类全名:(-l:输出主类全名,或者对于JAR文件,输出JAR文件路径)
    在这里插入图片描述

jinfo

用于查看和修改正在运行的 Java 进程的 Java 虚拟机(JVM)参数和系统属性。

  1. 查看标志参数(-flags:打印指定 JVM 的参数值)
$ jinfo -flags 12345
Attaching to process ID 12345, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 11.0.12+7
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4294967296 -XX:MaxNewSize=1431306240 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC
Command line:  -XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4294967296 -XX:MaxNewSize=1431306240 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC

VM Flags:
-XX:CICompilerCount=3
-XX:InitialHeapSize=268435456
-XX:MaxHeapSize=4294967296
-XX:MaxNewSize=1431306240
-XX:MinHeapDeltaBytes=524288
-XX:NewSize=89128960
-XX:OldSize=179306496
-XX:+UseCompressedClassPointers
-XX:+UseCompressedOops
-XX:+UseFastUnorderedTimeStamps
-XX:+UseParallelGC
  1. 查看系统属性(-sysprops:打印Java虚拟机的系统属性)
$ jinfo -sysprops 12345
Attaching to process ID 12345, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 11.0.12+7
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4294967296 -XX:MaxNewSize=1431306240 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC
Command line:  -XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4294967296 -XX:MaxNewSize=1431306240 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC

Property settings:
    awt.toolkit = sun.awt.windows.WToolkit
    java.class.path = /path/to/your/application.jar
    ...
  1. 查看特定标志参数的值(-flag name:打印指定名称的标志参数的值。)
$ jinfo -flag UseG1GC 12345
Attaching to process ID 12345, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 11.0.12+7
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4294967296 -XX:MaxNewSize=1431306240 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC
Command line:  -XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4294967296 -XX:MaxNewSize=1431306240 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC

UseG1GC=true
  1. 修改特定标志参数的值(-flag [+|-]name:打印或设置指定名称的布尔标志参数的值)
    在这里插入图片描述

jstack

在这里插入图片描述

jstack(Java Stack Trace)命令用于生成 Java 进程的线程转储信息。它可以显示每个线程的堆栈跟踪,帮助您找出可能的死锁、死循环和线程问题。
在这里插入图片描述
在这里插入图片描述

jmap

在这里插入图片描述

jmap(Java Memory Map)命令用于生成 Java 进程的内存映射信息。它提供了堆的详细信息,包括 Java 堆内存、对象统计和内存使用情况的详细信息,可以帮助开发人员分析内存泄漏、内存使用情况等问题。
在这里插入图片描述
在这里插入图片描述

jconsole

jconsole(Java Monitoring and Management Console)是 Java 自带的监控和管理控制台,它提供了一个图形化界面,允许您监视和管理正在运行的 Java 应用程序的性能和资源使用情况。jconsole 是一个非常有用的工具,可以帮助开发人员识别问题、进行性能调优和监控Java应用程序。

主要功能:
在这里插入图片描述

①、启动Java应用程序

public class MyApp {
    public static void main(String[] args) {
        while (true) {
            System.out.println("Running...");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

②、打开终端,执行jconsole

③、在 jconsole 界面中,您可以看到一个列表,显示了正在运行的 Java 进程。选择您的应用程序进程并点击“连接”
在这里插入图片描述
④、在 jconsole 的不同选项卡中,您可以查看内存使用情况、线程状态、垃圾回收信息等。例如,您可以在“内存”选项卡中查看堆内存使用情况
在这里插入图片描述

⑤、在“线程”选项卡中,您可以查看每个线程的状态、堆栈跟踪等信息,以帮助您识别潜在的线程问题
在这里插入图片描述
jconsole 是一个强大的 Java 性能监控和管理工具,提供了丰富的功能来监视和分析应用程序的性能和资源使用情况。通过 jconsole,开发人员可以轻松地识别问题、分析性能瓶颈,以及进行调优,从而提升Java应用程序的性能和效率

VisualVM

Java VisualVM(Java Visual Monitoring and Troubleshooting Tool)是一款功能强大的多合一故障诊断和性能监控的图形化工具,它集成了多种性能统计工具的功能,使用它可以代替 jmap、jstack 甚至 jconsole
它是 Java 开发工具包(JDK)的一部分,可以帮助您实时监控应用程序的各种指标,如内存使用、线程情况、垃圾回收等,以便发现和解决性能问题。

主要功能:
在这里插入图片描述

  1. 启动 Java VisualVM: 您可以在JDK的 bin 目录中找到jvisualvm.exe(Windows)或 jvisualvm(Linux/macOS)并运行它。
    在这里插入图片描述

  2. 连接到应用程序: 在 Java VisualVM 中,点击的“远程”按钮,然后在“远程”面板中添加要连接的远程或本地Java进程。

  3. 监控性能: 连接到应用程序后,您可以查看实时性能监控信息,包括内存、线程、CPU使用等。您还可以选择不同的监视选项,如“监视”、“内存”、“线程”等标签。
    在这里插入图片描述

  4. 进行内存分析: 在“抽样器”标签中,您可以生成并分析堆转储,查看对象引用关系、占用内存的对象等
    在这里插入图片描述

  5. 线程分析和垃圾回收分析: 在“线程”和“监视”标签中,您可以监控线程状态、识别死锁,以及查看垃圾回收行为
    在这里插入图片描述
    总之,Java VisualVM 是一个强大的性能分析工具,可以帮助您监控、分析和优化Java应用程序的性能。通过实时监控、内存分析、线程分析等功能,您可以更深入地了解应用程序的运行情况,并解决性能问题。

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值