在java/bin目录中除了java.exe和javac.exe之外,还有很多exe文件, 这些执行文件大多数是java\lib\tools.jar类库的一层薄包装而已,它们主要的功能代码是在tools类库中实现的。
Sun JDK 监控和故障处理工具
(1)jps:JVM process Status Tool,显示指定系统内所有的HotSpot虚拟机进程
(2)jstat:JVM Statistics(统计) Monitoring(检测) Tool,用于收集HotSpot虚拟机各方面的运行数据
(3)jinfo:Configuration Info for Java,显示虚拟机配置信息
(4)jmap:Memory Map for Java,生成虚拟机的内存转储快照(heapdump文件)
(5)jhat:JVM Heap Dump(仓库) Browser,用于分析headdump文件,它会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果
(6)jstack:Stack Trace(跟踪) for Java,显示虚拟机的线程快照
1、 jps:虚拟机进程状况工具
它的作用是显示当前系统的java进程情况,及其id号。我们可以通过它来查看我们到底启动了几个java进程(因为每一个java程序都会独占一个java虚拟机),和他们的进程号(为下面几个程序做准备),并可通过opt来查看这些进程的详细启动参数。
使用方法:在当前命令行下打 jps(需要JAVA_HOME,没有的话,到改程序的目录下打) 。
C:\Users\skx>jps
7508 Jps //这个是变化的
4564 org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar
C:\Users\skx>jps -q
1132
4564
C:\Users\skx>jps -m
8116 Jps -m
4564 org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar -os win32 ..... ......
C:\Users\skx>jps -l
4564 D:\ZmyExe\eclipse-jee-luna-R-win32\eclipse\\plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar
3940 sun.tools.jps.Jps
C:\Users\skx>jps -v
2100 Jps -Dapplication.home=D:\ZmyExe\java -Xms8m
4564 org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar -Dosgi.requiredJavaVersion=1.6 -Xms40m -Xmx512m -XX:MaxPermSize=256m
2、jstat:虚拟机统计信息监视工具
用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或远程(需要远程主机提供RMI支持,Sun提供了jstatd工具可以方便地建立远程RMI服务器)虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。
先查出jvm的线程jps 在使用jstat;
格式如:C:\Users\skx>jstat -class 4564
Loaded Bytes Unloaded Bytes Time
17788 21748.5 101 72.7 10.91
jstat命令格式为:
jstat option vmid [interval count]
使用gcutil:
C:\Users\skx>jstat -gcutil 4564
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.00 1.68 50.48 99.87 24 0.272 47 11.143 11.415
-
参数解释:
-
Options — 选项,上面列出的选项
-
vmid — VM的进程号,即当前运行的java进程号
-
interval– 间隔时间,单位为毫秒
-
count — 打印次数,如果缺省则打印无数次
-
S0 — Heap上的 Survivor space 0 区已使用空间的百分比
-
S1 — Heap上的 Survivor space 1 区已使用空间的百分比
-
E — Heap上的 Eden space 区已使用空间的百分比 (新生代)
-
O — Heap上的 Old space 区已使用空间的百分比
-
P — Perm space 区已使用空间的百分比 permanent
-
YGC — 从应用程序启动到采样时发生 Young GC 的次数
-
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
-
FGC — 从应用程序启动到采样时发生 Full GC 的次数
-
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
-
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
对于命令格式中的vmid与LVMID需要特别说明一下:如果是本地虚拟机进程,VMID和LVMID是一致的,如果是远程虚拟机进程,那VMID的格式应该是:
[protoco:][//]lvmid[@hostname[:port]/servername]
参数interval和count代表查询间隔和次数,如果省略这两个参数,说明只查询一次,假设需要每秒查询一次进程号4564垃圾收集的情况,一个查询10次,那命令应该是
C:\Users\skx>jstat -gc 4564 1000 10
3、 jinfo:Java配置信息工具
jinfo命令格式:
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 -flags to print VM flags -sysprops to print Java system properties <no option> to print both of the above -h | -help to print this help message4、 jmap:Java内存映像工具
jmap命令格式:
jmap [ option ] vmid
5、jhat:虚拟机堆转储快照分析工具
jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法的堆栈的机会,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源。
jstack命令格式:
jstack [ option ] vmid
option选项的合法值与具体含义为:
(1)-F : 当正常输出的请求不被响应时,强制输出线程堆栈
(2)-l:除堆栈外,显示关于锁的附加信息
(3)-m:如果调用到本地方法的话,可以显示C/C++的堆栈
JDK的可视化工具
1、JConsole:Java监视与管理控制台
2、VisualVM:多合一故障处理工具(需要下载安装)