面试官:你用过哪些JDK自带的命令行工具

简介: 面试官:你用过哪些JDK自带的命令行工具

本文基于HotSpot虚拟机,JDK版本1.8.0_171,windows系统


目录


一、jps:虚拟机进程状况工具 二、jstat:虚拟机统计信息监视工具 三、jmap:Java内存映像工具 四、jhat:虚拟机堆转储快照分析工具 五、jstack:Java堆栈跟踪工具 六、jinfo:Java配置信息工具

java和javac这两个命令行工具我们应该都很熟悉,但是除了这两个工具jdk/bin里面还提供了很多工具给我们使用,今天就简单介绍有关虚拟机监控且助于故障排查的工具。


image.pngimage.png

image.png

实际上这些工具大多数就是jdk/lib/tool.jar的封装,内部就是调用tool里面的内容,所以工具体积都不大,而且在linux版本的jdk中有些工具就是用shell写的。


1.jps(JVM Process Status Tool)


用于显示指定系统内所有HotSpot虚拟机进程,并且能显示虚拟机执行主类以及本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)功能单一,但是其他因为其他工具都需要指明LVMID(来确定要监控的虚拟机进程,所以都需要用到它。对于本地的虚拟机进程来说LVMID和操作系统的进程ID一致。

使用格式:jps [options] [hostid]


image.png

jps可以通过RMI协议查询远程开启RMI服务的虚拟机进程,hostid为RMI注册表中注册的主机名。


2.jstat(JVM Statistics Monitoring Tool)


用于监视虚拟机各种运行状态信息的工具,可以显示本地或者远程的虚拟机进程类装载、内存、GC、JIT等运行数据,在没有GUI图像界面的服务器上,主要就是用它在运行期定位性能问题。

使用格式 :jstat [option vmid [interval [s|ms] [count]] ]



image.png

image.png

interval表示查询的间隔, s|ms是秒和毫秒(默认是毫秒,即不写单位是毫秒),count表示查询的次数。

样例:表示每5秒钟查看一次LVMID为34216的虚拟机进程的GC情况,一共查询10次

image.png


3.jmap (Memory Map for Java)


用于生成堆转储快照(heapdump或dump文件),说白了就是把java堆使用情况快照一份导出来供我们查看,用来排查问题。

使用格式 :jmap [option] vmid

image.png


4.jhat (JVM Heap Analysis Tool)


这个就是和jmap搭配使用的,jmap导出来的堆快照文件用jhat 打开分析

使用格式: jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>] [-version] [-h|-help] <file>


image.png

image.png


5.jstack (Stack Trace for Java)


用于生成虚拟机当前时刻线程快照(threaddump或javacore)。主要用来定位线程出现长时间停顿的原因,判断死锁啊,死循环的等。通过jstack就可知各线程的调用堆栈情况。

使用格式:jstack [option] vmid

image.png


6.jinfo (Configuration Info for Java)


用来查看和调整虚拟机各项参数

使用格式:jinfo [option] pid

可以通过-flag[+|-] name 添加和删除一些参数,或者-flag name =value修改一些参数,但是很多参数是不允许修改的



image.png


结语


本文主要是简单介绍常见的几个JDK命令行工具,建议使用的时候自己通过命令 -option 查看每个选项实际的意思再使用,毕竟这么选项一般也记不住。而且这些工具有一些算比较简陋了例如jhat ,这玩意分析的简陋,界面也简陋不够强大和专业。所以这些个命令行工具以了解和大概明白其作用为主。

像平日里一般用于分析都用JConsole、VisualVM(All-in-One Java Troubleshooting Tool)这种可视化工具来分析故障监控性能等,有些在IDE里面的也有用MAT等工具分析。

本文参考《深入理解JAVA虚拟机》第四章



相关文章
|
6月前
|
Java 编译器 API
【面试问题】JDK 和 JRE 的区别?
【1月更文挑战第27天】【面试问题】JDK 和 JRE 的区别?
|
6月前
|
存储 缓存 并行计算
【面试问题】JDK并发类库提供的线程池实现有哪些?
【1月更文挑战第27天】【面试问题】JDK并发类库提供的线程池实现有哪些?
|
3月前
|
存储 安全 Java
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别;什么是程序计数器,堆,虚拟机栈,栈内存溢出,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
|
3月前
|
存储 Java
【Java集合类面试七】、 JDK7和JDK8中的HashMap有什么区别?
JDK7中的HashMap使用数组加链表解决冲突,而JDK8增加了红黑树结构以优化链表过长时的性能,提高查找效率。
|
4月前
|
Java 编译器 程序员
JVM常见面试题(一):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别
JVM常见面试题(一):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别
JVM常见面试题(一):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别
|
3月前
|
设计模式 算法 Java
面试官:JDK中都用了哪些设计模式?
面试官:JDK中都用了哪些设计模式?
42 0
|
6月前
|
存储 监控 Java
性能监控之常见JDK命令行工具整理
我们在做性能分析的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:运行参数、运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore 文件)、堆转储快照(heapdump/hprof 文件)等。
127 2
性能监控之常见JDK命令行工具整理
|
设计模式 算法 Java
面试官:JDK1.8 HashMap扩容rehash算法是如何优化的?
本文跟大家聊一聊一个常见的面试题,那就是JDK1.8 HashMap扩容rehash算法是如何优化的?
|
6月前
|
Java 数据安全/隐私保护
【面试问题】JDK 动态代理与 CGLIB 区别?
【1月更文挑战第27天】【面试问题】JDK 动态代理与 CGLIB 区别?
|
Java API 容器
常见面试题(jdk1.8的新特性(高薪常问))
jdk1.8的新特性(高薪常问)
451 0