java的jps(Java Virtual Machine Process Status Tool)命令主要用于查看系统中的java进程;jstack(Java Stack Trace)命令主要用于查看给定进程的堆栈信息。工作中使用jstack前经常要先使用jps。
jps
jps用于查看当前用户所在操作系统上的java进程,参考1中对其基本使用已经做了详尽的说明,这里做下补充。
只要你的操作系统在执行java程序,那么会在java.io.tmpdir
指定的目录下,其实就是临时文件夹,生成一个类似于hsperfdata_{User}的文件夹,里面每个文件都指代一个正在运行的java程序。当java程序运行结束时,其对应的临时文件也会被删除。jps命令不过是以命令的形式展示了正在运行的java程序详情而已。
在windows操作系统下,临时文件夹一般是C:\Users\{User}\AppData\Local\Temp\
。
上面的{User}指系统当前用户名。
jstack
jstack用于生成java虚拟机当前时刻的线程快照,具体使用详见参考2。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。
线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。
如果你想将jstack命令执行后输出的内容写入到指定的文件中,可以直接使jstack pid>goal.txt
,即将pid指示的java进程内的线程快照内容写入到goal文件中,无关于平台。