0

スレッド ダンプを生成し、(診断目的で) アプリケーション内でログに記録したい場合、それを生成するためのユーティリティはありますか?

4

3 に答える 3

0

私は現在これを使用しています。それがまさにあなたが望むものかどうかはわかりません。

import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;
public class ThreadDumper
{
    public static String dumpThreads()
    {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);           
        try
        {
            ThreadMXBean bean = ManagementFactory.getThreadMXBean();
            ThreadInfo[] threadInfos = bean.getThreadInfo(bean.getAllThreadIds(), Integer.MAX_VALUE);
            for (int i = 0; i < threadInfos.length; i++)
            {
                ThreadInfo threadInfo = threadInfos[i];
                pw.print(threadInfo);
            }

            pw.println("----------------------------------------");
            pw.println();

            long[] deadlockedIds = bean.findMonitorDeadlockedThreads();
            if(deadlockedIds == null || deadlockedIds.length == 0)
            {
                pw.println("Detected 0 deadlocked threads.");
            }
            else
            {
                pw.println("Detected " + deadlockedIds.length + " deadlocked threads:");
                threadInfos = bean.getThreadInfo(deadlockedIds, 0);
                for (int i = 0; i < threadInfos.length; i++)
                {
                    ThreadInfo threadInfo = threadInfos[i];
                    pw.print(threadInfo);
                }
            }
        }
        catch(Exception e)
        {
            pw.println("----------------------------------------");
            pw.println("Exception occurred while taking thread dump:");
            e.printStackTrace(pw);
            pw.println("----------------------------------------");
        }

        return sw.toString();
    }
}
于 2013-11-05T19:52:07.207 に答える
0

Determining Current Call Stack (For Diagnostic Purposes)StackTraceElement[] cause = Thread.currentThread().getStackTrace();で推奨されているように試しましたか。

関連 Q/A:

于 2013-11-05T19:47:45.053 に答える