面试常被问到的 JDK 命令,你知道几个?

简介: Hello 大家好,我是鸭血粉丝,不知道你有没有过这样的经历,经常在面试的时候被问到 JDK 相关的命令,如何排查线上的问题,线上程序突然崩了要怎么处理,等等类似这种场景。其实并不是每个开发人员都能有这种实战经验,现实工作中往往很多开发人员是接触不到线上环境的。但是作为一个以 Java 谋生的程序员,如果连这些 JDK 自带的一些命令都不知道,那也说不过去。阿粉以前也是这样,从来没有接触过线上环境,有任何问题都是运维人员去处理,因为相关制度不允许开发人员接触生产服务器。但是作为一个有梦想的开发人员,不能接触不代表就不用学,阿粉还是私下好好学习了一波,万一哪天就用上了呢。

Hello 大家好,我是鸭血粉丝,不知道你有没有过这样的经历,经常在面试的时候被问到 JDK 相关的命令,如何排查线上的问题,线上程序突然崩了要怎么处理,等等类似这种场景。其实并不是每个开发人员都能有这种实战经验,现实工作中往往很多开发人员是接触不到线上环境的。但是作为一个以 Java 谋生的程序员,如果连这些 JDK 自带的一些命令都不知道,那也说不过去。

阿粉以前也是这样,从来没有接触过线上环境,有任何问题都是运维人员去处理,因为相关制度不允许开发人员接触生产服务器。但是作为一个有梦想的开发人员,不能接触不代表就不用学,阿粉还是私下好好学习了一波,万一哪天就用上了呢。

JDK 常用命令

先给大家看一张总览图,然后我们一个个命令去使用一下,感受一下。

28.jpg

JPS

29.jpg

说明:首先通过上图,我们看到使用 jps 或者 jps | grep -v Jps 命令的时候是可以找到当前系统所有JVM。上面第二条命令是过滤本身的 Jps 程序。可以看到,输入这个命令后,会展示出当前系统所有的 Java 程序,并且会输出进程号 pid(也就是前面的数字)。

我们通过命令 man jps 简单的看下说明,如下:

30.jpg

可以看到 jps 命令有五个参数,每个参数的含义如下,

  • -q: 不输出类名信息和参数,只输出进程号
  • -m:展示输入到 main 方法的参数
  • -l:展示 main class 全路径
  • -v:展示输入 JVM 的参数
  • -V:不输出路径,只输出进程号和jar

我们依次输入试下,如下图

31.jpg

Jinfo

通过上一步我们可以获得对应 JVM 的进程号,这为我们后续的操作提供了便利,后续的操作都会使用到进程号。

我们先使用一下命令,在使用前我们先获取进程号,我这里服务器运行的进程号为 2528,然后输入jinof 2528

32.jpg

通过上图,我们看到当前 JVM 的版本以及其他详细信息,并且可以看到服务器以及环境变量等一系列信息。同样的我们使用 man jinfo 命令看下手册。

33.jpg

该命令主要是用户查看当前虚拟机相关信息,我们就不过多介绍了。

Jstat

jstat命令主要是用来监控虚拟机的状态的,可以查看虚拟机 GC 的情况,如下命令jstat -gcutil 2528 1000 10表示每 1000 毫秒输出一次进程 2528 的 GC 情况,并且总共输出 10 次。

34.jpg

jstat 的手册比较长,大家感兴趣可以自行去查看下,这里只贴上面一部分给大家看下。

35.jpg

上面执行的jstat -gcutil 2528 1000 10 如果修改成这个jstat -gcutil -h3 2528 1000 10,最后的效果会是下图,我们可以看到每三行就增加了一个表头,更多命令大家可以自己试试。

36.jpg

Jmap

jmap 命令用于生成dump 文件,jmap -dump:live,format=b,file=dump.bin 2528创建 dump 文件如下。

37.jpg

通过jmap 命令我们可以生成内存快照文件,用于分析程序异常时的内存信息,并且配合 jhat命令可以更好的使用。

39.jpg

Jhat

上面提到我们在使用 jmap 的时候生成了一个内存快照文件,那我们如何查看这个内存文件呢?这里就需要结合jhat命令了。我们使用jhat dump.bin 就可以启动一个服务,然后通过浏览器打开默认的 7000 端口来查看信息。

40.jpg

访问 7000 端口如下:

41.jpg

Jstack

jstack用于生成java虚拟机当前时刻的线程快照,线程快照是当前 java 虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。线程出现停顿的时候通过 jstack 来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。

使用命令jstack 2528 查看线程堆栈情况如下:

42.jpg

通过这个命令我们可以看到进程对应的线程执行情况,可以分析哪些线程在允许,哪些线程在等待。

总结

JDK 常见的命令阿粉就给大家介绍到这里,在平时的工作和学习中大家可以尝试去使用一下,感受一下,这样就算是在面试的时候或者实际要用的时候就能做的得心应手。

写在最后


最后邀请你加入我们的知识星球,这里有 1700+ 优秀的人与你一起进步,如果你是小白那你是稳赚了,很多业内经验和干货分享给你;如果你是大佬,那可以进来我们一起交流分享你的经验,说不定日后我们还可以有合作,给你的人生多一个可能。

相关文章
|
1天前
|
Linux Shell
面试题13: Linux 命令
面试题13: Linux 命令
|
1天前
|
Java 编译器 API
【面试问题】JDK 和 JRE 的区别?
【1月更文挑战第27天】【面试问题】JDK 和 JRE 的区别?
|
1天前
|
存储 缓存 并行计算
【面试问题】JDK并发类库提供的线程池实现有哪些?
【1月更文挑战第27天】【面试问题】JDK并发类库提供的线程池实现有哪些?
|
7月前
|
SQL 监控 关系型数据库
【面试题精讲】MySQL-show-process命令
【面试题精讲】MySQL-show-process命令
|
1天前
|
Oracle Java 关系型数据库
windows 下 win11 JDK17安装与环境变量的配置(配置简单详细,包含IJ中java文件如何使用命令运行)
本文介绍了Windows 11中安装JDK 17的步骤,包括从官方网站下载JDK、配置环境变量以及验证安装是否成功。首先,下载JDK 17的安装文件,如果没有Oracle账户,可以直接解压缩文件到指定目录。接着,配置系统环境变量,新建`JAVA_HOME`变量指向JDK安装路径,并在`Path`变量中添加。然后,通过命令行(cmd)验证安装,分别输入`java -version`和`javac -version`检查版本信息。最后,作者分享了如何在任意位置运行Java代码,包括在IntelliJ IDEA(IJ)中创建的Java文件,只需去掉包声明,就可以通过命令行直接运行。
|
1天前
|
Linux Go
Linux命令Top 100驱动人生! 面试必备
探索Linux命令不再迷茫!本文分10部分详解20个基础命令,带你由浅入深掌握文件、目录管理和文本处理。 [1]: <https://cloud.tencent.com/developer/article/2396114> [2]: <https://pan.quark.cn/s/865a0bbd5720> [3]: <https://yv4kfv1n3j.feishu.cn/docx/MRyxdaqz8ow5RjxyL1ucrvOYnnH>
79 0
|
5月前
|
Unix Linux
带你快速掌握Linux最常用的命令(图文详解)- 最新版(面试笔试常考)
带你快速掌握Linux最常用的命令(图文详解)- 最新版(面试笔试常考)
70 1
|
6月前
|
缓存 监控 网络协议
Java面试题 -Linux命令
Java面试题 -Linux命令
55 0
|
1天前
|
监控 数据库 索引
面试题21:如何优化查询命令?
面试题21:如何优化查询命令?
|
1天前
|
Linux
面试题12: 基本Linux 命令题目
面试题12: 基本Linux 命令题目

相关实验场景

更多