Skip to content

Commit 2048525

Browse files
committed
[GR-31870] Add thread dump to leak tests.
PullRequest: graalpython/1834
2 parents 8b5abc5 + 65824d7 commit 2048525

File tree

1 file changed

+20
-0
lines changed
  • graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/test/advance

1 file changed

+20
-0
lines changed

graalpython/com.oracle.graal.python.test/src/com/oracle/graal/python/test/advance/LeakTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242

4343
import java.io.IOException;
4444
import java.lang.management.ManagementFactory;
45+
import java.lang.management.ThreadInfo;
46+
import java.lang.management.ThreadMXBean;
4547
import java.nio.file.Files;
4648
import java.nio.file.Path;
4749
import java.util.ArrayList;
@@ -120,15 +122,33 @@ private void dumpAndAnalyze() {
120122
}
121123

122124
MBeanServer server = doFullGC();
125+
String threadDump = getThreadDump();
123126
Path dumpFile = dumpHeap(server);
124127
boolean fail = checkForLeaks(dumpFile);
125128
if (fail) {
129+
System.err.print(threadDump);
126130
System.exit(255);
127131
} else {
128132
System.exit(0);
129133
}
130134
}
131135

136+
private String getThreadDump() {
137+
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
138+
ThreadInfo[] threads = threadMXBean.getThreadInfo(threadMXBean.getAllThreadIds(), 100);
139+
final String line = "=====================================\n";
140+
StringBuilder sb = new StringBuilder(line);
141+
for (ThreadInfo thread : threads) {
142+
sb.append("-------\n");
143+
sb.append(thread.getThreadName()).append('\n');
144+
sb.append("Thread state:").append(thread.getThreadState()).append('\n');
145+
for (StackTraceElement element : thread.getStackTrace()) {
146+
sb.append(" ").append(element).append('\n');
147+
}
148+
}
149+
return sb.append(line).toString();
150+
}
151+
132152
private boolean checkForLeaks(Path dumpFile) {
133153
boolean fail = false;
134154
try {

0 commit comments

Comments
 (0)