当前位置: 首页 > 科技观察

面试中经常被问到的JDK命令,你知道多少?

时间:2023-03-21 12:34:26 科技观察

大家好,我是鸭血粉。不知道你有没有这样的经历。面试时经常被问到JDK相关命令,线上问题如何排查,线上程序突然崩溃。如何处理等等类似这种场景。事实上,并不是每个开发者都能拥有这种实战经验。在实际工作中,很多开发人员往往无法访问线上环境。但是作为一个以Java为生的程序员,如果你连这些JDK自带的一些命令都不知道,那就没有意义了。阿芬以前就是这样。她从未接触过网络环境。任何问题都由运维人员处理,因为相关系统不允许开发人员联系生产服务器。但是作为一个有梦想的开发者,接触不到并不代表不需要学习。阿芬私底下还是好好学习的,以防哪天用得着。JDK的常用命令先给大家看一张概览图,接下来我们会一一使用命令来感受一下。JPS说明:首先,通过上图我们可以看出,当使用jps或者jps|grep-vjps命令,可以查到当前系统中所有的JVM。上面第二条命令是过滤自身的Jps程序。可以看到,输入这条命令后,会显示当前系统中的所有Java程序,并输出进程号pid(即之前的编号)。我们通过命令manjps简单的看一下说明,如下:可以看到jps命令有五个参数,每个参数的含义如下,-q:不输出类名信息和参数,只输出进程号-m:显示main方法的输入参数-l:显示主类的完整路径-v:显示输入JVM的参数-V:不输出路径,只输出进程号和jar,我们依次输入,如下图Jinfo我们可以通过上一步得到对应的JVM的进程号,为我们后面的操作提供方便,后面的操作都会用到进程号。让我们先使用命令。在使用之前,我们先获取进程号。我的服务器上运行的进程号是2528,然后输入jinof2528。通过上图我们可以看到当前的JVM版本等详细信息,还可以看到服务器以及环境变量等一系列信息。同样,我们使用manjinfo命令来阅读手册。该命令主要是供用户查看当前虚拟机的相关信息,这里不再过多介绍。Jstatjstat命令主要用于监控虚拟机的状态。您可以检查虚拟机的GC状态。下面的命令jstat-gcutil2528100010表示每1000毫秒输出2528进程的GC状态,一共输出10次。jstat的手册很长。有兴趣的可以自己去看看。这里我只贴出上面的部分,供大家阅读。如果把上面执行的jstat-gcutil2528100010改成这个jstat-gcutil-h32528100010,最后的效果如下图所示,我们可以看到每三行加一个header,就可以了使用更多命令尝试。jmapjmap命令用于生成转储文件,jmap-dump:live,format=b,file=dump.bin2528创建转储文件如下。通过jmap命令,我们可以生成一个内存快照文件来分析程序异常时的内存信息,配合jhat命令可以更好的使用。上面jhat提到我们在使用jmap的时候会生成一个内存快照文件,那么我们如何查看这个内存文件呢?这里需要结合jhat命令。我们可以使用jhatdump.bin来启动一个服务,然后通过浏览器打开默认的7000端口来查看信息。访问7000端口如下:jstackjstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机中每个线程正在执行的方法栈的集合。生成线程快照的主要目的是定位线程中长时间停顿的原因,比如线程间死锁、死循环、请求外部资源导致的长时间等待等,当线程停顿时,可以查看线程的调用栈每个线程通过jstack,可以知道没有响应的线程在后台干什么,或者等待什么资源。使用命令jstack2528查看线程栈如下:通过这条命令可以看到进程对应的线程的执行状态,分析哪些线程是允许的,哪些线程在等待。总结了JDK的常用命令,阿粉就介绍到这里。大家可以在平时的工作学习中去尝试使用、去感受,这样即使在面试的时候,或者真正需要用到的时候,也能做到得心应手。