`
youlong699
  • 浏览: 22672 次
  • 性别: 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堆栈的方法

    另一种常见的打印堆栈的方法是通过故意抛出一个异常,然后捕获这个异常并打印其堆栈跟踪信息。这种方式简单粗暴但非常有效,特别适用于快速定位问题时。 ```java public static void printStackTrace() { try { ...

    linux程序崩溃堆栈信息打印库

    在信号处理器内部,调用`backtrace`和`backtrace_symbols`来获取并打印堆栈信息,然后再终止程序,以便开发者能根据这些信息分析问题。 在运维环境中,了解如何利用`libexecinfo`库可以大大提高故障诊断效率。例如...

    java代码重构经验总结

    ### Java代码重构经验总结 在软件开发过程中,代码重构是一项重要的技能,它旨在不改变代码外部行为的前提下,改进其内部结构,从而提升代码质量和可维护性。本文将深入探讨Java代码重构的关键点,涵盖重构原则、...

    java代码优化笔记

    在进行Java代码优化时,有多个方面需要考虑,本文档提供的是一系列详细的优化建议,涵盖了异常处理、资源管理、数据结构使用、性能提升等多个角度。首先,异常处理是代码优化的重要环节。不应该对所有异常都使用通用...

    银行管理系统登录界面java代码

    综上所述,这段代码提供了一个基础的银行管理系统登录界面实现示例,涵盖了Java Swing GUI设计、事件处理机制、JDBC数据库操作等方面的知识。不过,在实际开发过程中还需要注意代码的健壮性和安全性问题。

    文件读写 java 源代码

    本篇文章将深入分析一段简单的Java源代码,该代码实现了文件的读取与写入操作,并对其中涉及的关键概念和技术进行详细介绍。 #### 二、核心概念 1. **InputStream**:这是Java中的一个抽象类,用于表示从数据源...

    java连接sqlserver代码

    这里使用了`printStackTrace()`方法来打印异常堆栈信息,方便开发者定位问题。 #### 三、测试连接 在`main`方法中,通过调用`ConnectDB.connect()`方法来尝试建立数据库连接,并根据返回的结果判断连接是否成功: ...

    java压缩文件代码

    - 在实际开发中,建议对异常进行更加详尽的处理,而不是简单地打印堆栈跟踪。 - 对于大型文件或大量文件的压缩,需要考虑内存消耗问题,适当调整缓冲区大小。 - 为确保兼容性,应明确指定字符集(如“GBK”),特别...

    java代码oracle数据库批量插入

    这段Java代码通过JDBC实现了向Oracle数据库批量插入数据的功能。关键步骤包括:建立数据库连接、准备SQL语句、批量添加SQL语句到批处理队列、执行批处理以及事务提交。这种方式相比于逐条插入数据,可以显著提升插入...

    Android下各语言加callStack示例

    在你的项目中创建相应的C、C++、Java代码段,并确保正确配置编译选项。在运行时,根据所选语言调用相应的函数来打印call stack。对于内核空间,你可能需要修改内核源码,编译并加载内核模块,或者在系统启动时启用...

    java基础代码

    每段Java代码都从一个或多个类开始,这些类定义了对象的属性和行为。在"TestJava"文件中,可能会包含至少一个`public class TestJava`声明,这是Java程序的主入口点。 接下来是变量和数据类型。Java支持基本数据...

    Java使用Swing默认皮肤控件代码示例

    如果在设置过程中出现异常,会打印堆栈跟踪信息。 另外,也可以直接使用以下代码来设置"Nimbus"LookAndFeel: ```java UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); ``` 这是...

    可视卡打印程序(C++ builder)源代码

    【可视卡打印程序(C++ builder)源代码】是一个基于C++ Builder开发的应用程序,用于打印可视化的卡片。C++ Builder是一款集成开发环境(IDE),它由Embarcadero Technologies公司开发,专为使用C++语言进行Windows...

    java发邮件代码绝对能用

    本文档将详细解析一段能够运行成功的Java邮件发送代码,并对其关键部分进行深入解读。该代码已经在MyEclipse 6.5环境下测试通过。 #### 二、核心类与方法介绍 1. **`Properties` 类**: - `Properties` 类是Java...

    java实现解压zip文件代码实例直接运行

    以下是一个简单的Java代码示例,用于解压ZIP文件: ```java import java.io.*; import java.util.zip.*; public class JieYaZip { public static void main(String[] args) { String zipFilePath = "path_to_...

    飞机大战java源代码.docx

    【飞机大战Java源代码分析】 ...总结:这段Java代码展示了如何用面向对象编程设计一个简单的飞机游戏,包括飞机对象的创建、绘图、移动以及键盘事件的处理。了解这些概念对于理解Java游戏开发的基础原理至关重要。

    java http 发送xml报文

    1. **错误处理**:代码中的异常处理仅通过`ex.printStackTrace()`打印堆栈跟踪,这在调试阶段可能有用,但在生产环境中应捕获具体异常并采取适当措施,如记录日志或返回错误信息。 2. **资源管理**:虽然代码中关闭...

    java基础题库

    `IOException`的处理确保了在出现错误时能够适当地打印堆栈跟踪信息,并确保最后总是关闭输入和输出流,这是良好的编程实践。 接下来,第二个知识点涉及到创建一个简单的Java Swing GUI。在标签中没有明确提及Swing...

    数据结构Array介绍和Java示例代码

    2. 内存限制:由于要在内存中连续分配一段空间,当数组较大时可能会受到内存限制。 Array的适用场景包括: 1. 当需要存储具有相同类型的固定数量元素,并对特定位置进行高效访问时,数组是一个很好的选择。 2. ...

    Java线程Dump分析工具jstack解析及使用场景

    其中,`pid` 是Java进程的ID,`-l` 选项会提供更详细的线程和锁信息,而 `-F` 选项则用于在进程无响应时强制打印堆栈信息。 当Java程序出现挂起(hung)或者死锁(Deadlock)等问题时,jstack尤为重要。它可以显示...

Global site tag (gtag.js) - Google Analytics