首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >十三、JDK的命令行工具

十三、JDK的命令行工具

作者头像
栋先生
发布2018-09-29 16:37:48
7180
发布2018-09-29 16:37:48
举报
文章被收录于专栏:Java成长之路Java成长之路

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

mark
mark

本文介绍的主要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编译的方法

示例:

mark
mark

其中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++的堆栈

示例:

mark
mark
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年04月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. jps:虚拟机进程状况工具
  • 2. jstat:虚拟机统计信息监视工具
  • 3. jinfo:Java配置信息工具
  • 4. jmap:Java内存映像工具
  • 5. jhat:虚拟机堆转储快照分析工具
  • 6. jstack:Java堆栈跟踪工具
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档