WEB开发网
开发学院软件开发Java 用Java代码来触发生成ThreadDump 阅读

用Java代码来触发生成ThreadDump

 2009-09-23 00:00:00 来源:WEB开发网   
核心提示:ThreadDump对于JVM诊断和调优是个好东西. 以前, 我们生成ThreadDump, 一般都需要另外连到服务器上的进程管理器才行, 不管是Ctrl+Break还是kill –3, 比较不方便. 有时候, 也许想远程直接生成并检查一下服务器的ThreadDump, 这个怎么办呢? 幸好我们有以下代码可

ThreadDump对于JVM诊断和调优是个好东西. 以前, 我们生成ThreadDump, 一般都需要另外连到服务器上的进程管理器才行, 不管是Ctrl+Break还是kill –3, 比较不方便. 有时候, 也许想远程直接生成并检查一下服务器的ThreadDump, 这个怎么办呢? 幸好我们有以下代码可以做到:

util.threaddump.ThreadDumpBuilder.java

package util.threaddump; 
import java.util.Map; 
/**
* 使用 Java 远程代码生成 ThreadDump. 适用于 JDK 1.5+.
* 参考: {@link Thread#getStackTrace()}
* {@link Throwable#getStackTrace()}
* @see StackTraceElement
* @author beansoft@126.com
* 转载请注明出处: beansoft.blogjava.net
*/
public class ThreadDumpBuilder {
    /**
     * 生成并返回 Thread Dump.
     * 转载请注明出处: beansoft.blogjava.net
     * @return
     */
    public String build() {
        StringBuilder output = new StringBuilder(1000);
        for (Map.Entry stackTrace : Thread.getAllStackTraces().entrySet()) {
            appendThreadStackTrace(output, (Thread) stackTrace.getKey(),
                    (StackTraceElement[]) stackTrace.getValue());
        }
        return output.toString();
    } 
    /**
     * 处理并输出堆栈信息.
     * @param output
     *            输出内容
     * @param thread
     *            线程
     * @param stack
     *            线程堆栈
     */
    private void appendThreadStackTrace(StringBuilder output, Thread thread,
            StackTraceElement[] stack) {
        // 忽略当前线程的堆栈信息
        if (thread.equals(Thread.currentThread())) {
            return;
        } 
        output.append(thread).append("\n");
        for (StackTraceElement element : stack) {
            output.append("\t").append(element).append("\n");
        }
    } 
}

1 2  下一页

Tags:Java 代码 触发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接