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

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

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虚拟机>>读书笔记

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值