`
desert3
  • 浏览: 2159473 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

jps jstat ps jstack jmap jinfo

    博客分类:
  • Java
阅读更多
Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。

jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。

执行:cd $JAVA_HOME/bin中执行jstat,注意jstat后一定要跟参数。

语法结构:
Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

参数解释:
Options — 选项,我们一般使用 -gcutil 查看gc情况
vmid    — VM的进程号,即当前运行的java进程号
interval– 间隔时间,单位为秒或者毫秒
count   — 打印次数,如果缺省则打印无数次
stat -printcompilation pid:当前VM执行的信息。

-gcutil参数
S0  — Heap上的 Survivor space 0 区已使用空间的百分比
S1  — Heap上的 Survivor space 1 区已使用空间的百分比
E   — Heap上的 Eden space 区已使用空间的百分比
O   — Heap上的 Old space 区已使用空间的百分比
P   — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

jstat使用过程如下:
sudo jps用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。   

1,使用top命令查看java的pid,发现有2个java进程,不确定哪个对应的是web应用的进程号
webserver@WS12:~$ top
top - 11:34:00 up 112 days, 10:48,  2 users,  load average: 0.77, 0.36, 0.26
Tasks: 247 total,   1 running, 246 sleeping,   0 stopped,   0 zombie
Cpu(s): 15.8%us,  1.5%sy,  0.0%ni, 82.5%id,  0.0%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:  12321892k total,  2440448k used,  9881444k free,   515004k buffers
Swap: 31249400k total,      112k used, 31249288k free,   995320k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
16183 root      20   0 1564m 175m  12m S  126  1.5   0:03.82 java
15581 root      20   0  305m  54m 9988 S    1  0.5   0:05.13 java
15689 www-data  20   0 55084  28m  956 S    1  0.2   0:01.51 nginx
15688 www-data  20   0 55332  28m  956 S    0  0.2   0:04.63 nginx
16182 webserver       20   0 19356 1528 1064 R    0  0.0   0:00.02 top
    1 root      20   0 23704 1932 1296 S    0  0.0   0:02.24 init
    2 root      20   0     0    0    0 S    0  0.0   0:00.01 kthreadd
    3 root      RT   0     0    0    0 S    0  0.0   0:00.02 migration/0


2,使用ps -ef | grep java,可以看到java应用程序对应的进程号ps -ef | grep tomcat 看到的东西更加少,好找些
webserver@WS11:/usr/local/resin$ ps -ef | grep java
root     17778     1  0 13:10 pts/0    00:00:16 /usr/lib/jvm/java-6-sun-1.6.0.20/bin/java -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl -Djava.awt.headless=true -Dresin.home=/usr/local/resin -Dresin.root=/usr/local/resin/ -Xrs -Xss256k -Xmx32m -Dcom.sun.management.jmxremote -d64 com.caucho.boot.WatchdogManager -resin-home /usr/local/resin -conf /usr/local/resin/conf/resin-8080.conf start
root     18293 17778  8 13:56 pts/0    00:07:14 /usr/lib/jvm/java-6-sun-1.6.0.20/bin/java -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djava.system.class.loader=com.caucho.loader.SystemClassLoader -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl -Djava.awt.headless=true -Dresin.home=/usr/local/resin [color=red]-Xmx4096m -Xms4096m -Xmn1024m -Xss1m -Xdebug -Dcom.sun.management.jmxremote -XX:PermSize=512M -XX:MaxPermSize=1024M[/color] -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl -Djava.awt.headless=true -Dresin.home=/usr/local/resin -Dresin.root=/usr/local/resin/ -Dcom.sun.management.jmxremote -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl -Djav .awt.headless=true -Dresin.home=/usr/local/resin -Dresin.root=/usr/local/resin/ -Dcom.sun.management.jmxremote com.caucho.server.resin.Resin --root-directory /usr/local/resin -conf /usr/local/resin/conf/resin-8080.conf -socketwait 29006 -resin-home /usr/local/resin start
webserver      18867 14532  0 15:21 pts/0    00:00:00 grep --color=auto java


3,执行sudo jstat -gcutil 进程号 5s(每隔5秒查看jvm垃圾回收情况)
webserver@WS12:~$ sudo jstat -gcutil 16183 5s
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
  5.02   0.00  49.75  30.01  65.49     14    0.421     1    0.121    0.542
  5.02   0.00  88.80  30.01  65.62     14    0.421     1    0.121    0.542
  0.00  96.66  32.79  30.44  65.81     15    0.428     1    0.121    0.549
  0.00  96.66  72.60  30.44  65.93     15    0.428     1    0.121    0.549
  1.20   0.00  38.76  30.61  66.01     16    0.439     1    0.121    0.560
  1.20   0.00  63.20  30.61  66.08     16    0.439     1    0.121    0.560
  0.00   1.28  30.78  30.71  66.45     17    0.446     1    0.121    0.567
  0.00   1.28  67.98  30.71  66.57     17    0.446     1    0.121    0.567
  1.65   0.00   8.04  30.81  66.67     18    0.452     1    0.121    0.573
  1.65   0.00  47.42  30.81  66.82     18    0.452     1    0.121    0.573
  1.65   0.00  90.38  30.81  66.91     18    0.452     1    0.121    0.573
  0.00   1.41  37.02  30.94  66.97     19    0.458     1    0.121    0.578
  0.00   1.41  75.75  30.94  66.98     19    0.458     1    0.121    0.578
  1.19   0.00  18.04  31.04  67.13     20    0.465     1    0.121    0.585


其他可用option:

可以通过命令:jstat -options option,看到支持的option参数
-class (类加载器)
-compiler (JIT)
-gc (GC堆状态)
-gccapacity (各区大小)
-gccause (最近一次GC统计和原因)
-gcnew (新区统计)
-gcnewcapacity (新区大小)
-gcold (老区统计)
-gcoldcapacity (老区大小)
-gcpermcapacity (永久区大小)
-gcutil (GC统计汇总)
-printcompilation (HotSpot编译统计)

jstat -gcutil pid: 统计gc信息统计。
jstat -gccapacity pid: 可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小

-gccapacity参数:
NGCMN:年轻代(young)中初始化(最小)的大小 (字节)
NGCMX:年轻代(young)的最大容量 (字节)
NGC:年轻代(young)中当前的容量 (字节)
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
OGCMN:old代中初始化(最小)的大小 (字节)
OGCMX:old代的最大容量 (字节)
OGC:old代当前新生成的容量 (字节)
OC:Old代的容量 (字节)
PGCMN:perm代中初始化(最小)的大小 (字节)
PGCMX:perm代的最大容量 (字节)
PGC:perm代当前新生成的容量 (字节)
PC:Perm(持久代)的容量 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数

jps -mlVv localhost
jps [ options ] [ hostid ]
其中,options可以用:
-q (安静)
-m (输出传递给main方法的参数)
-l (显示完整路径)
-v (显示传递给JVM的命令行参数)
-V (显示通过flag文件传递给JVM的参数)
-J (和其他Java工具类似用于传递参数给命令本身要调用的java进程);
hostid是主机id,默认localhost。

Jstack 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 连接到core文件)
    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 3713;
jstack -F 3713
jstack -l -m  /opt/jdk1.6.0/bin/java core.659
可以观察到jvm中当前所有线程的运行情况和线程当前状态
Attaching to process ID 3713, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 20.4-b02
Deadlock Detection:

No deadlocks found.

Thread 12172: (state = BLOCKED)
 - sun.misc.Unsafe.park(boolean, long) @bci=0 (Interpreted frame)


jmap:显示java进程内存使用的相关信息
    jmap pid #打印内存使用的摘要信息
    jmap –heap pid #java heap信息
    jmap -histo:live pid #统计对象count ,live表示在使用
    jmap -histo pid >mem.txt #打印比较简单的各个有多少个对象占了多少内存的信息,一般重定向的文件
    jmap -dump:format=b,file=mem.dat pid #将内存使用的详细情况输出到mem.dat 文件

jvm配置打印GC相关信息
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC
对应的日志会输出到catalina的日志中去

jinfo -flag HeapDumpBeforeFullGC  29167  #查看HeapDumpBeforeFullGC 
jinfo: 查看和修改JVM参数
Usage:
    jinfo <option> <pid>
       (to connect to a running process)

where <option> is one of:
    -flag <name>         to print the value of the named VM flag
    -flag [+|-]<name>    to enable or disable the named VM flag
    -flag <name>=<value> to set the named VM flag to the given value
    -h | -help           to print this help message
分享到:
评论

相关推荐

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

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

    JVM监控工具介绍jstack_jconsole_jinfo_jmap_jdb_jstat

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

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

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

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

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

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

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

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

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

    JAVA JVM内存监控工具总结

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

    jvm内存监控工具使用

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

    Java线上故障排查方案.pdf

    3. 终端命令监控(Terminal Command Monitoring):通过执行特定的命令,例如使用jps、jmap、jstack、jinfo、jstat等JDK自带工具,可以获取Java虚拟机(JVM)的运行状态信息。 4. 内存分析工具(Memory Analysis ...

    jdk命令行工具.doc

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

    JVM命令行监测工具详解

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

    JVM监控工具介绍.docx

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

    10.JVM常见命令1

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

    leetcode回朔与贪心的题目-interview:面试官的编程

    jstat 2.5.3 jinfo 2.5.4 jmap 2.5.5 jhat 2.5.6 jstack 2.5.7 jConsole 3. 多线程 3.1 线程的通信与状态转化 3.2 线程池及其实现 3.3 JUC 3.4 AQS 与 CAS 3.5 性能调优 4. 数据结构 4.1 Hash 表 4.2 二叉树 4.3 堆 ...

    Java面试要点(适用于2年以上经验,1年亦可)

    8. 虚拟机性能监控与故障处理工具:jps, jstack, jmap、jstat, jconsole, jinfo, jhat, javap, btrace、TProfiler 基础知识 1. 读取源代码:String、Integer、Long、Enum、BigDecimal、ThreadLocal、ClassLoader &...

    JDK自带调试工具doc

    以上工具的使用通常需要与相应的帮助文档配合,如`java.chm`可能包含了JDK的综合帮助文档,而`jstat - Java Virtual Machine Statistics Monitoring Tool.htm`、`jps - Java Virtual Machine Process Status Tool....

    Java代码命令大全.7z

    `jps`、`jstat`、`jinfo`、`jmap`和`jstack`等命令是Java性能监控和诊断工具。例如,`jps`用于查看正在运行的Java进程,`jstat`用于收集JVM的统计信息,而`jstack`则用于打印线程堆栈跟踪,帮助开发者定位死锁和线程...

    基于JVM性能监控命令介绍

    基于JVM性能监控命令介绍了六种常用的JVM性能监控命令,包括jps、jstat、jinfo、jmap、jhat和jstack命令。这些命令可以帮助开发者和运维人员实时监控虚拟机的性能,诊断和解决问题,提高系统的稳定性和可靠性。

    VisualVM简介

    VisualVM 是一款强大的 Java 应用程序监控和诊断工具,它集成了一系列的 JDK 命令行工具,如 jps、jstat、jinfo、jmap、jstack 和 jhat,提供了一个统一的图形用户界面,方便开发者深入了解 Java 应用程序的运行状况...

    Java线上故障排查方案(2).pdf

    JVM命令如jps、jmap、jstack、jinfo和jstat等能够提供JVM内部状态和性能数据,帮助工程师进行深入分析。 GC分析,即垃圾收集分析,也是一大关键点。通过分析GC日志,工程师可以了解垃圾回收的行为和影响,对于性能...

Global site tag (gtag.js) - Google Analytics