スレッド ダンプを生成し、(診断目的で) アプリケーション内でログに記録したい場合、それを生成するためのユーティリティはありますか?
質問する
257 次
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 に答える