jps位于jdk的bin目录下,其做用是显示当前系统的java进程状况,及其id号。 jps至关于Solaris进程工具ps。不象”pgrep java”或”ps -ef grep java”,jps并不使用应用程序名来查找JVM实例。所以,它查找全部的Java应用程序,包括即便没有使用java执行体的那种(例如,定制的启动 器)。html
jps仅查找当前用户的Java进程,而不是当前系统中的全部进程。java
Jstack是java虚拟机自带的一种堆栈跟踪工具。浏览器
jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的缘由,如线程间死锁、死循环、请求外部资源致使的长时间等待等。app
经过对线程状态的查看,结合源码,通常都能找出hung住线程的缘由。jvm
线程状态工具
jstack的用法:学习
jstack [进程号]
可获得以下相似结果:spa
"main" #1 prio=5 os_prio=31 tid=0x00007fc918809800 nid=0x1c03 waiting on condition [0x0000700007a01000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at com.aheizi.cmd.JpsTest.main(JpsTest.java:11) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
再根据线程状态和具体代码进行分析。命令行
查看堆使用状况:线程
jmap -heap 2357
查看堆内存(histogram)中的对象数量及大小:
jmap -histo 2357
将内存使用的详细状况输出到文件:
jmap -dump:format=b,file=heapDump 2357
输出到文件以后能够经过jhat -port 7000 heapDump在浏览器访问http://localhost:7000/
查看详细信息
jmap -heap
命令查看堆的使用状况,看一下各个堆空间的占用状况。jmap -histo:[live]
查看堆内存中的对象的状况。若是有大量对象在持续被引用,并无被释放掉,那就产生了内存泄露,就要结合代码,把不用的对象释放掉。jmap -dump:format=b,file=<fileName>
命令将堆信息保存到一个文件中,再借助jhat命令查看详细内容jstat [ generalOption | outputOptions vmid [interval[s|ms][count]] ]
参数:
generalOption: 通常使用-gcutil查看GC状况
vmid: 虚拟机进程号,即当前运行的java进程号
interval: 间隔时间,单位为秒或毫秒
count: 打印次数,若是缺省则打印无数次
参数interval和count表明查询间隔和次数,若是省略这两个参数,说明只查询一次。假设须要每250毫秒查询一次进程2357垃圾收集情况,一共查询5次,那命令行以下:
jstat -gc 2357 250 5
参数说明以下:
S0: 新生代中Survivor space 0区已使用空间的百分比
S1: 新生代中Survivor space 1区已使用空间的百分比
E: 新生代已使用空间的百分比
O: 老年代已使用空间的百分比
P: 永久带已使用空间的百分比
YGC: 从应用程序启动到当前,发生Yang GC 的次数
YGCT: 从应用程序启动到当前,Yang GC所用的时间【单位秒】
FGC: 从应用程序启动到当前,发生Full GC的次数
FGCT: 从应用程序启动到当前,Full GC所用的时间
GCT: 从应用程序启动到当前,用于垃圾回收的总时间【单位秒】
jhat前面已经用过了。使用jmap能够生成Java堆的Dump文件。生成dump文件以后就能够用jhat命令,将dump文件转成html的形式,而后经过http访问能够查看堆状况。
获取Java Dump的方法
jstack
:打印线程的栈信息,制做线程Dump。jmap
:打印内存映射,制做堆Dump。步骤:
参考资料: