JVM(二十一) -- 性能监控与调优(二) -- JVM监控及诊断工具--命令行篇

1. jps:查看正在运行的java进程

1.1 基本情况:

jps:java process status

显示指定系统内所有的hotspot虚拟机进程(查看虚拟机进程信息),可用于查询正在进行的虚拟机进程。

说明:对于本地虚拟机进程来说,进程的本地虚拟机ID和操作系统的进程ID是一致的,是唯一的。

在这里插入图片描述

1.2 基本语法:

C:\Users\xxx>jps -help
usage: jps [--help]
       jps [-q] [-mlvV] [<hostid>]

Definitions:
    <hostid>:      <hostname>[:<port>]
    -? -h --help -help: Print this help message and exit.

在这里插入图片描述

举例:jps -l,其他的自己试试

C:\Users\xxx>jps -l
5600 org.jetbrains.jps.cmdline.Launcher
1588 org.jetbrains.idea.maven.server.RemoteMavenServer
21844
25560 org.jetbrains.idea.maven.server.RemoteMavenServer
25704 org.jetbrains.jps.cmdline.Launcher
5512 org.jetbrains.idea.maven.server.RemoteMavenServer
4620 jdk.jcmd/sun.tools.jps.Jps

# 可以配合使用,但是q和其他的混合用只能实现q的效果
C:\Users\xxx>jps -lvm
。。。

在这里插入图片描述

2. jstat:查看jvm统计信息

2.1 基本情况

在这里插入图片描述

2.2 基本语法

jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
C:\Users\xxx>jstat
Usage: jstat --help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

Definitions:
  <option>      An option reported by the -options option
  <vmid>        Virtual Machine Identifier. A vmid takes the following form:
                     <lvmid>[@<hostname>[:<port>]]
                Where <lvmid> is the local vm identifier for the target
                Java virtual machine, typically a process id; <hostname> is
                the name of the host running the target Java virtual machine;
                and <port> is the port number for the rmiregistry on the
                target host. See the jvmstat documentation for a more complete
                description of the Virtual Machine Identifier.
  <lines>       Number of samples between header lines.
  <interval>    Sampling interval. The following forms are allowed:
                    <n>["ms"|"s"]
                Where <n> is an integer and the suffix specifies the units as
                milliseconds("ms") or seconds("s"). The default units are "ms".
  <count>       Number of samples to take before terminating.
  -J<flag>      Pass <flag> directly to the runtime system.
  -? -h --help  Prints this help message.
  -help         Prints this help message.

基于以下jvm:

C:\Users\xxx>jps
7696 Launcher
1588 RemoteMavenServer
16580 Jps
21844
12744 CreaSuytestApplication
25560 RemoteMavenServer
25704 Launcher
5512 RemoteMavenServer
2.2.1 option参数:

选项option可以由以下值构成:

  • 类装载相关的
    • -class:显示ClassLoader的相关信息:类的装在、卸载数量、总空间、类装载所消耗的时间等
C:\Users\xxx>jstat -class 12744
Loaded  Bytes  Unloaded  Bytes     Time
 18296 34333.1        6     5.4      14.55
  • 垃圾回收相关的
    • -gc:显示与GC相关的堆信息。包括Eden区、两个survivor区、老年代、永久带等的容量、已用空间、GC时间合计等信息
    • -gccapacity:显示内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间。
    • -gcutil:显示内容与-gc基本相同,但输出主要关注己使用空间占总空间的百分比。
    • -gccause:与-gutil功能一样,但是会额外输出导致最后一次或当前正在发生的GC产生的原因
    • -gcnew:显示新生代GC状况
    • -gcnewcapacity:显示内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间
    • -geold:显示老年代GC状况
# JVM参数设置:-Xms60m -Xmx60m -XX:SurvivorRatio=8
# 代码:
public static void main(String[] args) {
    ArrayList<byte[]> list = new ArrayList<>();

    for (int i = 0; i < 1000; i++) {
        byte[] arr = new byte[1024*1024];
        list.add(arr);
        try {
            Thread.sleep(300);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
# 查看gc:其他的自行查看
C:\Users\xxx>jstat -gc 22716 500
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT    CGC    CGCT     GCT
2048.0 2048.0  0.0   2016.0 16384.0  12607.8   40960.0    16215.4   5504.0 5034.3 640.0  544.8       3    0.011   0      0.000   -          -    0.011
2048.0 2048.0  0.0   2016.0 16384.0  14655.8   40960.0    16215.4   5504.0 5034.3 640.0  544.8       3    0.011   0      0.000   -          -    0.011
2048.0 2048.0  0.0    0.0   16384.0    0.0     40960.0    32775.4   5504.0 5034.3 640.0  544.8       4    0.028   1      0.050   -          -    0.078
2048.0 2048.0  0.0    0.0   16384.0   2368.0   40960.0    32775.4   5504.0 5034.3 640.0  544.8       4    0.028   1      0.050   -          -    0.078
2048.0 2048.0  0.0    0.0   16384.0   4416.1   40960.0    32775.4   5504.0 5034.3 640.0  544.8       4    0.028   1      0.050   -          -    0.078
2048.0 2048.0  0.0    0.0   16384.0   5440.1   40960.0    32775.4   5504.0 5034.3 640.0  544.8       4    0.028   1      0.050   -          -    0.078
2048.0 2048.0  0.0    0.0   16384.0   7488.1   40960.0    32775.4   5504.0 5034.3 640.0  544.8       4    0.028   1      0.050   -          -    0.078
2048.0 2048.0  0.0    0.0   16384.0   9536.1   40960.0    32775.4   5504.0 5034.3 640.0  544.8       4    0.028   1      0.050   -          -    0.078
2048.0 2048.0  0.0    0.0   16384.0  10560.2   40960.0    32775.4   5504.0 5034.3 640.0  544.8       4    0.028   1      0.050   -          -    0.078
2048.0 2048.0  0.0    0.0   16384.0  12608.2   40960.0    32775.4   5504.0 5034.3 640.0  544.8       4    0.028   1      0.050   -          -    0.078
2048.0 2048.0  0.0    0.0   16384.0  14656.2   40960.0    32775.4   5504.0 5034.3 640.0  544.8       4    0.028   1      0.050   -          -    0.078
2048.0 2048.0  0.0    0.0   16384.0   9216.1   40960.0    39943.6   5504.0 5034.3 640.0  544.8       4    0.028   2      0.073   -          -    0.101
2048.0 2048.0  0.0    0.0   16384.0  10553.0   40960.0    39943.6   5504.0 5034.3 640.0  544.8       4    0.028   2      0.073   -          -    0.101
2048.0 2048.0  0.0    0.0   16384.0  12601.0   40960.0    39943.6   5504.0 5034.3 640.0  544.8       4    0.028   2      0.073   -          -    0.101
2048.0 2048.0  0.0    0.0   16384.0  13625.1   40960.0    39943.6   5504.0 5034.3 640.0  544.8       4    0.028   2      0.073   -          -    0.101
2048.0 2048.0  0.0    0.0   16384.0  15673.1   40960.0    39943.6   5504.0 5034.3 640.0  544.8       4    0.028   2      0.073   -          -    0.101
2048.0 2048.0  0.0    0.0   16384.0  15360.5   40960.0    40778.8   5504.0 5034.3 640.0  544.8       4    0.028   5      0.171   -          -    0.199
2048.0 2048.0  0.0    0.0   16384.0  15944.4   40960.0    40778.8   5504.0 5034.3 640.0  544.8       4    0.028   5      0.187   -          -    0.215

C:\Users\xxx>
  • JIT相关的
    • -compiler:显示JIT编译器编译过的方法、耗时等信息
    • -printcompilation:输出已经被JIT编译的方法
C:\Users\xxx>jstat -compiler 12744
Compiled Failed Invalid   Time   FailedType FailedMethod
   13314      7       0     6.92          1 com/alibaba/fastjson/parser/deserializer/JavaBeanDeserializer deserialze

C:\Users\xxx>jstat -printcompilation 12744
Compiled  Size  Type Method
   13385     10    1 org/apache/http/impl/execchain/HttpResponseProxy getEntity
2.2.2 interval参数:查询间隔

用于指定输出统计数据的周期,单位为毫秒。即:查询间隔

直到程序停止或者内存溢出

C:\Users\xxx>jstat -class 12744 1000
Loaded  Bytes  Unloaded  Bytes     Time
 18430 34517.8        6     5.4      14.66
 18430 34517.8        6     5.4      14.66
 18430 34517.8        6     5.4      14.66
 18430 34517.8        6     5.4      14.66
2.2.3 count参数:

用于指定查询的总次数:

C:\Users\xxx>jstat -class 12744 1000 5
Loaded  Bytes  Unloaded  Bytes     Time
 18430 34517.8        6     5.4      14.66
 18430 34517.8        6     5.4      14.66
 18430 34517.8        6     5.4      14.66
 18430 34517.8        6     5.4      14.66
 18430 34517.8        6     5.4      14.66

C:\Users\xxx>
2.2.4 -t参数:

可以在输出信息前加上一个timestamp列,显示程序的运行时间。单位秒。

即程序从开始执行到现在经过了多少秒:

C:\Users\xxx>jstat -class -t 12744 1000 5
Timestamp       Loaded  Bytes  Unloaded  Bytes     Time
          603.3  18432 34530.9        6     5.4      14.70
          604.4  18432 34530.9        6     5.4      14.70
          605.4  18432 34530.9        6     5.4      14.70
          606.4  18432 34530.9        6     5.4      14.70
          607.4  18432 34530.9        6     5.4      14.70

经验
我们可以比较Java进程的启动时间以及总GC时间(GCT列),或者两次测量的间隔时间以及总GC时间的增量,来得出GC时间占运行时间的比例。

如果该比例超过20%,则说明目前堆的压力较大:如果该比例超过90%,则说明堆里几乎没有可用空间,随时都可能抛出OOM异常。

2.2.5 -h参数:

可以在周期型数据输出时,输出多少行数据后输出一个表头信息:

每隔三行信息打印一次表头

C:\Users\xxx>jstat -class -t -h3 12744 1000 10
Timestamp       Loaded  Bytes  Unloaded  Bytes     Time
          673.7  18437 34539.6        6     5.4      14.71
          674.8  18437 34539.6        6     5.4      14.71
          675.8  18437 34539.6        6     5.4      14.71
Timestamp       Loaded  Bytes  Unloaded  Bytes     Time
          676.8  18437 34539.6        6     5.4      14.71
          677.8  18437 34539.6        6     5.4      14.71
          678.9  18437 34539.6        6     5.4      14.71
Timestamp       Loaded  Bytes  Unloaded  Bytes     Time
          679.9  18437 34539.6        6     5.4      14.71
          680.9  18437 34539.6        6     5.4      14.71

2.3 补充

jstat还可以用来判断是否出现内存泄漏。

第1步:
在长时间运行的Java程序中,我们可以运行jstat命令连续获取多行性能数据,并取这几行数据中OU列(即已占用的老年代内存)的最小值
第2步
然后,我们每隔一段较长的时间重复一次上述操作,来获得多组OU最小值。如果这些值呈上涨趋势。则说明该Java程序的老年代内存己使用量在不断上涨,这意味着无法回收的对象在不断增加,因此很有可能存在存泄漏。

3. jinfo:实时查看和修改JVM配置参数

3.1 基本情况

jinfo(Configuration Info for Java)
查看虚拟机配置参数信思,也可用于调整虚拟机的配置参数

在很多情况下,Java应用程序不会指定所有的Java虚拟机参数。而此时,开发人员可能不知道某一个具体的Java虚拟机参数的默认值。在这种情况下,可能需要通过查找文档获取某个参数的默认值。这个查找过程可能是非常艰难的。但有了 jinfo工具,开发人员可以很方便地找到Java虚拟机参数的当前值。

C:\Users\xxx>jinfo
Usage:
    jinfo <option> <pid>
       (to connect to a running process)

where <option> is one of:
    -flag <name>         to print the value of the named VM flag
    -flag [+|-]<name>    to enable or disable the named VM flag
    -flag <name>=<value> to set the named VM flag to the given value
    -flags               to print VM flags
    -sysprops            to print Java system properties
    <no option>          to print both VM flags and system properties
    -? | -h | --help | -help to print this help message

3.2 基本语法

# java进程ID必须加上
jinfo <option> <pid>

在这里插入图片描述

3.2.1 查看
  • jinfo -sysprops PID:查看由System.getProperties取得的参数
  • jinfo -flags PID:查看曾经夫过值的一些参数
C:\Users\xxx>jinfo -flags 14372
VM Flags:
-XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:CICompilerCount=4 -XX:InitialHeapSize=268435456 -XX:+ManagementServer -XX:MaxHeapSize=4273995776 -XX:MaxNewSize=1424490496 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 -XX:TieredStopAtLevel=1 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
  • jinfo -flag: 具体参数 PID:查看某个java进程的具体参数的值
C:\Users\xxx>jinfo -flag UseParallelGC 14372
-XX:+UseParallelGC

C:\Users\xxx>jinfo -flag UseG1GC 14372
-XX:-UseG1GC
3.2.2 修改

jinfo不仅可以查看运行时某一个Java虚拟机参数的实际取值,甚至可以在运行时修改部分参数,并使之立即生效。

但是,并非所有参数都支持动态修改。参数只有被标记为manageable的flag可以被实时修改。其实,这个修改能力是极其有限的。
在这里插入图片描述

  • 修改布尔类型的:
C:\Users\xxx>jinfo -flag PrintGCDetails 14372
-XX:-PrintGCDetails

C:\Users\xxx>jinfo -flag +PrintGCDetails 14372

C:\Users\xxx>jinfo -flag PrintGCDetails 14372
-XX:+PrintGCDetails
  • 修改数值类型的
C:\Users\xxx>jinfo -flag MaxHeapFreeRatio 14372
-XX:MaxHeapFreeRatio=100

C:\Users\xxx>jinfo -flag MaxHeapFreeRatio=90 14372

C:\Users\xxx>jinfo -flag MaxHeapFreeRatio 14372
-XX:MaxHeapFreeRatio=90

注意:进程重启后,刚刚的设置就失效了

3.3 拓展

  • java -XX: -PrintFlagslnitial:查看所有JVM参数启动的初始值
  • java -XX: +PrintFlagsFinal :查看所有JVM参数的最终值
  • java -XX: +PrintCommandLineflags: 查看那些已经被用户或者JVM设置过的详细的XX参数的名称和值

4. jmap:导出内存映像文件&内存使用情况

4.1 基本情况:

jmap( JVM Memory Map):作用一方面是获取dump文件(堆转储快照文件,二进制文件),它还可以获取目标Java进程的内存相关信息,包括Java堆各区域的使用情况、堆中对象的统计信息、类加载信息等

开发人员可以在控制台中输入命令“jmap -help”查阅jmap工具的具体使用方式和一些标准选项配置。

C:\Users\xxx>jmap
Usage:
    jmap -clstats <pid>
        to connect to running process and print class loader statistics
    jmap -finalizerinfo <pid>
        to connect to running process and print information on objects awaiting finalization
    jmap -histo[:[<histo-options>]] <pid>
        to connect to running process and print histogram of java object heap
    jmap -dump:<dump-options> <pid>
        to connect to running process and dump java heap
    jmap -? -h --help
        to print this help message

    dump-options:
      live         dump only live objects
      all          dump all objects in the heap (default if one of "live" or "all" is not specified
      format=b     binary format
      file=<file>  dump heap to <file>

    Example: jmap -dump:live,format=b,file=heap.bin <pid>

    histo-options:
      live         count only live objects
      all          count all objects in the heap (default if one of "live" or "all" is not specified)
      file=<file>  dump data to <file>

    Example: jmap -histo:live,file=/tmp/histo.data <pid>

4.2 基本语法

它的基本使用语法为:

  • jmap [option] <pid>
  • jmap [option] <executable core>
  • jmap [option] [server_id@] <remote server IP or hostname>

其中option包括:
在这里插入图片描述

4.3 使用一:导出内存映像文件

一般来说,使用jmap指令生成dump文件的操作算得上是最常用的jmap命令之一,将堆中所有存活对象导出至一个文件之中。

Heap Dump又叫做堆存储文件,指一个Java进程在某个时间点的内存快照。 Heap Dump在触发内存快照的时候会保存此刻的信息如下:

  • All Objects:Class, fields, primitive values and references
  • All Classes:Classloader, name, super class, static fields
  • Garbage Collection Roots:Objects defined to be reachable by the JVM
  • Thread Stacks and Local Variables:The call-stacks of threads at the moment of the snapshot, and per-frame information about local objects

说明:

  1. 通常在写 Heap Dump文件前会触发一次Full GC,所以 heap dump文件里保存的都是FullGC后留下的对象信息。(针对自动的方式)
  2. 由于生成dump文件比较耗时,因此大家需要耐心等待,尤其是大
    内存镜像生成dump文件则需要耗费更长的时间来完成
4.3.1 手动的方式:

由于jmap将访问堆中的所有对象,为了保证在此过程中不被应用线程干扰,map需要借助安全点机制,让所有线程停留在不改变堆中数据的状态。也就是说,由jmap导出的堆快照必定是安全点位置的。这可能导致基于该堆快照的分析结果存在偏差。

举个例子,假设在编译生成的机器码中,某些对象的生命周期在两个安全点之间,那么live选项将无法探知到这些对象。

另外,如果某个线程长时间无法跑到安全点,jmap将一直等下去。

与前面讲的 jstat则不同,垃圾回收器会主动将 jstat所需要的摘要数据保存至固定位置之中,而jstat只需直接读取即可。

jmap -dump:format=b,file=<filename.hprof> <pid>
jmap -dump:live,format=b,file=<filename.hprof> <pid>
C:\Users\xxx>jmap -dump:format=b,file=C:\ca-card\1.hprof 20496
Heap dump file created

C:\Users\xxx>jmap -dump:format=b,file=C:\ca-card\2.hprof 20496
Heap dump file created

C:\Users\xxx>jmap -dump:format=b,file=C:\ca-card\3.hprof 20496
Heap dump file created

# 查看存活对象
C:\Users\xxx>jmap -dump:live,format=b,file=C:\ca-card\4.hprof 20496

在这里插入图片描述

4.3.2 自动的方式:

当程序发生OOM退出系统时,一些瞬时信息都随着程序的终止而消失,而重现OOM问题往往比较困难或者耗时。此时若能在OOM时,自动导出dump文件就显
得非常迫切。

这里介绍一种比较常用的取得堆快照文件的方法,即使用:

  • -XX:+HeapDumpOnOutOfMemoryError:在程序发生OOM时,导出应用程序的当前堆快照。
  • -XX: HeapDumpPath:可以指定堆快照的保存位置。

比如:

-Xmx100m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\m.hprof

4.4 使用二:显示堆内存相关信息

# 展示堆空间相关信息
jmap -heap PID
# 展示堆空间对象的信息、大小
jmap -histo PID

4.5 使用三:其他作用

# 查看系统的ClassLoader信息
jmap -permstat pid
# 查看堆积在finalizer队列中的对象
jmap -finalizerinfo

4.6 小结

在这里插入图片描述

5. jhat:jdk自带堆分析工具

5.1 基本情况

jhat(JVM Heap Analysis Tool):
Sun JDK提供的jhat命令与jmap命令搭配使用,用于分析jmap生成的 heap dump文件(堆转储快照)。jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,用户可以在浏览器中查看分析结果(分析虚拟机转储快照信息)。

使用了jhat命令,就启动了一个http服务,端口是7000,Bihttp://localhost:7000/就可以在浏览器里分析。

说明:jhat命令在JDK9、JDK10中已经被删除,官方建议用VisualVM代替

5.2 基本语法

在这里插入图片描述

6. jstack:打印JVM中线程快照

jstack( JVM Stack Trace):用于生成虚拟机指定进程当前时刻的线程快照(虚拟机堆栈跟踪)。线程快照就是当前虚拟机内指定进程的每一条线程正在执行的方法堆栈的集合。

生成线程快照的作用:可用于定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等问题。这些都是导致线程长时间停顿的常见原因。当线程出现停顿时,就可以用jstack显示各个线程调用的堆栈情况。

在thread dump中,要留意下面几种状态

  • 死锁,,Deadlock(重点关注)
  • 等待资源, Waiting on condition(重点关注)
  • 等待获取监视器, Waiting on monitor entry(重点关注)
  • 阻塞, Blocked(重点关注)
  • 执行中, Runnable
  • 暂停, Suspended
C:\Users\xxx>jstack
Usage:
    jstack [-l][-e] <pid>
        (to connect to running process)

Options:
    -l  long listing. Prints additional information about locks
    -e  extended listing. Prints additional information about threads
    -? -h --help -help to print this help message

7. jcmd:多功能命令行

在JDK1.7以后,新增了一个命令行工具jcmd

它是一个多功能的工具,可以用来实现前面除jstat之外所有命令的功能。比如:用它来导出堆、内存使用、查看]ava进程、导出线程信息、执行GC、JVM运行时间等。

jcmd拥有jmap的大部分功能,并且在Oracle的官方网站上也推荐使用jcmd命令代jmap命令

C:\Users\于海鑫>jcmd -h
Usage: jcmd <pid | main class> <command ...|PerfCounter.print|-f file>
   or: jcmd -l
   or: jcmd -h

  command must be a valid jcmd command for the selected jvm.
  Use the command "help" to see which commands are available.
  If the pid is 0, commands will be sent to all Java processes.
  The main class argument will be used to match (either partially
  or fully) the class used to start Java.
  If no options are given, lists Java processes (same as -l).

  PerfCounter.print display the counters exposed by this process
  -f  read and execute commands from the file
  -l  list JVM processes on the local machine
  -? -h --help print this help message

在这里插入图片描述

C:\Users\xxx>jcmd 544 help
544:
The following commands are available:
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
VM.check_commercial_features
VM.unlock_commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.run_finalization
GC.run
VM.uptime
VM.flags
VM.system_properties
VM.command_line
VM.version
help

For more information about a specific command use 'help <command>'.

C:\Users\xxx>jcmd 544 VM.flags
544:
-XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:CICompilerCount=4 -XX:InitialHeapSize=268435456 -XX:+ManagementServer -XX:MaxHeapSize=4273995776 -XX:MaxNewSize=1424490496 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 -XX:TieredStopAtLevel=1 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC

8. jstatd:远程主机信息收集

之前的指令只涉及到监控本机的Java应用程序,而在这些工具中,一些监控工具也支持对远程计算机的监控(如jps、 jstat)。为了启用远程监控,则需要配合使用 jstatd工具。

命令 jstatd,是一个RMI服务端程序,它的作用相当于代理服务器,建立本地计算机与远程监控工具的通信。 jstatd服务器将本机的Java应用程序信息传递到远程计算机
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM工具命令详解》是一份预习资料,主要介绍了Java虚拟机(JVM过程中使用的一些工具命令。这些工具命令可以帮助开发人员诊断JVM性能问题。 文中首先介绍了常用的JVM工具命令,包括jps、jstat、jinfo、jmap、jhat等。这些命令可以用于查看JVM进程信息、统计JVM内存和线程情况、获取JVM配置参数等。通过使用这些工具命令,开发人员可以快速定位JVM性能瓶颈所在,进化。 接下来,文中详细介绍了每个工具命令的使用方法和参数解释。例如,jstat命令可以用于查看JVM内存情况,包括堆内存使用量、垃圾回收情况等。而jmap命令可以用于生成堆内存转储文件,帮助开发人员分析内存泄漏问题。通过掌握这些工具命令的使用,开发人员可以更加高效地进JVM。 此外,文中还介绍了一些实际的案例,通过使用这些工具命令来解决实际的JVM性能问题。这些案例包括内存泄漏、线程死锁、CPU占用过高等问题。通过学习这些案例,开发人员可以更好地理解如何利用工具命令诊断和解决JVM性能问题。 总的来说,《JVM工具命令详解》是一份非常实用的预习资料,适合那些需要深入学习JVM性能化的开发人员。通过学习和掌握这些工具命令,开发人员能够更加高效地进JVM,提升应用程序的性能和稳定性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值