`
ssxxjjii
  • 浏览: 951046 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jstack, jstat, jmap, jinfo, 教你如何在背后偷窥你的进程^^

 
阅读更多

jps

  • 查看所有的jvm进程包括进程ID,进程启动的路径等等。
  • 我自己也用PS,即:ps -ef | grep java

jstack

  • 观察jvm中当前所有线程的运行情况和线程当前状态。
  • 系统崩溃了?如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。
  • 系统hung住了?jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。

jstat

  • jstat利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对进程的classloadercompilergc情况;
  • 特别的,一个极强的监视内存的工具,可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量,以及加载类的数量。

 

jmap

  • 监视进程运行中的jvm物理内存的占用情况,该进程内存内,所有对象的情况,例如产生了哪些对象,对象数量;
  • 系统崩溃了?jmap 可以从core文件或进程中获得内存的具体匹配情况,包括Heap size, Perm size等等

 

jinfo

  • 观察进程运行环境参数,包括Java System属性和JVM命令行参数
  • 系统崩溃了?jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息

 

备注

  • 如果能熟练运用这些命令,尤其是在linux下,那么完全可以代替jprofile等监控工具。
  • 用命令的好处就是速度快,并且辅助于其他命令,比如grep gawk sed等,可以组装多种符合自己需求的工具。

 

雨伞 怎么用

====================以下为较常用====================

jstat

具体参数如下:

-class:统计class loader行为信息
-compile:统计编译行为信息
-gc:统计jdk gc时heap信息
-gccapacity:统计不同的generations(包括新生区,老年区,permanent区)相应的heap容量情况
-gccause:统计gc的情况,(同-gcutil)和引起gc的事件
-gcnew:统计gc时,新生代的情况
-gcnewcapacity:统计gc时,新生代heap容量
-gcold:统计gc时,老年区的情况
-gcoldcapacity:统计gc时,老年区heap容量
-gcpermcapacity:统计gc时,permanent区heap容量
-gcutil:统计gc时,heap情况
-printcompilation:不知道干什么的,一直没用过。
一般比较常用的几个用法:

$ jstat -class 17970 1000 10 (每隔1秒监控一次,一共做10次)
Loaded  Bytes  Unloaded  Bytes     Time  
  7837  8534.0     1069  1005.7      27.87

Loaded:Number of classes loaded.

Bytes:Number of Kbytes loaded.

Unloaded:Number of classes unloaded.

Bytes:Number of Kbytes unloaded.

Time:Time spent performing class load and unload operations.

 

$ jstat -gc 17970 2000 20 (每隔2秒监控一次,共20次)

$ jstat -gcutil 17970 1000 10 (按百分比显式)
S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT  
15936.0 15936.0 9030.8  0.0   127872.0 61813.5   901120.0   544712.5  65536.0 35227.8  42078 2796.028  417   498.596 3294.624

S0C:Current survivor space 0 capacity (KB).

S1C:Current survivor space 1 capacity (KB).

S0U:Current survivor space 0 utilization (KB).

S1U:Current survivor space 1 utilization (KB).

EC:Current eden space capacity (KB).

EU:Eden space utilization (KB).

OC:Current old space capacity (KB).

OU:Old space utilization (KB).

PC:Current permanent space capacity (KB).

PU:Permanent space utilization (KB).

YGC:Number of young generation GC Events.

YGCT:Young generation garbage collection time.

FGC:Number of full GC events.

FGCT:Full garbage collection time.

GCT:Total garbage collection time.

 

$ jstat -compiler 17970  (显示VM实时编译的数量等信息)
Compiled Failed Invalid   Time   FailedType FailedMethod
    3780      1       0   120.26          2 com/xxx/xxx run

 

 

jstat –gccapacity :可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的 是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。

[root@localhost bin]# jstat -gccapacity 25917

NGCMN  640.0

NGCMX  4992.0

NGC  832.0

S0C  64.0

S1C  64.0

EC  704.0

OGCMN  1408.0

OGCMX  60544.0

OGC  9504.0

OC  9504.0  OC是old内纯的占用量

PGCMN  8192.0  PGCMN显示的是最小perm的内存使用量

PGCMX  65536.0  PGCMX显示的是perm的内存最大使用量

PGC  12800.0  PGC是当前新生成的perm内存占用量

PC  12800.0  PC是但前perm内存占用量

YGC  164

FGC  6

jstat -gcnew pid: new对象的信息

[root@localhost bin]# jstat -gcnew 25917

S0C  S1C  S0U  S1U  TT MTT  DSS  EC  EU  YGC  YGCT

64.0  64.0  47.4  0.0  2  15  32.0  704.0  145.7  168  0.254

jstat -gcnewcapacity pid: new对象的信息及其占用量

[root@localhost bin]# jstat -gcnewcapacity 25917

NGCMN  NGCMX  NGC  S0CMX  S0C   S1CMX  S1C  ECMX  EC  YGC  FGC

640.0  4992.0  832.0 64.0   448.0 448.0  64.0  4096.0  704.0  168  6

jstat -gcold pid: old对象的信息。

[root@localhost bin]# jstat -gcold 25917

PC  PU  OC  OU  YGC  FGC  FGCT  GCT

12800.0  12617.6  9504.0  6561.3  169  6  0.335  0.591

jstat -gcoldcapacity pid:old对象的信息及其占用量。

[root@localhost bin]# jstat -gcoldcapacity 25917

OGCMN  OGCMX  OGC  OC  YGC  FGC  FGCT  GCT

1408.0  60544.0  9504.0  9504.0  169  6  0.335  0.591

jstat -gcpermcapacity pid: perm对象的信息及其占用量。

[root@localhost bin]# jstat -gcpermcapacity 25917

PGCMN  PGCMX  PGC  PC  YGC  FGC  FGCT  GCT

8192.0  65536.0  12800.0  12800.0  169  6  0.335  0.591

jstat -printcompilation pid:当前VM执行的信息。

[root@localhost bin]# jstat -printcompilation -h3  25917 1000 5

每1000毫秒打印一次,一共打印5次,还可以加上-h3每三行显示一下标题。

Compiled  Size  Type Method

788  73  1 java/io/File <init>

788  73  1 java/io/File <init>

788  73  1 java/io/File <init>

Compiled  Size  Type Method

788  73  1 java/io/File <init>

788  73  1 java/io/File <init>

 

jmap

jmap -dump:format=b,file=dump.bin pid 

 

jmap 可以从core文件或进程中获得内存的具体匹配情况,包括Heap size, Perm size等等,目前只有在Solaris和Linux的JDK版本里面才有。

观察运行中的jvm物理内存的占用情况

打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。

可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。如果连用SHELL jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -dump:format=b,file=String 3024可以将3024进程的内存heap输出出来到String文件里。

[root@localhost bin]# jmap -histo  25917

Attaching to process ID 26221, please wait...

Debugger attached successfully.

Client compiler detected.

JVM version is 1.5.0_08-b03

Iterating over heap. This may take a while...

Unknown oop at 0xaa6e42d0

Oop's klass is null

Object Histogram:

Size  Count  Class description

-------------------------------------------------------

3722768 30467  * ConstMethodKlass

1976480 25334  char[]

1907880 46994  * SymbolKlass

1762088 2947  byte[]

1709536 30467  * MethodKlass

1487816 2600  * ConstantPoolKlass

1009576 2600  * InstanceKlassKlass

904880  2199  * ConstantPoolCacheKlass

741432  30893  java.lang.String

653576  4785  int[]

351760  4397  java.lang.reflect.Method

277824  2894  java.lang.Class

248704  3401  short[]

200888  4411  java.lang.Object[]

193656  4045  java.lang.Object[]

179744  5617  java.util.TreeMap$Entry

175688  1800  java.util.HashMap$Entry[]

165288  6887  java.util.HashMap$Entry

104736  3273  java.lang.ref.SoftReference

104136  4339  java.lang.ref.WeakReference

96096  3521  java.lang.String[]

86160  3590  java.util.Hashtable$Entry

85584  3566  java.util.ArrayList

83472  1206  java.util.Hashtable$Entry[]

82944  1728  java.beans.MethodDescriptor

80560  265  * ObjArrayKlassKlass

69120  1728  java.util.HashMap

52464  3055  java.lang.Class[]

43040  1076  java.util.Hashtable

42496  664  org.apache.commons.modeler.AttributeInfo

37880  947  java.util.TreeMap

33896  557  javax.management.modelmbean.ModelMBeanAttributeInfo[]

33152  518  java.beans.PropertyDescriptor

616  11  org.springframework.aop.framework.ProxyFactory

608  19  java.util.PropertyPermission

608  38  org.springframework.beans.MutablePropertyValues

608  38  org.springframework.beans.factory.support.MethodOverrides

608  2  * ArrayKlassKlass

608  38  org.springframework.beans.factory.config.ConstructorArgumentValues

608  4  org.apache.xerces.impl.XMLDTDScannerImpl

576  24  java.util.Stack

576  36  java.util.regex.Pattern$Category

576  24  org.apache.naming.NamingEntry

560  7  java.net.URL[]

552  23  sun.management.MappedMXBeanType$BasicMXBeanType

552  1  java.util.Locale[]

552  22  java.io.ObjectStreamField[]

544  17  java.util.Collections$SynchronizedMap

176  11  java.util.regex.Pattern$Ctype

8  1  sun.reflect.GeneratedMethodAccessor49

8  1  sun.reflect.GeneratedMethodAccessor6

8  1  sun.reflect.GeneratedConstructorAccessor10

Heap traversal took 12.003 seconds.

 

jinfo

可以输出并修改运行时的java 进程的opts。用处比较简单,就是能输出并修改运行时的java进程的运行参数。用法是jinfo -opt  pid 如:查看2788的MaxPerm大小可以用  jinfo -flag MaxPermSize 2788。

 

 

雨伞  课外补充(不常用)

jstatd

http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstatd.html

启动jvm监控服务。它是一个基于rmi的应用,向远程机器提供本机jvm应用程序的信息。默认端口1099。
实例:jstatd -J-Djava.security.policy=my.policy
my.policy文件需要自己建立,内如如下:
grant codebase "file:$JAVA_HOME/lib/tools.jar" {
permission java.security.AllPermission;
};

 

jdb

jdb 用来对core文件和正在运行的Java进程进行实时地调试,里面包含了丰富的命令帮助您进行调试,它的功能和Sun studio里面所带的dbx非常相似,但 jdb是专门用来针对Java应用程序的。

用来对core文件和正在运行的Java进程进行实时地调试,里面包含了丰富的命令帮助您进行调试,它的功能和Sun studio里面所带的dbx非常相似,但 jdb是专门用来针对Java应用程序的。

 

jconsole

jconsole是基于 (JMX)的实时图形化监测工具,这个工具利用了内建到JVM里面的JMX指令来提供实时的性能和资源的监控,包括了Java程序的内存使用,Heap size, 线程的状态,类的分配状态和空间使用等等。

与jstat相当。

jconsole:一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。

用java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强。命令行里打 jconsole,选则进程就可以了

分享到:
评论

相关推荐

    JVM监控工具介绍jstack_jconsole_jinfo_jmap_jdb_jstat

    本文将介绍五种JVM监控工具:jstack、jconsole、jinfo、jmap和jdb。 jstack jstack是一款命令行工具,用于生成Java应用程序的崩溃dump文件的信息。该工具可以attach到正在运行的Java应用程序中,查看当前运行的...

    JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat.doc

    本文将深入探讨六种关键的JVM监控工具——`jstack`, `jconsole`, `jinfo`, `jmap`, `jdb`, `jstat`——它们各自的功能、应用场景及如何帮助开发者和运维人员诊断并解决JVM中的复杂问题。 #### 1. jstack —— Java ...

    【转】Java内存泄露_JVM监控工具介绍jstack_jconsole_jinfo_jmap_jdb_jstat

    本篇将重点介绍几种常用的JVM监控工具,包括jstack、jconsole、jinfo、jmap以及jdb和jstat。 首先,`jstack`是一个用于打印Java线程堆栈跟踪的工具。当应用出现死锁或者线程阻塞时,jstack可以帮助我们查看各个线程...

    visualVM_131

    它囊括的命令行工具包括jstat, JConsole, jstack, jmap 和 jinfo,这些工具与JDK的标准版本是一致的。 可以使用VisualVM生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和CPU分析,同时它还支持在...

    java性能调优工具命令大全.zip

    jvm性能调优工具命令大全.zip jps jstat jmap jhat jstack jinfo jps JVM Process Status Tool GChisto jvisualvm ...

    jdk命令行工具.doc

    jvm命令行工具,java性能优化,jdk命令工具, jcmd命令、jps命令、jmap命令、jstack命令、jinfo命令、jstat命令

    《JVM从入门到入魔》笔记.pdf

    3:JVM内存调优:JVM参数【标准参数、-X参数、-XX参数等】+常用命令【jps、jinfo、jstat、jstack、jmap】+常用工具【jconsole、jvisualvm、Arthas、MAT】+性能优化及总结+高并发场景分析+JVM性能优化指南。

    Visual_131_32656 (1).exe

    isualVM是一种集成了多个JDK命令行工具的...它囊括的命令行工具包括jstat, JConsole, jstack, jmap 和 jinfo,这些工具与JDK的标准版本是一致的。 可以使用VisualVM生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器

    Tomcat教程-JVM相关工具.docx

    在Java开发和运维中,了解和掌握JVM(Java虚拟机)的相关工具是至关重要的。这些工具可以帮助我们更好地管理和优化应用程序的性能。本教程将详细解释Tomcat服务器中与JVM相关的几个关键工具,包括它们的功能、使用...

    JVM监控工具介绍.docx

    例如,如果需要快速定位内存泄漏,可以使用`jmap -histo` 或者结合`jstat -gc` 和`jmap -heap`。如果关心线程状态,`jstack` 是首选。对于整体性能的可视化监控,`jconsole` 是个不错的选择。熟练掌握这些工具的使用...

    JAVA JVM内存监控工具总结

    它包含的工具如jps、jstat、jmap、jinfo、jstack和JConsole,都是JDK的标准组成部分,帮助开发者深入理解JVM的内存状态。 1. **jps (Java Virtual Machine Process Status Tool)** 类似于Unix系统中的`ps`命令,...

    JVM命令行监测工具详解

    为了监控和调试JVM的运行状态,Oracle提供了多个命令行工具,包括jps、jstack、jstat、jmap和jcmd。这些工具可以帮助开发者了解和解决性能问题,优化应用程序。 一、jps (Java Process Status) jps是查看当前系统中...

    VisualVM-入门指南.docx

    VisualVM 能够提供强大的分析能力,囊括多个 JDK 命令行工具,如 jstat, JConsole, jstack, jmap 和 jinfo 等,帮助开发者快速、方便地查看多个 Java 应用程序的相关信息。 什么是 Visual VM? VisualVM 是一个...

    jvm内存监控工具使用

    本文将深入探讨 VisualVM 及其集成的一系列命令行工具,包括 jps、jstat、jmap、jinfo、jstack 和 JConsole,帮助读者掌握 JVM 内存监控的核心技巧。 #### VisualVM:JVM 监控的全能工具 VisualVM 是一款功能强大...

    10.JVM常见命令1

    在本文中,我们将介绍 10 个常见的 JVM 命令,包括 jps、jstat、jinfo、jmap 和 jstack 等。 jps 命令 jps 命令是 JVM 进程状态工具,用于显示指定系统内所有的 HotSpot 虚拟机的进程状态。它可以列出当前运行在...

    JDK自带调试工具doc

    本篇将详细介绍JDK自带的几个主要调试工具,包括`jmap`、`jstack`、`jconsole`,以及相关的文档资源。 1. `jmap`:这是一个用于诊断堆内存状况的工具。通过`jmap`,我们可以获取到堆内存的详细映射,包括对象分配...

    JVM性能调优监控工具1

    本文将详细介绍几个常用的JVM性能监控工具及其功能,包括Jinfo、Jstat、Jmap和Jstack。 1. **Jinfo**: Jinfo是一款用于查看和修改Java进程配置参数的命令行工具。它可以帮助开发者了解正在运行的Java应用程序的...

    Troubleshooting Guide for Java

    jstack可以获取Java进程的线程堆栈轨迹,这对于分析死锁和长时间运行的线程等问题非常有用。 #### 九、jstat工具 jstat是一个命令行工具,用于显示JVM的统计信息,包括GC活动、堆内存使用等。 #### 十、visualgc...

    基于Spring Boot框架的JVM性能调优与内存管理.zip

    提供多种JVM监控工具的使用示例,如jps、jstat、jmap、jhat、jstack、jinfo和jcmd,帮助开发者实时监控JVM的运行状态。 3. 内存管理与垃圾收集 演示如何通过调整JVM参数(如XX:PretenureSizeThreshold)来影响...

    java-虚拟机 操作系统监控工具-源码

    支持远程执行JDK自带工具命令,包含但不限于jps、jstat、jstack、jinfo、jmap、jcmd等 提供客户端交互工具,支持跨进程attach和远程连接功能 支持三种服务模式(可同时开启多个服务): jvmm服务:独有RPC协议,需...

Global site tag (gtag.js) - Google Analytics