一. jps:显示当前用户的java进程的pid,进程的启动路径等.,jps的优点是能迅速的找到java相关的进程,缺点是只能查看 当前用户的java进程,查看系统上所有的java进程,还是得用ps -ef | grep java.
常用参数示例:
jps -l 输出应用程序main class的package名或者应用程序的jar文件路径名
D:\>jps -l
6064 test.jar
4804 sun.tools.jps.Jps
jps -v 输出应用程序启动的时候传递给JVM的参数
D:\>jps -v
6064 jar
5336 Jps -Denv.class.path=.;D:\Program files\jdk1.6\lib; -Dapplication.home=D:\Program
files\jdk1.6 -Xms8m
更多参数及其含义:http://docs.oracle.com/javase/6/docs/technotes/tools/share/jps.html
二. jstat.利用了JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控等等.
常用参数示例:
D:\>jstat -gcutil 6064 10000 3 统计gc时,heap信息变化情况
S0 S1 E O P YGC YGCT FGC FGCT GCT
97.93 0.00 26.39 86.29 2.95 26 0.153 4 0.465 0.618
97.93 0.00 55.49 86.29 2.95 26 0.153 4 0.465 0.618
97.93 0.00 84.59 86.29 2.95 26 0.153 4 0.465 0.618
10000 代表多久间隔显示一次,
3 代表显示多少次。
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 — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
更多参数及其含义:
http://docs.oracle.com/javase/6/docs/technotes/tools/share/jstat.html
三.jstack: jstack可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现死锁的状态,jstack是非常有用的.
D:\>jstack -l 5808 > jstack.log 打印出log会包含jvm运行的一些系统线程和用户的线程栈信息.
下面截取部分用户线程的栈信息:
"main" prio=6 tid=0x00549400 nid=0x163c waiting on condition [0x003bf000..0x003bfe30]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at com.ldh.GCTest.main(GCTest.java:12)
Locked ownable synchronizers:
- None
从上面可以看出线程"main"的正在sleep
D:\>jstack -m 5752 > jstack.log 不仅打印java栈信息,还会打印出通过jni调用的接口栈信息
不过需要在linux执行才会有结果
jvm常用线程,参见:http://blog.csdn.net/a43350860/article/details/8134234
更多参数及其含义:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstack.html
四. jmap: 打印出某个java进程(使用pid)内存内的所有‘对象’的情况(如:产生那些对象,及其数量),以及Heap size, Perm size的大小等。
通过在VM参数后加-XX:+HeapDumpOnOutOfMemoryError -
XX:HeapDumpPath=/home/admin/logs/java.hprof ,在内存溢的时候会dump内存快照及指定内存快照的存储文件.也可以通过命令行dump命令执行时的内存快照.
示例如下:
D:\>jmap -dump:format=b,file=D:/dump.log 5752
Dumping heap to D:\dump.log ...
Heap dump file created
D:/dump.log的内容是二进制的,直接打开查看是不行的,可以通过mat进行查看,
mat的下载地址:http://www.eclipse.org/mat/.mat分析的内容非常详细.
五.jconsole:jconsole是jdk自带的一个内存分析工具,它提供了图形界面。可以查看到被监控的jvm的内存信息,线程信息,类加载信息,MBean等信息。在java的安装目录的bin目标下.
六.jvisualvm: 它不但提供了jconsole类似的功能,还提供了jvm内存和cpu实时诊断,还有手动dump出jvm内存情况,手动执行gc.