专栏首页Java成长之路十三、JDK的命令行工具

十三、JDK的命令行工具

前面的博文我们介绍了一些关于jvm的一些基础知识,本文介绍一些jdk的命令行工具,通过这些工具我们可以对运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore 文件)、堆转储快照(heapdump/hprof 文件)等文件进行分析,从而定位解决问题。 jdk的彬目录中有许多命令行工具,其中java.exejavac.exe这两个命令行工具是我们最熟悉的。同时,还有其他的许多命令行工具,我们今天介绍的就是这些命令行工具中的一部分。bin目录内容如下图所示。

本文介绍的主要jdk命令:

命令名称

全称

用途

jps

JVM Process Status Tool

显示指定系统内所有的HotSpot虚拟机进程

jstat

JVM Statistics Monitoring Tool

用于收集Hotspot虚拟机各方面的运行数据

jinfo

Configuration Info for Java

显示虚拟机配置信息

jmap

JVM Memory Map

生成虚拟机的内存转储快照,生成heapdump文件

jhat

JVM Heap Dump Browser

用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户在浏览器上查看分析结果

jstack

JVM Stack Trace

显示虚拟机的线程快照

1. jps:虚拟机进程状况工具

jps命令是最常用的命令,可用于查询正在运行的虚拟机进程,同时可选择性的显示虚拟机执行主类,即执行main函数的类,以及进程的本地虚拟机ID(Local Virtual Machine Identifier 简称LVMID)(对于本地虚拟机进程来说,进程的本地虚拟机ID与操作系统的进程ID是一致的)。 jps的命令格式为:

jps [options] [hostid]
  • jpsoptions 的主要选项如下所示。

选项

作用

实例

-q

只输出本地虚拟机进程ID,省略主类名

-m

输出虚拟机进程启动时传递给main()函数的参数

-l

输出进程执行的主类的全名

-v

输出虚拟机进程启动时的JVM参数

* hostid可用于查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名。

2. jstat:虚拟机统计信息监视工具

jstat命令可用于显示本地或远程虚拟机进程中的类装载 ,内存,垃圾收集,JIT编译等运行数据。再没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。 jps的命令格式为:

jstat [options  vmid  [interval[s|ms]]  [count] ]

其中若查询的是本地虚拟机进程,VMID与LVMID是一致的,如果是远程虚拟机进程VMID的格式为: [protocol:][//] lvmind[@hostname [:port] /servername] 参数intervalcount代表查询的间隔和次数,如果省略这两个参数,说明只能查询一次。假设需要每150毫秒查询一次进程2764垃圾收集的状况,一共查询20次,那命令应当是:

jstat -gc 2764 250 20

选项options代表着用户希望查询的虚拟机信息,主要分为3类:类装载垃圾收集运行期编译状况,具体选项及作用请参考下表的描述:

选项

作用

-class

监视类装载,卸载数量,总空间以及类装载所耗费的时间

-gc

监视Java堆状况,包括Eden区,两个survivor区,老年代,永久代的容量,已用空间,GC时间合计等信息

-gccapacity

内容与-gc基本相同,但主要输出Java堆各个区域的最大最小空间

-gcutil

内容与-gc基本相同,但主要关注已使用空间占总空间的百分比

-gccause

内容与-gcutil基本相同,但主要关注已使用空间占总空间的百分比,并输出导致上一次GC的原因

-gcnew

监视新生代GC情况

-gcnewcapacity

内容与-gcnew基本相同,但主要输出使用到的最大最小空间

-gcold

监视老年代GC情况

-gcoldcapacity

内容与-gcnew基本相同,但主要输出使用到的最大最小空间

-gcpermcapacity

输出永久代使用到的最大最小空间

-complier

输出JIT 编译器编译过的方法耗时的信息

-printcompliter

输出已经被JIT编译的方法

示例:

其中S0,S1表示Survivor区,E表示新生代Eden区,O表示老年代(Old),P表示永久代(Permanent)。YGC(Young GC)表示MInor GC,其下面的数字表示GC了多少次,YGCT(Young GC Time)表示Minor GC的耗时,单位为秒,FGC表示Full GC的次数,FGCT表示Full GC的耗时,单位为秒,GCT表示总共的GC时间,为YGCT与FGCT的总和。

3. jinfo:Java配置信息工具

jinfo用于实时地查看和调整虚拟机的各项参数。 jinfo的命令格式为:

jinfo [option] pid

option选项的具体内容如下所示:

选项

作用

参考文章

-sysprops

把虚拟机进程的System.getProperties()的内容打印出来

-flag ‹name›

打印出名为name的value值

-flag[+

-] ‹name›

启用或禁用虚拟机参数

-flag ‹name› = ‹value›

修改运行期的虚拟机的参数值

flags

打印虚拟机启动时未被显示指定的所有系统默认值

`-h

-help`

打印帮助信息

我们可以用jinfo -flags来查询线程的参数,其中的Non-default VM flags为虚拟机默认的设置参数,Command line为用户自行设置的参数,如下图:

4. jmap:Java内存映像工具

jmap 命令一般用于生成堆转储快照(一般称为heapdump 或 dump 文件)。且可以查询finalize执行队列,Java堆与永久代的一些信息。 * jmap的命令格式为:*

jmap  [option ]  vmid

常用的option选项有:

选项

作用

-dump

生成Java堆转储快照,格式为: -dump:[live , ]format=b , file=‹filename›,其中live子参数说明只dump出存活的对象显示在F-Queue中等待Finalizer线程执行finalize方法的对象

-finalizerinfo

显示在F-Queue中等待Finalizer线程执行finalize方法的对象

-heap

显示Java堆详细信息,如使用哪种回收器,参数配置,分代状况等

示例:

5. jhat:虚拟机堆转储快照分析工具

jhat命令可以与jmap搭配使用,来分析jmap生成的堆转储快照。生成dump文件的分析结果后,可以在浏览器中查看。 该命令一般不会被使用。原因是因为有更好可以替代的工具。

6. jstack:Java堆栈跟踪工具

jstack命令用于生成虚拟机当前时刻的线程快照。线程快照指的是当前虚拟机内的每一条线程正在执行的方法堆栈的集合,生成线程快照的作用是,可用于定位线程出现长时间停顿的原因,如线程间死锁,死循环,请求外部资源导致的长时间等待等问题,当线程出现停顿时 就可以用jstack各个线程调用的堆栈情况。 jstack命令格式:

jstack  [option] vmid

常用的option选项有:

选项

作用

-F

当正常输出的请求不被响应时,强制输出线程堆栈

-l

除堆栈外,显示关于锁的附加信息

-m

如果调用到本地方法的话,可以显示C/C++的堆栈

示例:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一、JVM内存区域详解

    Java中虚拟机在执行Java程序的过程中会将它所管理的内存区域划分为若干不同的数据区域。下面来介绍几个运行时数据区域。

    栋先生
  • 二、OutOfMemoryError实战

    本文通过一些可执行代码来验证异常发生的场景,并且会初步介绍几个与内存相关的最基本的虚拟机参数。 本文的主要目的有两个: 1. 通过代码验证Java虚拟机...

    栋先生
  • 四、Java对象的内存布局

    上篇博客介绍的对象的创建过程,本文来介绍一下对象的组成结构。 在HotSpot虚拟机中,对象在内存中的布局划分为3个区域:对象头(Header),实例数据(...

    栋先生
  • 通过实例来学习使用Linux KVM

    KVM是Kernel-based Virtual Machine的缩写,从名字上可以知道,KVM是在支持虚拟化硬件环境上,基于Linux操作系统内核的虚拟化技...

    小小科
  • 工具资源系列之给 windows 装个 vmware 虚拟机

    如果长时间处于同一种环境,慢慢得我们会觉得有些无聊,所以适当地出去走走看看外面的世界能带给我们不一样的体验.

    雪之梦技术驿站
  • 云计算中使用虚拟化面临的安全问题

    在云计算中,有三种基本服务模式:软件即服务(SaaS)、平台即服务(PaaS)和基础架构即服务(IaaS)。此外,还有三种基本部署模式:公共、混合和私有云计算。...

    静一
  • 如何让你的虚拟机更轻松地实现云就绪

    将工作负载迁移到云端的能力会带来许多优势,但首先要确认你的虚拟机是否可以平稳完成迁移。 今天的大趋势之一是,将公有云用作内部数据中心的扩展,但如果你的虚拟机还不...

    静一
  • 使用VMWareWorkstation10搭建学习环境笔记

    第一节:介绍虚拟化技术 虚拟化技术 1.在一台计算机运行多个操作系统 2.教学环境 测试环境 3.和硬件无关 4.P to V   物理机->虚拟机(Physi...

    Angel_Kitty
  • vsphere(esxi):解决vmware虚拟机无法全屏显示

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • vmware14.0知识点手册

    本篇文章是VMware官网的 使用VMware Workstation Pro - VMware Workstation Pro 14.0 的开源手册的摘抄版...

    东风冷雪

扫码关注云+社区

领取腾讯云代金券