0
点赞
收藏
分享

微信扫一扫

使用浏览器来查看线程堆栈


使用浏览器来查看线程堆栈

​jstack​​​命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump 或 javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合。
生成线程快照的主要目的是定位线程出现长时间停顿的常见原因。
线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。

JDK中,java.lang.Thread 类新增了一个getAllStackTraces()方法 用于获取虚拟机中所有线程StackTraceElement 对象。使用这个方法可以通过简单的几行代码就完成jstack 的大部分功能。

<%@ page import="java.util.Map" %>
<body>
<pre>
<%
for(Map.Entry<Thread, StackTraceElement[]> stackTrace : Thread.getAllStackTraces().entrySet()){
Thread thread = (Thread)stackTrace.getKey();
StackTraceElement[] stack = ( StackTraceElement[])stackTrace.getValue();

if(thread.equals(Thread.currentThread()))
continue;

out.print("\n 线程:" + thread.getName() + "\n");
for(StackTraceElement element : stack){
out.print("\t" + element + "\n");
}
}

%>

</pre>
</body>

运行后即可在JSP页面查看线程运行状况。

如图:

使用浏览器来查看线程堆栈_jvm虚拟机


—-<<深入理解JVM虚拟机>>读书笔记


举报

相关推荐

0 条评论