JDK常用命令行工具

JDK的bin目录下有很多exe文件,这些文件都是JDK自带的工具,可用于排查一些jvm的问题,本章简单介绍一些常用的JDK自带的工具的使用。

1.jvm进程查询---jps

这个工具类似于Linux系统的ps命令,可以用以查询当前虚拟机正在运行的进程相关信息。这个命令是一个十分基础的命令,因为它可以查询进程的唯一ID(LVMID),其他的命令都会依赖这个LVMID来进行其他的信息检索,jps命令常用参数如下表所示:

选项 参数说明
-q 只输出LVMID,其他信息不显示
-m 输出虚拟机进程启动时传递给main函数的参数
-l 输出进程主类的全限定名,如果执行的是jar包,则显示jar的全路径
-v 输出虚拟机进程启动时的jvm参数信息

2.jvm统计信息监视工具---jstat

这个命令是用于监控虚拟机各种运行状态的工具,他可以查询本地或者远程虚拟机进程中的类装载,内存,垃圾回收等运行数据,这个命令的的格式如下:

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

例如执行jstat -gc 13416 200 10,它就表示查询13416这个进程的垃圾回收相关信息,每间隔200毫秒查询一次,共循环10次,执行结果如下图

JDK常用命令行工具_第1张图片

这个命令常用的参数如下表所示,还有很多其他的参数,需要大家在自行查找相关文档琢磨。

选项 参数说明
-class 监视类装载,卸载数量,总空间以及类装载所耗的时间
-gc 监视java堆状况进行监视,包括Eden区域,两个survivor区,老年代,永久代等相关信息
-gccause 输出上一次导致gc的原因

3.堆栈追踪工具---jstack

这个命令用于生成此时此刻线程快照,生成线程快照的主要作用就是定位当前线程出现长时间停顿的问题,如线程死锁,死循环,请求外部资源实践过长等情况。这个时候就可以使用jstack命令来分析这段代码了。如我们写如下一个程序

public class TastTask {

    public static void main(String[] args) {
        while (true) {
            System.out.println("死循环");
        }
    }

}

这是一个死循环程序,模拟一下某个线程的耗时操作,通过jstack命令可以查看呗阻塞的线程相关的信息,如下图,限制性jps命令,然后获取到LVMID,通过jstack命令就能很快的定位到程序被卡住的位置:

JDK常用命令行工具_第2张图片

JDK常用命令行工具_第3张图片

你可能感兴趣的:(Java)