文档章节

JDK工具学习

J
 Java编程思想
发布于 2014/08/22 17:54
字数 2317
阅读 23
收藏 0

起因:在测试服务器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.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)内存


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、无需认证就可以被连接)

[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 

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://blog.csdn.net/zhu_ai_xin_520/article/details/6187813

J
粉丝 27
博文 166
码字总数 10234
作品 0
广州
程序员
私信 提问
JDK动态代理源码学习

继上一篇博客设计模式之代理模式学习之后http://blog.csdn.net/u014427391/article/details/75115928,本博客介绍JDK动态代理的实现原理,学习一下JDK动态代理的源码。 Proxy类。该类即为动态...

Javahih
2017/07/21
0
0
java学习从入门到精通(原创)--精华

作者:robbin 网址:http://www.fankai.com/ Java Learning Path (一)、工具篇 一、 JDK (Java Development Kit) JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),...

精华之王
2009/04/11
635
0
从0到1学习网络安全 【Web安全入门篇-Brupsuite 爆破】

一、简介 Brup Suite 是用于攻击web 应用程序的集成平台,包含了许多工具。Burp Suite为这些工具设计了许多接口,以加快攻击应用程序的过程。所有工具都共享一个请求,并能处理对应的HTTP 消...

ihacker
2018/05/22
0
0
0基础学Java Java开发学习需要什么工具?

JDK是Java开发工具包 (Java Development Kit) 的缩写。它是一种用于构建在Java平台上发布的应用程序、applet 和组件的开发环境。其中包括了Java编译器、JVM、大量的Java工具以及Java基础API...

老男孩Linux培训
2018/07/12
0
0
1.4.1 下载和安装java 7的jdk

JDK的全称是 java SE Development Kit,即 java标准版开发包,是Sun提供的一套用于开发java 应用程序的开发包,它提供了编译、运行 java程序所需的各种工具和资源,包括java编译器,java运行...

Gooiem
2015/08/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

由test_decoding学习如何编写PostgreSQL逻辑解码插件

PostgreSQL提供很多接口,允许用户定制自己需要的功能,很多时候文档并不能让我们完全理解和把握它们的使用。如果需要开发一个自己的功能,该如何下手?下边是我作为一名代码搬运工的工作方式...

有理想的猪
49分钟前
4
0
IT兄弟连 Java语法教程 流程控制语句 循环结构语句3

while循环 Java中的另外一种循环是while循环。while循环的语法格式如下: while(条件表达式){ 循环体; } 其中条件表达式定义了控制循环的条件,可以使任何有效的boolean表达式,条件为真时,...

老码农的一亩三分地
今天
2
0
OSChina 周四乱弹 —— 你们倒是救驾啊,别笑啦

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @RISYOII :#今日歌曲推荐# 一荤一素 太年轻的人 他总是不满足 固执地不愿停下 远行的脚步 望着高高的天 走了长长的路 忘了回头看 她有没有哭...

小小编辑
今天
2.1K
15
idea下springboot 项目在static目录下添加文件不生效

idea下springboot 项目在static目录下添加文件不生效 问题描述 是这样子的,我的项目目录结构如下: 我在static目录下,创建了index.html和aaaa.jpg这两个文件。然后,启动服务访问 http://l...

wotrd
昨天
7
0
k8s1.14 一、环境

1. 4台虚拟机 (CentOS Linux release 7.2.1511 (Core) ) 192.168.130.211 master 192.168.130.212 node1 192.168.130.213 node2 192.168.130.214 node3 2. 设置服务器hostname 2.1 设置本机......

ThomasCheng
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部