【JVM】常⽤的命令⾏性能监控和故障处理⼯具

在Java应用程序的开发和维护过程中,性能监控和故障处理是至关重要的环节。为了更好地进行这些任务,Java生态系统提供了多种命令行工具。以下是一些常用的性能监控和故障处理工具的详细介绍:

1. jps (Java Virtual Machine Process Status Tool)

jps 用于列出当前所有运行中的Java进程及其相关信息。

使用示例:
jps -l

输出示例:

12345 com.example.MyApp
67890 sun.tools.jps.Jps

2. jstat (Java Virtual Machine Statistics Monitoring Tool)

jstat 用于监控JVM内存、垃圾收集、类加载等各种运行时信息。

常用选项:
  • -gc:显示垃圾收集相关统计信息。
  • -class:显示类加载器相关信息。
  • -compiler:显示JIT编译器相关信息。
使用示例:
jstat -gc 12345 1000 10

输出示例:

 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC      MU     CCSC   CCSU     YGC    YGCT   FGC    FGCT     GCT   
 1024.0 1024.0  0.0    256.0  8192.0  4096.0  10240.0     8192.0  2048.0  1024.0  256.0   128.0   10    0.123  5      0.456    0.579

3. jmap (Java Memory Map Tool)

jmap 用于生成堆转储(heap dump)、查看堆内存详情及分析内存使用情况。

常用选项:
  • -heap:打印堆内存摘要信息。
  • -histo:打印堆中对象的统计信息。
  • -dump:生成堆转储文件。
使用示例:
jmap -heap 12345

输出示例:

Attaching to process ID 12345, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 1.8.0_201-b09

using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC

Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 209715200 (200.0MB)
   NewSize                  = 13107200 (12.5MB)
   MaxNewSize               = 13107200 (12.5MB)
   OldSize                  = 16777216 (16.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   PermSize                 = 21757952 (20.75MB)
   MaxPermSize              = 21757952 (20.75MB)

4. jstack (Java Stack Trace Tool)

jstack 用于打印Java进程的线程栈跟踪信息,帮助诊断线程问题如死锁、线程阻塞等。

使用示例:
jstack 12345

输出示例:

2019-08-13 17:00:47
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.201-b09 mixed mode):

"Attach Listener" #12 daemon prio=9 os_prio=31 tid=0x00007fe99c003800 nid=0x1503 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Service Thread" #10 daemon prio=9 os_prio=31 tid=0x00007fe99b80e000 nid=0x1303 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Common-Cleaner" #9 daemon prio=8 os_prio=31 tid=0x00007fe99b00e800 nid=0x1103 in Object.wait() [0x000070000d2e2000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x0000000780c04fa0> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144)
    - locked <0x0000000780c04fa0> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:122)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:126)
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:170)

...

5. jinfo (Java Configuration Info Tool)

jinfo 用于显示或调整Java进程的配置信息,如系统属性和JVM参数。

使用示例:
jinfo -flags 12345

输出示例:

-XX:CICompilerCount=4 -XX:InitialHeapSize=134217728 -XX:MaxHeapSize=2147483648 -XX:MaxNewSize=715653120 -XX:NewSize=22282240 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC 

6. jcmd (Java Diagnostic Command)

jcmd 是一个多功能的命令行工具,能够执行各种诊断命令,如生成堆转储、线程转储、GC统计等。

常用命令:
  • GC.run:触发垃圾收集。
  • Thread.print:打印线程栈跟踪信息。
  • VM.system_properties:打印系统属性。
使用示例:
jcmd 12345 GC.run
jcmd 12345 Thread.print
jcmd 12345 VM.system_properties

输出示例:

# 例如:jcmd 12345 VM.system_properties
12345:
{
    "java.runtime.name" : "Java(TM) SE Runtime Environment",
    "java.vm.version" : "25.201-b09",
    "java.vm.vendor" : "Oracle Corporation",
    ...
}

7. javap (Java Class File Disassembler)

javap 用于反汇编Java类文件,帮助分析字节码。

使用示例:
javap -c MyClass

输出示例:

Compiled from "MyClass.java"
public class MyClass {
  public MyClass();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #3                  // String Hello, World!
       5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: return
}

总结

这些命令行工具在Java应用程序的性能监控和故障处理方面非常有用。通过合理使用这些工具,可以有效地监控应用程序的运行状态,诊断和解决各种性能问题和故障。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值