现在的位置: 首页 > 综合 > 正文

java jdk tools

2014年01月30日 ⁄ 综合 ⁄ 共 5598字 ⁄ 字号 评论关闭

jstack --
如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native
stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到
当时运行的java程序的java stack和native stack的信息,
如果现在运行的java程序呈现hung的状态,jstack是非常有用的。目前只有在Solaris和Linux的JDK版本里面才有。
 jconsole – jconsole是基于Java Management Extensions
(JMX)的实时图形化监测工具,这个工具利用了内建到JVM里面的JMX指令来提供实时的性能和资源的监控,包括了Java程序的内存使用,Heap
size, 线程的状态,类的分配状态和空间使用等等。

 jinfo – jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息,目前只有在Solaris和Linux的JDK版本里面才有。

 jmap – jmap 可以从core文件或进程中获得内存的具体匹配情况,包括Heap size, Perm size等等,目前只有在Solaris和Linux的JDK版本里面才有。

 jdb – jdb 用来对core文件和正在运行的Java进程进行实时地调试,里面包含了丰富的命令帮助您进行调试,它的功能和Sun studio里面所带的dbx非常相似,但 jdb是专门用来针对Java应用程序的。

 jstat – jstat利用了JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控等等。

 jps – jps是用来查看JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等。

 另外,还有些其他附带的工具在这里没有列出,比如Heap Analysis Tool, kill -3 方法等等,这些在JDK5.0之前就有,同样也是非常有用的性能调优工具,大家可以参照相应的文档资料来学习,在文章后面也会推荐一些相应的文档给大家作为参考。

 好,说了这么多,让我们来看看JDK5.0自带的这些工具在现实工作能给我们带来什么帮助,下面是我和ISV一起共同工作的实际例子,在这里把它们简单阐述出来,希望对大家有所帮助。

jconsole和jstack使用实例:
 在做过的项目中,曾经有几个是使用jstack和jconsole来解决问题的。在下面的例子中,由于部分代码涉及到公司名字,我使用了xxx来代替。

 1. 其中的一个是Web2.0的客户,由于目前Sun Microsystem公司推出的Niagara服务器系列非常适合网络方面的多线程应用,并且已经在业界非常出名,所以他们决定使用T2000服务器来测试一下如果应用到他们自己的应用是否能够获得出众的性能。
整个应用的架构如下:
Apache 2.0.59 + Resin EE 2.1.17 + Jdk 1.5.0.07 + Oracle 9
运行的操作系统:
Solaris 10 Update 3 (11/06), EIS patches包.

--------------------------------------------------------------------------------

jvisualvm – Java Virtual Machine Monitoring, Troubleshooting, and Profiling Tool
October 12th, 2009 No comments
英文地址:
http://java.sun.com/javase/6/docs/technotes/tools/share/jvisualvm.html

java VisualVM是一个图像用户界面,提供使用java技术的用的详细信息. 名字”java VisualVM”来自于他提供了对JVM的视觉上的信息.
java VisualVM整合了一些监控,诊断,信息采集工具到一个里. 例如,jmap,jinfo,jstat和jstack的功能都整合到jvisualvm里. JConsole工具的的一些功能也可以通过选项加载.

jvisualvm的命令如下:
jvisualvm [options]

OPTIONS-J
传递参数给jvisualvm启动虚拟机

USAGE
java应用开发开发者可以使用java visualVM来诊断应用,监控提高应用的性能. java
VisualVM能够让开发者生成,分析heap dumps,跟踪内存泄漏, 执行,监控垃圾收集, 执行一些轻量级的memory,cpu信息采集.
Java VisualVM可以通过插件扩展功能. 例如,大多数的JConsole工具的功能通过MBeans Tab和JConsole
Plug-in的包装插件提供. 可以在Java VisualVM的Tools选项里选择你要的插件.

Categories: translation Tags: java tool, jvisualvm
jstatd – Virtual Machine jstat Daemon
September 30th, 2009 No comments
英文地址
http://java.sun.com/javase/6/docs/technotes/tools/share/jstatd.html

jstatd工具是一个rmi的服务应用. 创建和结束jvms工具的代理,提供一个接口供远程监控工具分析本地的JVMs.
jstatd 服务需要本地存在一个RMI注册. jstatd服务将尝试依附于RMI注册,使用默认端口上,或者用-p指定的端口上.
假如rmi注册没有找到,jstatd应用将会创建一个使用指定端口或默认端口.
如果jstatd的参数指定了-nr选项,那么创建一个内部的RMI注册是被禁止的.

jstatd的命令如下:

jstatd [ options ]
options
-nr
当jstatd启动时没有找到存在的RMI注册,那么他不会尝试创建一个内部的RMI注册

-p port
期望的RMI注册端口号,或者自己创建的RMI注册的端口号

-n rminame
用来指定在RMI注册中的远程RMI对象的名字. 默认是JStatRemoteHost. 假如启动多个jstatd进程,那么就需要用这个参数指定名字以区分.

-Joption
传递将要启动jvm参数

security
jstatd服务只能在合适的内部访问权限下启动. 因此jstatd进程必须用启动JVMs的同用户启动. 一些用户的权限,如root用户拥有该机所有JVMs的访问权限,可以启动jstatd,但是会引入额外的安全问题.
jstatd服务没有为客户端提供任何验证. 所以他会把jstatd进程访问的jvms暴露给网络中所有的用户. 启动jstatd进程的时候需要考虑一下,你的网络是否安全,特别是在产品环境中.
在jstatd服务启动的时候引入一个policy文件将不会有任何安全的异常.

grant codebase "file:${java.home}/../lib/tools.jar" {   permission java.security.AllPermission;};
将以上内容保存到名为jstatd.all.policy的当前目录文件中
然后启动jstatd
jstatd -J-Djava.security.policy=jstatd.all.policy

examles:
jstatd -J-Djava.security.policy=jstatd.all.policy
jps 10.16.200.8
显示如下:

5866 Bootstrap6572 Jstatd6646 Jps
jstat -gcutil 5866@10.16.200.8
1000
显示如下:

S0     S1     E      O      P     YGC     YGCT    FGC   
FGCT     GCT 99.21   0.00 78.70   7.40 55.27      8    0.038    
0    0.000    0.03899.21   0.00 78.70   7.40 55.27      8   
0.038     0    0.000    0.038
Categories: translation Tags: java tool, jstatd
jstat – Java Virtual Machine Statistics Monitoring Tool
September 28th, 2009 No comments
英文地址:
http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstat.html

jstat是显示运行期jvm虚拟机行为统计的工具.

jstat的命令如下:

jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
generalOption
假如你指定了一个一般的选项,那么不能指定其他的选项或参数.
-help 显示帮助信息
-version 显示版本信息(似乎用不了,报错”invalid argument count”)
-options 显示所有的统计选项列表.

output options
假如你没有指定一般的选项,那么你可以指定输出选项. 输出选项决定了jstat输出的内容和格式, 并也有一个单一的statOption(统计选项)加上任何其他的输出选项,如-h, -t, -J等. statOption必须出现在前面.
输出的格式如同一个table ,用空格隔开列信息. 第一行是每列的头信息描述. 使用-h选项可以指定头信息显示的频率. 也就是每几行显示一次头信息.
使用-t选项可以显示时间戳列,在输出的第一列显示. 时间戳列显示的时间是指该jvm实例从启动到现在的时间,单位是s(秒).
使用interval和count参数可以指定输出的频率和输出的次数.
-statOption
可以用jstat -options显示所有可用的statOption
class 显示class loader的行为统计
compiler 显示虚拟机即时的compiler行为统计
gc 显示堆的垃圾收集行为统计
gccapacity 显示jvm中各分区的容量和目前各分区占用的空间统计
gccause 显示垃圾收集的概要信息(和-gcutil一样),外加最近一次或当前的垃圾收集事件统计
gcnew 显示新生代的信息统计
gcnewcapacity 显示新生代容量信息统计
gcold 显示老生代和永久代信息统计
gcoldcapacity 显示老生代容量信息统计
gcpermcapacity 显示永久代容量信息统计
gcutil 显示垃圾收集的概要信息统计
printcompilation 显示虚拟机当前执行的方法的信息统计
-h
-t
-J

vmid格式

[protocol:][//]lvmid[@hostname][:port][/servername]
这个和jps中的格式类似,只不过在hostname前多了个进程号

Categories: translation Tags: java tool, jstat
jps – Java Virtual Machine Process Status Tool
September 28th, 2009 No comments
英文地址:
http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jps.html

jps是在目标系统里罗列正在运行中的java虚拟机实例的工具.

jps的命令如下:

jps [options] [hostid]
options 命令选项
-q 输出时不显示类名,JAR文件名,实际上是主程序只处理产生当前vm的进程号的列表.
-m 显示传入主程序的参数. 在嵌入式jvm中,输出可能为空.
-l 显示应用启动类的全包名或应用启动包的全路径名
-v 显示传入JVM的参数,输出相对比-m少一些.
-V 显示通过flags文件传递给JVM的参数,如:.hotspotrc文件,或者用-XX:Flags=filename参数在jvm启动时传入的文件
-Joption 设定jps启动时的参数. 如: -J-Xms48m. 用-J为接下来要用java启动的应用传递参数是一个公共约定.

hostid
是指定主机. hostid还可以指定通信协议,端口号等
hostid的语法如下:

[protocol:][[//]hostname][:port][/servername]
protocol 通信协议. 假如protocol没指定,并且hostname也没指定,那么默认的protocol是平台特定的,最优化的本地protocol. 假如protocol没有指定,并且hostname是指定的,那么默认的协议用rmi.
hostname 一个主机名或ip地址,指向目标主机. 假如hostname没有,那么目标主机将是本地的主机.
port 和远程服务器通信的默认端口. 假如hostname没有指定或者protocol指定了最优的本地协议,那么port会被忽略.
否则port这个参数将要特别指定. 默认的rmi协议,端口指定的端口号是远程主机注册rmi是的端口号.
假如port没有指定,协议指定rmi,那么默认的rmi注册端口号1099将被使用.
servername 此参数的处理依赖于实现. 在最优化的本地协议下,这个参数是被忽略的. 在rmi协议下,这个参数是用来标识远程主机上RMI远程对象的名字字符串. 可以参见jstatd命令的-n参数.

output format

lvmid [ [classname] | [JARFilename] | [Unknown] [arg*] [jvmargs*] ]
Categories: translation Tags: jps

【上篇】
【下篇】

抱歉!评论已关闭.