JDK的命令行工具。

        Java开发人员肯定都知道JDK的bin目录中有“java.exe”、“javac.exe”这两个命令行工具,但并非所有程序员都了解过JDk的bin目录之中其他命令行程序的作用。每逢JDK更新版本之时,bin目录下命令行工具的数量和功能总会不知不觉的增加和增强。bin目录的内容如下图所示。

JDK的命令行工具。_第1张图片

         在这些工具的其中一部分,主要包括用于监视虚拟机和故障处理的工具。这些故障处理工具被Sun公司作为“礼物”附赠给JDK的使用者,并在软件的使用说明中把他们声明为“没有技术支持并且是实验性质的”(unsupported and experimental)的产品,但事实上,这些工具都非常稳定而且功能强大,能在处理应用程序性能问题、定位故障时发挥很大的作用。

        说起JDK的工具,可能会注意到这些工具的程序体积都异常小巧。假如以前没有没注意到,现在不妨再看看上图中的最后一列“大小”,几乎所有工具的体积基本上都稳定在27KB左右。并非JDK开发团队刻意把他们制作得如此精炼来炫耀编程水平,而是因为这些命令行工具大多数是jdk/lib/tools.jar类库的一层薄包装而已,他们主要的功能代码是在tools类库中实现的。把上图和下图两张图片对比一下就可以看的很清楚。

JDK的命令行工具。_第2张图片

        假如读者使用的是Linux版本的JDK,还会发现这些工具中很多甚至就是由Shell脚本直接写成的,可以用vim直接打开他们。

        JDK开发团队选择采用Java代码来实现这些监控工具是有特别用意的:当应用程序部署到生产环境后,无论是直接接触物理服务器还是远程Telnet到服务器上都可能会受到限制。借助tools.jar类库里面的接口,我们可以直接在应用程序中实现功能强大的监控分析功能。

        需要特别说明的是,这里介绍的工具全部基于Windows平台下的JDK 1.6 Update 21,如果JDK版本、操作系统不同,工具所支持的功能可能会有较大差别。大部分工具在JDK 1.5中就已经提供,但为了避免运行环境带来的差异和兼容性问题,建议使用JDK 1.6来验证介绍的内容,因为JDK 1.6的工具可以正常兼容运行于JDK 1.5的虚拟机之上的程序,反之则不一定。下表说明了JDK主要命令行监控工具的用途。

 

名称 主要作用
jps JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程
jstat JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据
jinfo Configuration Info for Java,显示虚拟机配置信息
jmap Memory Map for Java,生成虚拟机的内存转储快照(heapdump文件)
jhat JVM Heap Dump Browser,用于分析heapdump文件,他会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果
jstack Stack Trace for Java,显示虚拟机的线程快照

        注意,如果在工作中需要监控运行于JDK 1.5的虚拟机之上的程序,在程序启动时请添加参数“-Dcom.sun.management.jmxremote”开启JMX管理功能,否则由于部分工具都是基于JMX,他们都将会无法使用,如果被监控程序运行于JDK 1.6的虚拟机之上,那JMX管理默认是开启的,虚拟机启动无须再添加任何参数。

        注意,tools.jar中的类库不属于Java的标准API,如果引入这个类库,就意味着用户的程序只能运行于Sun Hotspot(或一些从Sun公司购买了JDK的源码License的虚拟机,如IBM J9、BEA JRockit)上面,或者在部署程序时需要一起部署tools.jar。

你可能感兴趣的:(运维)