`
desert3
  • 浏览: 2142059 次
  • 性别: 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 ...

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

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

    JAVA JVM内存监控工具总结

    它囊括的命令行工具包括jps,jstat,jmap,jinfo,jstack,JConsole,这些工具与JDK的标准版本是一致的。 jinfo:可以输出并修改运行时的java进程的opts。 jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地...

    JVM命令行监测工具详解

    1.jps 2.jstack 3.jstat 4.jmap 5.jinfo 6.jcmd 7.jhat

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

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

    JAVA-JVM参数讲解

    jvm命令参数配置调优讲解,jps,jinfo,jstat,jmap,jstack

    jdk命令行工具.doc

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

    虚拟机监控工具详请.rar

    虚拟机的监控工具,1、命令行工具(1)jps,jstat,jinfo,(4)jmap(5)jhat(6)jstack

    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 堆 ...

    Troubleshooting Guide for Java

    • The jinfo Utility • The jmap Utility • The jps Utility • The jrunscript Utility • The jstack Utility • The jstat Utility • The visualgc Tool • Control+Break Handler • Native Operating ...

    jvm工具、参数调优&调试技巧

    1. jps:虚拟机进程状况工具 2 2. jstat:虚拟机统计信息监视工具 2 3. jinfo:java配置信息工具 3 4. jhat:虚拟机堆转储快照分析工具 3 5. jmap:内存映像工具 3 6. jstack:java堆栈跟踪工具 3 7. VisualVM:多...

    java查看sun包源码-monitor:java生产环境内存调优(包括jvm参数类型,JVM的参数类型jinfo&jps(参数和进程查看)j

    jps(参数和进程查看):alien: jstat(类加载、垃圾收集、JIT 编译):alien: jmap+MAT(内存溢出):alien: jstack(线程、死循环、死锁):alien: JVisualVM(本地和远程可视化监控:alien: 使用 BTrace进行拦截调试:alien: ...

    JVM命令行性能监控工具

    jstat JVM statistics monitoring tool,用于收集 HotSpot 虚拟机各方面的运行数据 jinfo 显示虚拟机配置信息 jmap 生产虚拟机的内存快照 dump 文件 jhat 分析 dump 文件 jstack 显示虚拟机的线程快照 2...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    / 76 4.1 概述 / 76 4.2 JDK的命令行工具 / 76 4.2.1 jps:虚拟机进程状况工具 / 79 4.2.2 jstat:虚拟机统计信息监视工具 / 80 4.2.3 jinfo:Java配置信息工具 / 82 4.2.4 jmap:Java内存映像工具 / 82 4.2.5...

    深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程

    第51节虚拟机工具-jstat详解00:09:20分钟 | 第52节虚拟机工具-jinfo详解00:05:03分钟 | 第53节虚拟机工具-jmap详解00:08:48分钟 | 第54节虚拟机工具-jhat详解00:08:10分钟 | 第55节虚拟机工具-jstack详解00:10:...

    深入理解JVM内存结构及运行原理全套视频加资料.txt

     第51讲 虚拟机工具-jstat详解 00:09:20  第52讲 虚拟机工具-jinfo详解 00:05:03  第53讲 虚拟机工具-jmap详解 00:08:48  第54讲 虚拟机工具-jhat详解 00:08:10  第55讲 虚拟机工具-jstack详解 00:10:19 ...

    Java虚拟机

    4.2.2 jstat:虚拟机统计信息监视工具 4.2.3 jinfo:Java配置信息工具 4.2.4 jmap:Java内存映像工具 4.2.5 jhat:虚拟机堆转储快照分析工具 4.2.6 jstack:Java堆栈跟踪工具 4.2.7 HSDIS:JIT生成代码反汇编 ...

    Windouws 64 位Tomcat7.0.40 + 64位jdk1.7.0u21 绿色版.part1

    │ │ jstack.exe │ │ jstat.exe │ │ jstatd.exe │ │ jvisualvm.exe │ │ keytool.exe │ │ kinit.exe │ │ klist.exe │ │ ktab.exe │ │ msvcr100.dll │ │ native2ascii.exe │ │ orbd.exe │ │ ...

Global site tag (gtag.js) - Google Analytics