`

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
分享到:
评论

相关推荐

    Java JDK 7学习笔记 PDF

    Java JDK 7是Java开发工具包的一个重要版本,它的全称是Java Development Kit,是用于构建和运行Java应用程序的关键组件。这个PDF学习笔记是开发者深入理解JDK 7特性和功能的重要参考资料。以下是对Java JDK 7的一些...

    JDK版本切换工具

    在IT行业中,JDK(Java Development Kit)是Java开发者必备的工具,用于编写、编译、测试和运行Java应用...通过学习和熟练掌握这类工具的使用,开发人员可以更好地应对各种项目需求,同时保持开发环境的整洁和有序。

    jdk1.5 jdk1.6 反编译 工具

    标题中的“jdk1.5 jdk1.6 反编译 工具”指的是用于对Java字节码进行反编译的软件,这类工具能够将Java的.class文件转换回可读的.java源代码形式,这对于理解和学习已有的Java类库或者进行逆向工程非常有帮助。...

    Java+JDK6学习笔记

    JDK(Java Development Kit)则是Java编程的基础,它包含了Java运行环境、编译器和其他开发工具。本篇将围绕“Java+JDK6学习笔记”展开,探讨在JDK6环境下Java编程的核心知识点。 1. **JDK6概述**:JDK6是Oracle...

    JDK1.6学习笔记书籍+PPT

    《JDK1.6学习笔记书籍+PPT》是一份宝贵的学习资源,涵盖了Java开发工具包(JDK)1.6版本的相关知识,由知名教育家林信良教授精心编撰。这份资料不仅包含了深入的理论讲解,还通过PPT的形式提供了直观的教学辅助,...

    java jdk帮助工具

    这个压缩包文件"java jdk"很可能包含了JDK的完整安装包或者帮助文档,对于学习和理解Java语言至关重要。下面将详细讨论Java JDK中的关键组成部分和它们在软件开发过程中的作用。 1. **JRE(Java Runtime ...

    Java JDK 6学习笔记.zip

    Java JDK 6是Java开发工具集的一个重要版本,它为开发者提供了编写、编译、调试以及运行Java应用程序所需的所有工具。这个压缩包“Java JDK 6学习笔记.zip”显然是一个包含有关Java JDK 6深入学习资源的集合,可能是...

    JDK一些查询工具

    **JDK查询工具详解** JDK,全称Java Development Kit,是Java开发人员必备的工具集,它包含了大量的工具和库,使得Java编程变得更加高效和便捷。本文将深入探讨JDK中的一些重要查询工具,帮助开发者更好地理解和...

    jdk17工具包!!!!!

    安装“jdk-17_windows-x64_bin.exe”后,需要设置环境变量JAVA_HOME指向JDK的安装目录,并将`bin`子目录添加到系统PATH变量中,以便在命令行中全局使用JDK工具。 5. **开发与调试**: 使用JDK 17,开发者可以利用...

    jdk学习笔记

    **Java JDK学习笔记** 在Java开发领域,JDK(Java Development Kit)是不可或缺的基础工具,它包含了Java编译器、Java运行环境以及一系列用于开发和调试Java应用的工具。林信良是一位知名的Java专家,他的JDK学习...

    Java JDK1.6学习笔记

    Java JDK1.6学习笔记是一份详实的资料,涵盖了Java开发工具集(JDK)1.6版本的核心概念和技术。这份笔记对于Java初学者以及有一定经验的开发者来说都是一份宝贵的参考资料,它可能包含了从基础语法到高级特性的讲解...

    JDK环境变量设置小工具

    本文将介绍一个名为“JDK环境变量设置小工具”的实用程序,它简化了通常繁琐的环境变量配置过程。 这个工具是针对初学者和专业开发者的便捷解决方案,尤其对那些不熟悉Windows系统环境变量配置的用户而言。它提供了...

    jdk1.7 工具

    9. **jvisualvm**:一个全功能的性能分析和监视工具,包含了很多其他JDK工具的功能。 **3. JDK 1.7的安装与配置** 在Windows、Linux和Mac OS等操作系统上安装JDK 1.7后,需要设置`JAVA_HOME`环境变量指向JDK的安装...

    Javajdk5学习笔记

    以下是对"Javajdk5学习笔记"中可能包含的知识点的详细解析: 1. **自动装箱与拆箱**:JDK 5引入了自动装箱和拆箱功能,使得基本类型和它们对应的包装类之间可以无缝转换,提高了代码的简洁性。例如,`Integer i = ...

    良葛格JDK5.0学习笔记

    《良葛格JDK5.0学习笔记》是一份详细记录了Java开发工具包(JDK)5.0版本核心特性和技术要点的学习资料。这份笔记涵盖了Java编程语言的重要更新和改进,对于深入理解JDK5.0及其对Java开发的影响至关重要。 1. **...

    JDK17,Java高版本JDK工具包

    作为Java SE(标准版)的一部分,JDK17为开发者提供了强大的工具集,支持开发、编译、调试和运行Java应用程序。这个版本在保持向后兼容性的基础上,引入了一些新特性、增强功能以及对性能的优化,使得Java在Spring...

    Java开发工具jdk安装包

    此外,`jdb`是JDK自带的调试工具,通过它,开发者可以对程序进行单步调试、设置断点、查看变量值等操作,这对于学习和修复代码错误非常有帮助。 对于Java开发,IDE(集成开发环境)如Eclipse、IntelliJ IDEA等虽然...

    jdk 一键配置环境工具

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

    java jdk 5学习笔记

    Java JDK 5是Java开发工具集的一个重要版本,它的发布标志着Java编程语言的重要进步。这个版本引入了许多新特性,极大地提升了开发效率和代码质量。以下是对这个学习笔记中可能涵盖的知识点的详细解释: 1. **自动...

Global site tag (gtag.js) - Google Analytics