`

JDK工具学习

阅读更多
[size=large]   起因:在测试服务器RedHat中启动datacenter时,会概率性地出现卡壳现象,而之前的一个月每日更新测试环境并没有碰到此问题,由于没有任何异常信息显示且该问题又是该概率性的发生这下子可把我难住了。想到了应该是最近重构了工程所致,于是叫一位负责重构的师兄过来协助解决,只见同事观察了一下后键入了一些命令那个连上了Jconsole,在Jonsole的监控界面检测到了死锁现象,因此问题也就因此定位... ...
   完事之后师兄打开了%JAVA_HOME%/bin目录,对里面的一些常用的jdk工具进行了简单的介绍并建议我去学学jdk工具的基本原理与使用。
   
1、JDK简介 
    JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。
    常用的JDK有Sun的JDK,IBM的JDK,原BEA的BEA公司的 Jrocket
2、JDK常用工具介绍
    看了一下,bin目录下的jdk工具有四五十个的样子,全部掌握一方面是因为成本太高二则是因为没有太大必要(2/8原则仍然使用),现对常用的一些工具进行学习,其他工具待日后有需要时再去学习。如下是本人根据解释列举的一些自认为比较重要的工具... ...
javac.exeJava编译器,将Java源代码转换成字节码
Java.exeJava解释器,直接从类文件执行Java应用程序字节代码
Javadoc.exe根据Java源码及说明语句生成HTML文档
Jdb.exeJava调试器,可以逐行执行程序,设置断点和检查变量
Javah.exe产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件
Javap.exeJava反汇编器,显示编译类文件中的可访问功能和数据,显示字节代码含
Jar.exe将Java类文件和其他资源文件捆绑成一个一的jar文件
native2ascii用于转换字符或者文件的编码格式
servertools为程序员提供了一个命令行接口,用于注册取消注册,启动,关闭一个服务
JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,主要用于监控
jpsjps查找当前用户的Java进程,注意:不是当前系统中的所有进程
jstackjstack打印所有的Java线程的堆栈跟踪信息
jstat显示一个测量(instrumented)Java HotSpot虚拟机的性能统计信息
jstatd是一个Java远程方法调用 (RMI)服务器应用程序-它监控测量Java HotSpot虚拟机的创建和终止并且提供一个接口来允许远程监控工具依附到运行于本地主机的JVM
jmap打印出某个java进程(使用pid)内存,打印出某个java进程(使用pid)内存

3、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.无认证连接 (下面的设置表示:连接的端口为1234、无需认证就可以被连接)
-Dcom.sun.management.jmxremote.port=1234
-Dcom.sun.management.jmxremote.authenticate=false 
-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

4、 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每三行显示一下标题。 

5、 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文件里。

6、 jps的使用
jps [-q] [-mlvV] [<hostid>]
参数解释:
hostid的定义为:   ip:port
-p只显示pid,不显示class名称,jar文件名和传递给main 方法的参数
-m输出传递给main 方法的参数,在嵌入式jvm上可能是null
-l输出应用程序main class的完整package名或者应用程序的jar文件完整路径名
-v输出传递给JVM的参数

7、 关于对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... ...

参考资料:
http://jiajun.iteye.com/blog/810150
http://jiajun.iteye.com/blog/443196
[/size]
  • 大小: 213.8 KB
分享到:
评论

相关推荐

    jdk删除工具

    在项目开发或者课程学习中,需要用到很多开发工具,其中对于java开发来说JDK是必不可少的。但是不同的jdk有很多不同的版本适用于不同的开发工具和环境配置。在安装jdk的时候回在注册表建立jdk的根目录,在删除jdk后...

    jdk 一键配置环境工具

    如果你想学习Java可以来这个群,首先是五三二,中间是二五九,最后是九五二,里面有大量的学习资料可以下载。 3. 设置CLASSPATH 新建环境变量CLASSPATH,设置值为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools....

    JDK1.8下载 : jdk_8.0.1310.11_64.zip

    JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具. JDK是学好Java的第一步。不管是你要学习java...

    jdk1.8.rar

    jdk1.8 64位,亲测可用.JAVA JDK64位,JDK简而言之就是一款针对java编程的软件工具。JDK是学习java编程的第一步,主要用于移动设备、嵌入设备的应用程序开发。

    JDK(TM)8 64位简而言之就是一款针对java编程的软件工具,是学习java编程的第一步。JDK作为Java语言的软件开发工具包。

    JDK(TM)8 64位简而言之就是一款针对java编程的软件工具,是学习java编程的第一步。JDK作为Java语言的软件开发工具包。

    linux_jdk1.8_rpm

    JDK是 Java 语言的软件开发工具包,JDK(TM)8 64位简而言之就是一款针对java编程的软件工具,是学习java编程的第一步。JDK作为Java语言的软件开发工具包.

    Windows JDK1.8下载 :jdk-8u281-windows-x64.zip

    JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具. JDK是学好Java的第一步。不管是你要学习java...

    JDK1.8 64位

    JDK(TM)8 64位简而言之就是一款针对java编程的软件工具,是学习java编程的第一步。JDK作为Java语言的软件开发工具包。

    jdk1.8和jdk11百度云下载-linux版本

    链接中是jdk1.8和jdk11的linux版本,jdk是从事java开发的程序猿们不可缺少的工具,也是想学习编程的小白们一定要下载的工具包,百度云链接永久有效,请放心下载。

    JDK1.6官方版 解压即用

    另包含jre6,JDK是 Java 语言的软件开发工具包,JDK(TM)6 简而言之就是一款针对java编程的软件工具,是学习java编程的第一步。JDK作为Java语言的软件开发工具包,主要用于移动设备、嵌入设备的应用程序。LDK的全称...

    JDK1.8免安装版本,配置可用

    jdk1.8又称jdk8.0,是目前相对比较稳定的版本,不建议下载最新的jdk版本,因为最新版的jdk不稳定,在Java的学习中可能会出现各种各样的问题。 1.点击官网下载地址:官网链接地址 ———————————————— ...

    java_jdk1.8

    记住Java中所有的接口,框架有些困难,这款Java学习手册可以让用户们通过api及时查找到对应的类,接口,框架等详细信息,使用起来非常方便,帮助用户快速的查找学习Java知识,是Java学习者的必备工具。

    linux_jdk1.8

    JDK是 Java 语言的软件开发工具包,JDK(TM)8 64位简而言之就是一款针对java编程的软件工具,是学习java编程的第一步。JDK作为Java语言的软件开发工具包.

    jdk api 1.8中文帮助文档

    内容概要:jdk1.8 api 中文帮助文档 适合人群:供广大java爱好者使用 能学到什么:方便查找相应内容,提高学习效率。 阅读建议:建议配合相对应的编程工具如idea,或eclipse一起使用更佳。

    JDK1.8_64位.zip

    JDK(TM)8 64位简而言之就是一款针对java编程的软件工具,是学习java编程的第一步。JDK作为Java语言的软件开发工具包。

    jdk1.8.0_102.rar

    JAVA JDK64位,JDK简而言之就是一款针对java编程的软件工具。JDK是学习java编程的第一步,主要用于移动设备、嵌入设备的应用程序开发。

    jdk1.8(java开发环境).zip

    JDK64位,JDK简而言之就是一款针对java编程的软件工具。JDK是学习java编程的第一步,主要用于移动设备、嵌入设备的应用程序开发。太平洋下载中心为您提供jdk下载。

    推荐普通开发者学习使用的6个JDK内建工具Java开发Ja

    推荐普通开发者学习使用的6个JDK内建工具Java开发Java经验技巧共10页.pdf.zip

    JDK1.6版本java

    java 版本的JDK1.6,里面有64位,开发java和学习java必备工具

Global site tag (gtag.js) - Google Analytics