`
youlong699
  • 浏览: 21705 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一段打印堆栈的java代码

 
阅读更多
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Writer;
    import java.lang.management.ManagementFactory;
    import java.lang.management.ThreadInfo;
    import java.lang.management.ThreadMXBean;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
     
    /**
     * Code which writes a stack dump for all threads to a file.
     */
    public class DumpStack {
     
            // directory where the stack files are written
            private static final String STACK_DUMP_DIR = "./";
     
            // here for testing
            public static void main(String[] args) throws Exception {
                    dumpStacks();
            }
     
            public static void dumpStacks() throws IOException {
                    ThreadMXBean mxBean = ManagementFactory.getThreadMXBean();
                    ThreadInfo[] threadInfos = mxBean.getThreadInfo(mxBean.getAllThreadIds(), 0);
                    Map<Long, ThreadInfo> threadInfoMap = new HashMap<Long, ThreadInfo>();
                    for (ThreadInfo threadInfo : threadInfos) {
                            threadInfoMap.put(threadInfo.getThreadId(), threadInfo);
                    }
     
                    // choose our dump-file
                    File dumpFile = new File(STACK_DUMP_DIR, "stacks." + System.currentTimeMillis());
                    Writer writer = new BufferedWriter(new FileWriter(dumpFile));
                    try {
                            dumpTraces(mxBean, threadInfoMap, writer);
                    } finally {
                            writer.close();
                    }
            }
     
            private static void dumpTraces(ThreadMXBean mxBean, Map<Long, ThreadInfo> threadInfoMap, Writer writer)
                            throws IOException {
                    Map<Thread, StackTraceElement[]> stacks = Thread.getAllStackTraces();
                    writer.write("Dump of " + stacks.size() + " thread at "
                                    + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss z").format(new Date(System.currentTimeMillis())) + "\n\n");
                    for (Map.Entry<Thread, StackTraceElement[]> entry : stacks.entrySet()) {
                            Thread thread = entry.getKey();
                            writer.write("\"" + thread.getName() + "\" prio=" + thread.getPriority() + " tid=" + thread.getId() + " "
                                            + thread.getState() + " " + (thread.isDaemon() ? "deamon" : "worker") + "\n");
                            ThreadInfo threadInfo = threadInfoMap.get(thread.getId());
                            if (threadInfo != null) {
                                    writer.write("    native=" + threadInfo.isInNative() + ", suspended=" + threadInfo.isSuspended()
                                                    + ", block=" + threadInfo.getBlockedCount() + ", wait=" + threadInfo.getWaitedCount() + "\n");
                                    writer.write("    lock=" + threadInfo.getLockName() + " owned by " + threadInfo.getLockOwnerName()
                                                    + " (" + threadInfo.getLockOwnerId() + "), cpu="
                                                    + (mxBean.getThreadCpuTime(threadInfo.getThreadId()) / 1000000L) + ", user="
                                                    + (mxBean.getThreadUserTime(threadInfo.getThreadId()) / 1000000L) + "\n");
                            }
                            for (StackTraceElement element : entry.getValue()) {
                                    writer.write("        ");
                                    writer.write(element.toString());
                                    writer.write("\n");
                            }
                            writer.write("\n");
                    }
            }
    }

 来自 http://pastebin.com/zwcKC0hz

分享到:
评论

相关推荐

    整理后java开发全套达内学习笔记(含练习)

    Annotation [java] 代码注释 [ænәu'teiʃәn] anonymous adj.匿名的[ә'nɒnimәs]'(反义:directly adv.直接地,立即[di'rektli, dai'rektli]) apply v.应用,适用 [ә'plai] application n.应用,应用程序 [,æ...

    达内 coreJava 习题答案

    打印出第一个大于 3.1415小于 3.1416的值 class Pi { public static void main(String[] args){ double pi =0; //定义初始值 double fenZi = 4; //分子为4 double fenMu = 1; //第一个4,可看作分母为1 的...

    jsr80 java 访问 usb

    每一段连线都是 hub 与 USB 设备的点对点连接,后者可以是为系统提供更多附加点的另一个 hub,也可以是一个提供功能的某种设备。主机使用主/从协议与 USB 设备通信。这种方式解决了包冲突的问题,但是同时也阻止了...

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    永久弃用的代码段注释掉即可,即不用加任何注释。 C .对于暂时被注释掉,后续可能恢复使用的代码片断,在注释代码上方,统一规定使用三 个斜杠(///)来说明注释掉代码的理由。 D .不要在视图模板中加入任何复杂的...

    LogAppTester:我的自定义 java loggingassertion 工具

    我在大学时写了这段代码,我经常用它来生成方便、易于调试的终端和日志文件输出。 它包含我在本科级别的 Java 编码中发现有用的库代码。 最值得注意的是,它解决了以下烦人的问题: #1. 无法找到您的打印报表。 很...

    新版Android开发教程.rar

    � Android 更像一款桌面环境为 Java 的 Linux 操作系统。有助于 Google 实现其 " 随时随地为每个人提供信 息 " 的企业战略。 HTC HTC HTC HTC Dream/G1 Dream/G1 Dream/G1 Dream/G1 具体配置 硬件 3.17 英寸 HVGA ...

    JSTL详细标签库介绍

    那么该程序会运行默认异常处理程序,退出JAVA,若Applet或基于GUI的APP,当一个异常未被“捕获”,GUI在运行默认异常处理程序依然会显示,而且用户使用的GUI处于一个不稳定的状态))&lt;BR&gt;JAVA代码中:1、可能出现...

    〖程序设计基础〗练习题3及答案

    ,为了打印输出数组a的最后一个元素,下面正确的代码是( )。 A) System.out.println(a[10]); B) System.out.println(a[9]); C) System.out.println(a[a.length]); D) System.out.println(a(8)); 26.若一个类中对某个...

    Toad 使用快速入门

    使用Toad,我们可以通过一个图形化的用户界面快速访问数据库,完成复杂的SQL和PL/SQL代码编辑和测试工作。Toad由Oracle开发专家专门为开发人员而设计,是一个功能强大、结构紧凑的专业化PL/SQL开发环境。 Toad 主要...

    C++大学教程,一本适合初学者的入门教材(part1)

    1.15 简单程序:打印一行文本 1.16 简单程序:两个整数相加 1.17 内存的概念 1.18 算术运算 1.19 判断:相等与关系运算符 1.20 新型头文件与名字空间 1.21 有关对象的思考 小结 术语 自测练习 自测练习答案 ...

    C++大学教程,一本适合初学者的入门教材(part2)

    1.15 简单程序:打印一行文本 1.16 简单程序:两个整数相加 1.17 内存的概念 1.18 算术运算 1.19 判断:相等与关系运算符 1.20 新型头文件与名字空间 1.21 有关对象的思考 小结 术语 自测练习 自测练习答案 ...

    ZendFramework中文文档

    3.2.2. 高级使用:持久一个 DbTable 结果对象 3.2.3. 高级用法示例 3.3. 摘要式认证 3.3.1. 简介 3.3.2. 规范(Specifics) 3.3.3. 身份(Identity) 3.4. HTTP 认证适配器 3.4.1. 简介 3.4.2. 设计回顾 ...

Global site tag (gtag.js) - Google Analytics