jstack是JDK自带的一款分析java线程代码栈的工具.使用它可以很方便的找到耗费cpu或者导致死锁的代码.
jstack不但可以分析本地一个java进程,也可以分析远程主机上的java进程,还可以分析已生成的java core文件.
我认为,三个功能中最有用的是分析本地java进程.其余两个则不必要熟悉,既然有远程主机的访问权限,直接登录主机岂不更方便. 而java core文件如果生成的话,现在已有很多免费的界面化的分析工具可供选择,又何必劳神用这个,而jstack本身也就是生成core文件然后再人工分析,所以用jstack分析一个java core文件也不是那么必要需要熟练掌握,大可点到为止.
参数的意思: -F当’jstack [-l] pid’没有相应的时候强制打印栈信息
-l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
-m打印java和native c/c++框架的所有栈信息.
例如: jstack pid >1.log jstack -l pid >1.log jstack -F pid >1.log jstack -m pid >1.log
在输出的文件里,甚至可以直接看到是否存在死锁,是不是很强大哈.比如: Attaching to process ID 978, please wait... Debugger attached successfully. Server compiler detected. JVM version is 16.0-b10 Deadlock Detection: No deadlocks found.