日期:2014-05-16  浏览次数:20447 次

jps jstat ps jstack jmap jinfo
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.LogManagerImp