jvm监控工具jps,jstat,jstack,jmap的使用方法

简介:

在平常运维分析jvm的时候通常用到的工具的jps,jstat,jstack,jmap用于分析tomcat遇到的各种问题

tomcat常见的问题有:

  OOM,线程死锁(lock dead),锁争用(lock contention),Java消耗过多的CPU

  可以通过以上工具进行分析

生产常用分析方法快速入口:

  #jps        --> 查看运行的java进程

  #jstat -gc 进程pid --> 查看进程新生代老年代的内存使用情况,年轻代老年代垃圾收集次数及时间

  #jstat -gccause 进程pid --> 查看进程垃圾收集原因

  #jmap -heap 进程pid --> 查看进程堆内存具体使用情况

  #jstack -l 进程pid --> 查看线程信息,用于分析线程争取,死锁造成tomcat假死的情况

jps:java虚拟机进程查看工具

  jps [options] [hostid]

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

   -l:显示main的完整类名

   -v:显示为jvm虚拟机指定的参数

  常用的组合:

   #jps -m -l

   #jps -m -l -v  

1
2
3
[gcct1@localhost bin]$ jps -m -l - v
5966 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config. file = /mnt/tomcat/conf/logging .properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed. dirs = /mnt/tomcat/endorsed  -Dcatalina.base= /mnt/tomcat  -Dcatalina.home= /mnt/tomcat  -Djava.io.tmpdir= /mnt/tomcat/temp
7006 sun.tools.jps.Jps -m -l - v  -Denv.class.path=.: /usr/java/jdk1 .7.0_79 /lib/dt .jar: /usr/java/jdk1 .7.0_79 /lib/tools .jar -Dapplication.home= /usr/java/jdk1 .7.0_79 -Xms8m

jstat:jvm虚拟机运行时内存使用及垃圾回收情况监控

  jstat -<option> pid:(<options>为必须选项)

   -options:查看有哪些选项可以使用

   -gc:使用此选项时,后面加java的进程号;例jstat -gc 27564 [1s](也可跟上多少时间显示一次)

     S0C,S1C:表示第一个和第二个生存区的容量
     S0U,S1U:表示第一个和第二个生存区的已使用的容量
     EC,EU:表示eden区域的容量和已用量
     OC,OU:表示老年代区的容量和已用量
     PC,PU:表示持久代的内存容量和已用量
     YGC,YGT:表示新生代的GC发生的次数和耗时
     FGCT,FGCT:表示老年代Full GC发生的次数和耗时
     GCT:表示总的GC耗时

   -gccause:
    LGCC:上次GC的原因
    GCC:当前GC的原因

1
2
3
4
5
6
[gcct1@localhost bin]$ jstat -gc 5966
  S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   
40960.0 36864.0  0.0   36850.3 253952.0 161159.5  109056.0   74574.4   53248.0 45852.6     19    1.672   3      2.193    3.865
[gcct1@localhost bin]$ jstat -gccause 5966
   S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC                 
   0.00  99.96  63.76  68.38  86.11     19    1.672     3    2.193    3.865 Allocation Failure   No GC

jmap:查看堆内存使用情况,包括使用的GC算法,堆配置参数和各代堆内存使用情况,跟jstat有点类似

  -heap:详细的输出堆内存的使用情况
  -histo[:live]:详细显示出整个java堆内存中的对象数目,大小统计结果;
  -histo:显示所有的对象信息
  -histo:live:仅显示存活的对象信息
  -h:获取帮助信息
   例:jmap -heap 5966   --> 查看堆内存的详细使用情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[gcct1@localhost bin]$ jmap -heap 5966
Attaching to process ID 5966, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.79-b02
 
using thread- local  object allocation.
Parallel GC with 2 thread(s)
 
Heap Configuration:
    MinHeapFreeRatio = 0
    MaxHeapFreeRatio = 100
    MaxHeapSize      = 1019215872 (972.0MB)
    NewSize          = 1310720 (1.25MB)
    MaxNewSize       = 17592186044415 MB
    OldSize          = 5439488 (5.1875MB)
    NewRatio         = 2
    SurvivorRatio    = 8
    PermSize         = 21757952 (20.75MB)
    MaxPermSize      = 85983232 (82.0MB)
    G1HeapRegionSize = 0 (0.0MB)
......

jstack:查看某个java进程内的线程堆栈信息

  jstack [options] pid
  -l:long listings(会输出完整的锁信息);jstack -l 进程号
  -m:混合模式,即会输出java堆栈及C/C++堆栈信息

  通过jstack可以查看线程争用,线程死锁等信息

本文转自激情燃烧的岁月博客51CTO博客,原文链接http://blog.51cto.com/liuzhengwei521/1925177如需转载请自行联系原作者


weilovepan520

相关文章
|
监控 Java Unix
6个Java 工具,轻松分析定位 JVM 问题 !
本文介绍了如何使用 JDK 自带工具查看和分析 JVM 的运行情况。通过编写一段测试代码(启动 10 个死循环线程,分配大量内存),结合常用工具如 `jps`、`jinfo`、`jstat`、`jstack`、`jvisualvm` 和 `jcmd` 等,详细展示了 JVM 参数配置、内存使用、线程状态及 GC 情况的监控方法。同时指出了一些常见问题,例如参数设置错误导致的内存异常,并通过实例说明了如何排查和解决。最后附上了官方文档链接,方便进一步学习。
3313 4
|
Arthas Prometheus 监控
监控堆外使用JVM工具
监控堆外使用JVM工具
621 7
|
Arthas 监控 数据可视化
JVM进阶调优系列(7)JVM调优监控必备命令、工具集合|实用干货
本文介绍了JVM调优监控命令及其应用,包括JDK自带工具如jps、jinfo、jstat、jstack、jmap、jhat等,以及第三方工具如Arthas、GCeasy、MAT、GCViewer等。通过这些工具,可以有效监控和优化JVM性能,解决内存泄漏、线程死锁等问题,提高系统稳定性。文章还提供了详细的命令示例和应用场景,帮助读者更好地理解和使用这些工具。
|
存储 监控 算法
JVM调优深度剖析:内存模型、垃圾收集、工具与实战
【10月更文挑战第9天】在Java开发领域,Java虚拟机(JVM)的性能调优是构建高性能、高并发系统不可或缺的一部分。作为一名资深架构师,深入理解JVM的内存模型、垃圾收集机制、调优工具及其实现原理,对于提升系统的整体性能和稳定性至关重要。本文将深入探讨这些内容,并提供针对单机几十万并发系统的JVM调优策略和Java代码示例。
583 2
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
499 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
Arthas 存储 算法
深入理解JVM,包含字节码文件,内存结构,垃圾回收,类的声明周期,类加载器
JVM全称是Java Virtual Machine-Java虚拟机JVM作用:本质上是一个运行在计算机上的程序,职责是运行Java字节码文件,编译为机器码交由计算机运行类的生命周期概述:类的生命周期描述了一个类加载,使用,卸载的整个过类的生命周期阶段:类的声明周期主要分为五个阶段:加载->连接->初始化->使用->卸载,其中连接中分为三个小阶段验证->准备->解析类加载器的定义:JVM提供类加载器给Java程序去获取类和接口字节码数据类加载器的作用:类加载器接受字节码文件。
1093 55
|
Arthas 监控 Java
Arthas memory(查看 JVM 内存信息)
Arthas memory(查看 JVM 内存信息)
1085 6
|
10月前
|
存储 缓存 Java
我们来说一说 JVM 的内存模型
我是小假 期待与你的下一次相遇 ~
612 5
|
10月前
|
存储 缓存 算法
深入理解JVM《JVM内存区域详解 - 世界的基石》
Java代码从编译到执行需经javac编译为.class字节码,再由JVM加载运行。JVM内存分为线程私有(程序计数器、虚拟机栈、本地方法栈)和线程共享(堆、方法区)区域,其中堆是GC主战场,方法区在JDK 8+演变为使用本地内存的元空间,直接内存则用于提升NIO性能,但可能引发OOM。
|
缓存 Prometheus 监控
Elasticsearch集群JVM调优设置合适的堆内存大小
Elasticsearch集群JVM调优设置合适的堆内存大小
2849 1