Some command line tools of jdk

I believe that many junior and intermediate programmers are both familiar and unfamiliar with jdk, because we use jdk every day, but we don’t know what functions it has, only that it is an indispensable tool for running Java programs; today we will Let's take a look at jdk's command line tools. Through the following three questions, let's take a look at jdk's command-line tools (jdk version used in this article: jdk1.8.0_65 );

(1) What is jdk? What's the function?

(2) What are the commonly used command line tools for jdk?

(3) What are the functions of jdk command line tools?

 

JDK: Java Development Kit, the software development kit of the Java language, is the core of the entire Java development. It includes the Java runtime environment, Java tools and Java basic class libraries. This chapter mainly introduces several commonly used Java tools in jdk. ;

 

The directory where the commonly used Java tools are located : / jdk1.8.0_65/bin , the command line tools in this directory are basically a simple encapsulation of the jdk/lib/tools.jar class library, and the main function code is in the tools class library realized;

 

The directory where the Java runtime environment is located: /jdk1.8.0_65/jre


The directory where the Java base class library is located : /dk1.8.0_65/lib


无论是Java运行环境还是Java工具,都是依赖Java的基础类库实现的,它们不能脱离Java类库而单独运行。有兴趣的童鞋可以去看看tools.jar的实现,本章所介绍的几个常用命令工具(java、javac、jps、jstat、jinfo、jmap、jstack)的实现都能在里面看到:


 

 

下面介绍一下常用的、与JVM性能相关的几个Java工具:

java.exe:用于执行java类或jar文件

命令格式:java [-options] class [args...](执行类)  或   java [-options] -jar jarfile [args...](执行jar文件

 

javac.exe:将.java文件编译成二进制字节码的.class文件

命令格式:javac <options> <source files>

jps.exe:JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程;

jps -l:输出主类的全名,如果进程执行的是Jar包,输出Jar路径;

jps -q:只输出本地虚拟机唯一线程id(LVMID),省略主类的名称;

jps -m:输出虚拟机进程启动时传递给主类main()函数的参数; jps -v:输出虚拟机进程启动时JVM参数;

线程ID(43452)是我在本地启动的一个springboot项目,以下部分的操作是基于该线程ID来进行操作的;

 

 

jstat.exe:jstat用于监视虚拟机各种运行状态信息的命令行工具,它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具;

jstat命令格式:jstat option vmid interval(s|ms) count,如果省略interval和count则表示只查询一次; 

vmid:虚拟机进程id,如果是本地虚拟机进程,VMID与lvmid是一直的,如果是远程虚拟机进程,那vmid格式为 protocol://lvmid[@hostname[:port]/servername];

interval:查询间隔,隔多少秒/毫秒查询一次;

count:查询次数;

option:代表虚拟机需要查询的虚拟机信息,主要分为3类:类装载,垃圾收集和运行期编译状况;


例如:jstat -gc 43452 3000 2 表示每3秒查询一次进程43452的gc情况,总共查询2次;下面列举部分jstat命令:


jstat命令打印出来的参数描述可参考:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html#class_option

 

 

 

jinfo.exe:Configuration Info for Java,显示虚拟机配置信息,其作用是实时查看和调整虚拟机的各项参数

 jinfo命令格式:jinfo option vmid

修改虚拟机某个参数值:jinfo -flag name=value vmid

查看虚拟机某个参数值:jinfo -flag name vmid

 

jmap.exe:Memory Map for Java,生成虚拟机的内存转储快照(heapdump文件);是Java内存映像工具,其作用可以获取dump文件,查询finalize执行队列、Java堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器。

jamp命令格式:jmap option vmid

普通用户在C盘下是没有权限生成虚拟机的内存转储快照,只有管理员才用权限

下面是使用G盘下的jdk生成的虚拟机的内存转储快照,可以在G:\jdk1.8.0_65\bin目录下找到名为“57460dump.bin”的快照

jhat.exe:JVM Heap Dump Browser,用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用于可以在浏览器上查看分析结果;

命令格式:jhat 【dump文件


执行完jhat命令后,在浏览器中 输入http://localhost:7000可查看分析结果

jstack.exe:Stack Trace for Java,显示虚拟机的线程快照;用于生产虚拟机当前时刻的线程快照,线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现多长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等导致线程长时间停顿的常见原因。

jstack命令格式:jstack [option] vmid


强制输出线程堆栈:


 

 

 

以上只是简单的介绍了jdk的一些命令行工具,掌握了以上的基本命令,对java虚拟机性能监控也会更加熟悉;要想深入了解jdk,最好是自己动手练一下,并且去看一下它的实现源码(tools.jar文件中),了解jdk的实现思路;

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326762149&siteId=291194637