JDK工具学习

原由:在测试服务器RedHat中启动datacenter时,会几率性地出现卡壳现象,而以前的一个月每日更新测试环境并无碰到此问题,因为没有任何异常信息显示且该问题又是该几率性的发生这下子可把我难住了。想到了应该是最近重构了工程所致,因而叫一位负责重构的师兄过来协助解决,只见同事观察了一下后键入了一些命令那个连上了Jconsole,在Jonsole的监控界面检测到了死锁现象,所以问题也就所以定位... ... 
   完事以后师兄打开了%JAVA_HOME%/bin目录,对里面的一些经常使用的jdk工具进行了简单的介绍并建议我去学学jdk工具的基本原理与使用。 
    
一、JDK简介  
    JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。 
    经常使用的JDK有Sun的JDK,IBM的JDK,原BEA的BEA公司的 Jrocket 
二、JDK经常使用工具介绍 
    看了一下,bin目录下的jdk工具备四五十个的样子,所有掌握一方面是由于成本过高二则是由于没有太大必要(2/8原则仍然使用),现对经常使用的一些工具进行学习,其余工具待往后有须要时再去学习。以下是本人根据解释列举的一些自认为比较重要的工具... ... html

javac.exe Java编译器,将Java源代码转换成字节码
Java.exe Java解释器,直接从类文件执行Java应用程序字节代码
Javadoc.exe 根据Java源码及说明语句生成HTML文档
Jdb.exe Java调试器,能够逐行执行程序,设置断点和检查变量
Javah.exe 产生能够调用Java过程的C过程,或创建能被Java程序调用的C过程的头文件
Javap.exe Java反汇编器,显示编译类文件中的可访问功能和数据,显示字节代码含
Jar.exe 将Java类文件和其余资源文件捆绑成一个一的jar文件
native2ascii 用于转换字符或者文件的编码格式
servertools 为程序员提供了一个命令行接口,用于注册取消注册,启动,关闭一个服务
JConsole 是一个基于JMX的GUI工具,用于链接正在运行的JVM,主要用于监控
jps jps查找当前用户的Java进程,注意:不是当前系统中的全部进程
jstack jstack打印全部的Java线程的堆栈跟踪信息
jstat 显示一个测量(instrumented)Java HotSpot虚拟机的性能统计信息
jstatd 是一个Java远程方法调用 (RMI)服务器应用程序-它监控测量Java HotSpot虚拟机的建立和终止而且提供一个接口来容许远程监控工具依附到运行于本地主机的JVM
jmap 打印出某个java进程(使用pid)内存,打印出某个java进程(使用pid)内存


三、JConsole学习 
    从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,能够从命令行或在 GUI shell 中运行。您能够轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码。 
A、 启动JConsole 
A.1:若是是从命令行启动,使 JDK 在 PATH 上,运行 jconsole 便可。 
A.2:若是从 GUI shell 启动,找到 JDK 安装路径,打开 bin 文件夹,双击 jconsole 

B、 如何设置JAVA程序运行时能够被JConsolse链接分析 
B.1:本地程序(相对于开启JConsole的计算机),无需设置任何参数就能够被本地开启的JConsole链接(Java SE 6开始无需设置,以前仍是须要设置运行时参数 -Dcom.sun.management.jmxremote ) 
B.2: 2.无认证链接 (下面的设置表示:链接的端口为123四、无需认证就能够被链接) java

[java]  view plain copy
  1. -Dcom.sun.management.jmxremote.port=1234  
  2. -Dcom.sun.management.jmxremote.authenticate=false   
  3. -Dcom.sun.management.jmxremote.ssl=false  


B.3:若是考虑到安全因素,须要认证,须要安全链接,也是能够搞定的。参考: 
  http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdenv 

C、 JConsole如何链接远程机器的JAVA程序 
C.1: 被远程链接的主机能够采起以下作法 
.命令行: 
带上B.2中的参数运行Java程序 
.Eclipse中: 
 
C.2: 访问远程链接时 
.命令行: 
jconsole.exe 192.168.0.181:1234 
.使用JConsole图形界面进行访问 
恭喜你,此时就进入了JConsole的分析界面! 
   关于页面信息都很直观没什么好说的,值得一提的是对着图点击右键能够保存数据到CSV文件,之后可使用其余工具来分析这些数据。 

D、 JConsole使用实例 
   就有限的工做经验来讲的话,JConsole比较多的用来分析应用服务器的性能,如Tomcat/Apusic/JBoss等。 
监控服务器的配置方法: 
编辑run.bat(win下)或者run.sh(Linux下),找到以下内容 
set JAVA_OPTS=%JAVA_OPTS%,在其后加上B.2中所列的参数便可。 
  推荐使用升级版 JConsole 即 jvisualvm 

四、 Jstat使用 
jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。如下详细介绍各个参数的意义。  
    jstat -class pid:显示加载class的数量,及所占空间等信息。  
    jstat -compiler pid:显示VM实时编译的数量等信息。  
    jstat -gc pid:能够显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。  
    jstat -gccapacity:能够显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其余的能够根据这个类推, OC是old内纯的占用量。  
    jstat -gcnew pid:new对象的信息。  
    jstat -gcnewcapacity pid:new对象的信息及其占用量。  
    jstat -gcold pid:old对象的信息。  
    jstat -gcoldcapacity pid:old对象的信息及其占用量。  
    jstat -gcpermcapacity pid: perm对象的信息及其占用量。  
    jstat -util pid:统计gc信息统计。  
    jstat -printcompilation pid:当前VM执行的信息。  
    除了以上一个参数外,还能够同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还能够加上-h3每三行显示一下标题。  

五、 jmap使用 
jmap 是一个能够输出全部内存中对象的工具,甚至能够将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。若是连用 SHELL jmap -histo pid>a.log能够将其保存到文本中去(windows下也可使用),在一段时间后,使用文本对比工具,能够对比出GC回收了哪些对象。jmap -dump:format=b,file=f1 3024能够将3024进程的内存heap输出出来到f1文件里。 

六、 jps的使用 
jps [-q] [-mlvV] [<hostid>] 
参数解释: 程序员

hostid的定义为:   ip:port
-p 只显示pid,不显示class名称,jar文件名和传递给main 方法的参数
-m 输出传递给main 方法的参数,在嵌入式jvm上多是null
-l 输出应用程序main class的完整package名或者应用程序的jar文件完整路径名
-v 输出传递给JVM的参数


七、 关于对java性能的分析而言,JPofiler是个不错的选择。 
它把CPU、执行绪和内存的剖析组合在一个强大的应用中。JProfiler可提供许多IDE整合和应用服务器整合用途。 
   JProfiler直觉式的GUI让你能够找到效能瓶颈、抓出内存漏失(memory leaks)、并解决执行绪的问题。它让你得以对heap walker做资源回收器的root analysis,能够轻易找出内存漏失;heap快照(snapshot)模式让未被参照(reference)的对象、稍微被参照的对象、或在终结(finalization)队列的对象都会被移除;整合精灵以便剖析浏览器的Java外挂功能。 
以下是一个关于JProfiler使用入门的比较好的参考资料: 
http://wenku.baidu.com/view/35909d5f312b3169a451a442.html 
待往后须要时再去学习,那样学习效果会更好,标记Ing... ...  shell

相关文章
相关标签/搜索