3
我有代碼生成基於ThreadMXBean
的線程轉儲,但它只是線程狀態以及他們的堆棧跟蹤,有沒有辦法獲得由kill -SIGQUIT
生成的Java全線程轉儲的其他部分?以編程方式完全線程轉儲(GC線程,JNI等...)
我正在對以下其他部分的位置: -
GC線程
"GC task thread#0 (ParallelGC)" prio=3 tid=0x0000000100120000 nid=0x3 runnable
"GC task thread#1 (ParallelGC)" prio=3 tid=0x0000000100131000 nid=0x4 runnable
VM線程
"VM Periodic Task Thread" prio=3 tid=0x00000001nid=0x19 waiting on condition
JNI全局引用計數
JNI global references: 1925
的Java堆uti補腎中藥視圖
1 Heap
2 PSYoungGen total 466944K, used 178734K [0xffffffff45c00000, 0xffffffff70800000, 0xffffffff70800000)
3 eden space 233472K, 76% used [0xffffffff45c00000,0xffffffff50ab7c50,0xffffffff54000000)
4 from space 233472K, 0% used [0xffffffff62400000,0xffffffff62400000,0xffffffff70800000)
5 to space 233472K, 0% used [0xffffffff54000000,0xffffffff54000000,0xffffffff62400000)
6 PSOldGen total 1400832K, used 1400831K [0xfffffffef0400000, 0xffffffff45c00000, 0xffffffff45c00000)
7 object space 1400832K, 99% used [0xfffffffef0400000,0xffffffff45bfffb8,0xffffffff45c00000)
8 PSPermGen total 262144K, used 248475K [0xfffffffed0400000, 0xfffffffee0400000, 0xfffffffef0400000)
9 object space 262144K, 94% used [0xfffffffed0400000,0xfffffffedf6a6f08,0xfffffffee0400000)
到目前爲止我的代碼:通過擊殺產生
public static String threadDump() {
String s = "";
ThreadMXBean bean = ManagementFactory.getThreadMXBean();
ThreadInfo[] theadDumps = bean.dumpAllThreads(true, true);
s += "Number threads: " + theadDumps.length + "\n";
s += "========= Threads ===========\n";
for (ThreadInfo threadInfo : theadDumps) {
String t = threadInfo.toString();
t = t.substring(0, t.indexOf("\n"));
s += t + "\n";
for (StackTraceElement stackTraceElement : threadInfo.getStackTrace()) {
s += " " + stackTraceElement + "\n";
}
s += "======\n";
}
return s;
}
其中一些統計信息不是線程相關的,您必須從多個來源組裝它們,而不僅僅是線程bean。 – the8472