【JAVA】JAVA性能监控

本文介绍了JAVA性能监控中的关键JVM命令,包括jps、jstack、jmap和jstat的使用。jps用于查看JVM进程状态,jstack用于分析线程堆栈信息,检测CPU占用和死锁,jmap提供堆内存和类加载器信息,而jstat则用于垃圾回收统计,详细展示了各项指标的含义。

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

1.JVM命令

首先我们查看JVM自带的命令:

12345
appletviewerjavahjjsjvisualvmschemagen
extcheckjavap(重要)jmap(重要)keytoolserialver
idljjavapackagerjmcnative2asciiservertool
jarjcmdjps(重要)orbdtnameserv
jarsignerjconsole(重要)jrunscriptpack200unpack200
java(重要)jdbjsadebugdpolicytoolwsgen
javac(重要)jdepsjstack(重要)rmicwsimport
javadocjhat(重要)jstat(重要)rmidxjc
javafxpackagerjinfojstatdrmiregistry

目前很多工具比如arthas已经可以替代主要命令。

2.jps

jps主要用来输出JVM中运行的进程状态信息

jps [options] [hostid]

如果不指定hostid就默认为当前主机或服务器,一般也无法连接远程的机器。
主要用法:

-m 输出传入main方法的参数

比如:

[work(caibin)@bjdhj-63-189 ~]$ jps -m
1372 Bootstrap start
258878 Jps -m

3.jstack

jstack是jdk自带的线程堆栈分析工具,使用该命令可以查看或导出 Java 应用程序中线程堆栈信息。

[work(caibin)@bjdhj-63-189 ~]$ jstack -help
Usage:
    jstack [-l] <pid>
        (to connect to running process)
    jstack -F [-m] [-l] <pid>
        (to connect to a hung process)
    jstack [-m] [-l] <executable> <core>
        (to connect to a core file)
    jstack [-m] [-l] [server_id@]<remote server IP or hostname>
        (to connect to a remote debug server)

Options:
    -F  to force a thread dump. Use when jstack <pid> does not respond (process is hung)
    -m  to print both java and native frames (mixed mode)
    -l  long listing. Prints additional information about locks
    -h or -help to print this help message

我们一般可以将它输出到文件中查看

jstack -pid > caibin.txt
⑴检测线程占用CPU

jps定位到进程之后,用

top -Hp 进程号

来查看具体的线程:

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND          
  1693 work      20   0 20.2g 3.2g  13m S  6.3  5.2 653:51.15 java              
  1694 work      20   0 20.2g 3.2g  13m S  6.3  5.2 653:51.25 java              
  1696 work      20   0 20.2g 3.2g  13m S  6.3  5.2 651:46.34 java              
  1763 work      20   0 20.2g 3.2g  13m S  6.3  5.2 634:59.72 java              
  1695 work      20   0 20.2g 3.2g  13m S  5.7  5.2 651:53.10 java    

我们把1694转成16进制:

[work(caibin)@bjdhj-63-189 ~]$ printf "%x\n" 1694
69e

然后我们jstack进程号输出到文件,从文件找到这个线程就可以了。

⑵jstack检测死锁
jstack -l 进程号

死锁一般很少出现。

4.jmap

jmap主要观察堆内对象示例的统计信息、ClassLoader 的信息以及 finalizer 队列。

jmap [option] <pid>

jmap有的时候回报这个错误:

sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 24.80-b11. Target VM is 25.144-b01

这是因为我们环境配的和项目用的不一样导致的。

5.jstat

⑴垃圾回收统计
// 每250ms统计一次,统计4次
jstat -gc 1372 250 4 

输出:

 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   
 0.0   1024.0  0.0   1024.0 3605504.0 1142784.0 2117632.0   44891.4     �      �      2504  171.488   0      0.000  171.488
 0.0   1024.0  0.0   1024.0 3605504.0 1144832.0 2117632.0   44891.4     �      �      2504  171.488   0      0.000  171.488
 0.0   1024.0  0.0   1024.0 3605504.0 1147904.0 2117632.0   44891.4     �      �      2504  171.488   0      0.000  171.488
 0.0   1024.0  0.0   1024.0 3605504.0 1152000.0 2117632.0   44891.4     �      �      2504  171.488   0      0.000  171.488
  • S0C:年轻代中第一个survivor(幸存区)的容量 (kb)
  • S1C:年轻代中第二个survivor(幸存区)的容量 (kb)
  • S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (kb)
  • S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (kb)
  • EC:年轻代中Eden(伊甸园)的容量 (kb)
  • EU:年轻代中Eden(伊甸园)目前已使用空间 (kb)
  • OC:Old代的容量 (kb)
  • OU:Old代目前已使用空间 (kb)
  • PC:Perm(持久代)的容量 (kb)
  • PU:Perm(持久代)目前已使用空间 (kb)
  • YGC:从应用程序启动到采样时年轻代中gc次数
  • YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
  • FGC:从应用程序启动到采样时old代(全gc)gc次数
  • FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
  • GCT:从应用程序启动到采样时gc用的总时间(s)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值