jps、jstack、jstat、jmap、jinfo等小工具的使用以及故障排查

更新时间:2023-06-14 04:23:21 阅读: 评论:0

jps、jstack、jstat、jmap、jinfo等⼩⼯具的使⽤以及故障排查
jps、jstack、jstat、jmap等⼯具使⽤以及故障排查
1. 前⾔
缴费通知JDK全称Java Development Kit,除了提供核⼼类库,还提供了⼀系列的Java开发⼯具,例如jps、jstack、jstat、jmap等。
我们可以利⽤这些⼯具获取Java进程的pid、线程快照、内存快照、运⾏状态、内存使⽤情况等。我们合理这些⼩⼯具可以进⾏故障排查,例如Java进程CPU占⽤飙升、Java进程内存溢出OOM、Java进程发⽣死锁等。
2. jps命令
2.1 简介
jps命令全称Java Virtual Machine Process Status Tool,这个⼯具可以很⽅便地查看当前服务器中的Java进程。
当然了该命令是基于⽤户的,使⽤该命令⽆法查看到其他⽤户启动的Java进程。
送男朋友情人节礼物什么好
2.2 命令
jps命令格式
jps [options]
查看⼀下jps命令的帮助信息
[root@localhost ~]$ jps -help
usage: jps [-help]
jps [-q][-mlvV][<hostid>]
Definitions:
<hostid>:      <hostname>[:<port>]
常⽤的参数
-
q 不输出类名、Jar名和传⼊main⽅法的参数
-m 输出传⼊main⽅法的参数
-l 输出main类或Jar的全限名
-v 输出传⼊JVM的参数
常⽤参数 -mlv,查看传⼊main⽅法的参数,查看main类或Jar的全限名,查看传⼊JVM的参数。红岩好句摘抄
2.3 ⽰例
[root@localhost ~]$ jps -mlv
at.MycatStartup -DMYCAT_HOME=/home/admin/mycat-1.6.7.4 -Xms4G -Xmx4G -Xmn3G -XX:MaxPermSize=64M -XX:+AggressiveOpts -XX: MaxDirectMemorySize=4G
ls.jps.Jps -mlv -Denv.class.path=.:/usr/java/jdk1.8.0_131/lib/dt.jar:/usr/java/jdk1.8.0_131/lib/tools.jar:/usr/java/jdk1.8.0_131/jre/lib -Dapplicatio n.home=/usr/java/jdk1.8.0_131 -Xms8m
第⼀列的数据为当前Java进程的pid。第⼆列为Java进程的main类或Jar的全限名、启动命令和main⽅法参数
3. jstack命令
3.1 简介
jstack命令可以dump当前运⾏JVM的线程快照。线程快照是当前Java虚拟机内每⼀条线程正在执⾏的⽅法堆栈的集合,⽣成线程快照的主要⽬的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。
线程出现停顿的时候通过jstack来查看各个线程的调⽤堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。
3.2 命令
jstack命令格式
jstack [options] < pid >
Java进程的pid,可以由上⼀步的jps命令获得
先查看⼀下jstack命令的帮助信息
[root@localhost ~]$ 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][rver_id@]<remote rver IP or hostname>
(to connect to a remote debug rver)
Options:
-F  to force a thread dump. U 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
附加的参数
-F:当正常输出请求不被响应时,强制输出线程栈堆。当Java进程负载较⾼的时候,可以加上该参数,强制dump线程快照
-l:除线程栈堆外,显⽰关于锁的附加信息
-m:如果调⽤本地⽅法的话,可以显⽰c/c++的栈堆
3.3 ⽰例
[root@localhost ~]$ jstack 21074
2020-12-10 10:41:35
Full thread dump Java HotSpot(TM)64-Bit Server VM (25.131-b11 mixed mode):
"pool-2-thread-1"#33 prio=5 os_prio=0 tid=0x00007f39ec778800 nid=0x5277 waiting on condition [0x00007f397e9cb000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for<0x00000006c00493a0>(a urrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at urrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at urrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
at urrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
忙忙碌碌的反义词at urrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at Task(ThreadPoolExecutor.java:1067)
at urrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
at urrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
......
"Service Thread"#8 daemon prio=9 os_prio=0 tid=0x00007f39ec0cb000 nid=0x525f runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
.
.....
"VM Thread"os_prio=0tid=0x00007f39ec078000 nid=0x5258 runnable
"GC task thread#0 (ParallelGC)"os_prio=0tid=0x00007f39ec01f000 nid=0x5254 runnable
"VM Periodic Task Thread"os_prio=0tid=0x00007f39ec0d6000 nid=0x5260 waiting on condition
JNI global references: 259
打印内容的主体是线程相关的信息,线程主要分为JVM线程和⽤户线程。
其中JVM线程主要是后台GC线程和核⼼的main线程(例如GC task thread#0 (ParallelGC)),JVM线程在Java虚拟机启动时就会启动。
⽤户线程由⽤户⾃⼰创建(例如pool-2-thread-1)。
JVM内部线程包括下⾯⼏种:
JIT编译线程: 如 C1 CompilerThread0、C2 CompilerThread0
GC线程: 如GC Thread0、G1 Young RemSet Sampling
其它内部线程: 如VM Periodic Task Thread、VM Thread, Service Thread
线程的相关信息主要有线程名称、⽅法调⽤栈、线程的运⾏状态、线程的优先级、操作系统线程的优先级、线程16进制id等
4. jstat命令
4.1 简介
如何判断JVM是否存在内存泄露问题。如何判断JVM垃圾回收是否正常?⼀般的top指令基本上满⾜不了这样的需求,因为它主要监控的是总体的系统资源,很难定位到java应⽤程序。
jstat是JDK⾃带的⼀个轻量级⼩⼯具。全称Java Virtual Machine statistics monitoring tool,它位于Java的bin⽬录下。jstat⼯具特别强⼤,有众多的可选项,详细查看堆内各个部分的使⽤量,以及加载类的数量。使⽤时,需加上查看进程的进程id和所选参数。
4.2 命令
jstat命令格式
jstat -< option > [-t] [-h] < vmid > [< interval > [< count >]]
option 选项详解
class 显⽰classLoader 相关信息
compiler 显⽰ JIT 编译相关信息
gc 显⽰与 GC 相关堆信息
gccapacity 显⽰各个代的容量以及使⽤情况
gccau 显⽰垃圾收集相关信息,最后⼀次垃圾回收的原因蹊跷的读音
gcnew 显⽰新⽣代信息
gcnewcapacity 显⽰新⽣代使⽤情况
gcold 显⽰⽼年代和永久的信息
gcoldcapacity 显⽰⽼年代的⼤⼩
gcpermcapactiy 显⽰永久代的⼤⼩
gcutil 显⽰垃圾收集信息
printcompilation 输出 JIT 编译的⽅法信息
-t 参数详解
参数可以在输出信息前⾯加上⼀个 Timestamp 列,显⽰程序运⾏的时间
-h 参数详解
参数可以周期数据输出时,输出多少⾏后,跟着输出⼀个表头信息
interval 参数详解
指定输出统计数据的周期,单位毫秒
count 参数详解
⼀共输出多少次数据
4.3 ⽰例
1. -class命令,每秒统⼀次classloader信息,⼀共输出 2 次
[root@localhost ~]$ jstat -class 2107410002
Loaded  Bytes  Unloaded  Bytes    Time
31986281.900.00.99
31986281.900.00.99
装载了3198个类,⼤⼩6281.9个字节,卸载了0个类,⼤⼩0个字节,装载和卸载耗费时间总时间0.99秒
2. -compiler命令,显⽰JVM实时编译的数量
[root@localhost ~]$ jstat -compiler 21074
Compiled Failed Invalid  Time  FailedType FailedMethod
39202010.551 com/mysql/jdbc/AbandonedConnectionCleanupThread run马尔代夫国旗
编译任务执⾏了3920个,失败了2个,失效了0个,编译耗费10.55秒,最后⼀个编译失败任务的类型为1 ,最后⼀个编译失败任务所在的⽅法
3. -gc命令,显⽰GC堆相关信息
[root@localhost ~]$ jstat -gc 21074
S0C    S1C    S0U    S1U  EC        EU      OC        OU      MC      MU    CCSC  CCSU    YGC  YGCT    FGC    FGCT    GCT
12800.012288.0288.00.03120640.0360814.71048576.017050.020608.020235.52432.02280.5260.12900.0000.129
字段解释:
S0C 年轻代中第⼀个S区容量(千字节)小鸡儿童画
S1C 年轻代中第⼆个S区容量(千字节)
灭火的基本方法有
S0U 年轻代中第⼀个S区已使⽤的空间(千字节)
S1U 年轻代中第⼆个S区已使⽤的空间(千字节)
EC 年轻代中E区容量(千字节)
EU 年轻代中E区使⽤空间(千字节)
OC old代的容量(千字节)
OU old代已使⽤空间(千字节)
MC metaspace元空间容量(千字节)
MU metaspace元空间已使⽤容量(千字节)
CCSC:当前压缩类空间的容量 (千字节)
CCSU:当前压缩类空间⽬前已使⽤空间 (千字节)
YGC 应⽤程序启动到采样时年轻代中GC次数
YGCT 应⽤程序启动到采样时年轻代中GC所⽤时间
FGC 应⽤程序启动到采样⽼年代GC次数(秒)
FGCT 应⽤程序启动到采样⽼年代GC所⽤时间(秒)
GCT 应⽤程序从启动到采样GC所⽤总时间(秒)
4. -gccapacity命令,显⽰对象使⽤和占⽤⼤⼩
[root@localhost ~]$ jstat -gccapacity 21074
NGCMN    NGCMX    NGC    S0C  S1C      EC      OGCMN      OGCMX      OGC        OC      MCMN    MCMX      MC    CCSMN    CCSMX    CCSC    YGC    FGC
3145728.03145728.03145728.012800.012288.03120640.01048576.01048576.01048576.01048576.00.01067008.020608.00.01048576 .02432.0260
字段解释:

本文发布于:2023-06-14 04:23:21,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/949861.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:线程   进程   信息   输出   命令   参数   查看
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图