Skip to content

Commit

Permalink
0004569: Added thread-stats.csv to snapshots (#115)
Browse files Browse the repository at this point in the history
  • Loading branch information
evan-miller-jumpmind committed Sep 24, 2020
1 parent 827589f commit 17ba32a
Showing 1 changed file with 39 additions and 0 deletions.
Expand Up @@ -27,6 +27,7 @@
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryPoolMXBean;
import java.lang.management.MemoryType;
Expand All @@ -35,6 +36,7 @@
import java.lang.management.RuntimeMXBean;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;
import java.lang.reflect.Method;
import java.nio.charset.Charset;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
Expand Down Expand Up @@ -336,6 +338,7 @@ public static File createSnapshot(ISymmetricEngine engine) {

createThreadsFile(tmpDir.getPath(), false);
createThreadsFile(tmpDir.getPath(), true);
createThreadStatsFile(tmpDir.getPath());

fos = null;
try {
Expand Down Expand Up @@ -825,6 +828,42 @@ public static File createThreadsFile(String parent, boolean isFiltered) {
}
return file;
}

public static File createThreadStatsFile(String parent) {
File file = new File(parent, "thread-stats.csv");
try {
OutputStream outputStream = new FileOutputStream(file);
CsvWriter csvWriter = new CsvWriter(outputStream, ',', Charset.forName("ISO-8859-1"));
String[] heading = {"Thread", "Allocated Memory (Bytes)", "CPU Time (Seconds)"};
csvWriter.writeRecord(heading);
ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
long[] threadIds = threadBean.getAllThreadIds();
for (long l : threadIds) {
ThreadInfo info = threadBean.getThreadInfo(l, 100);
if (info != null) {
String threadName = info.getThreadName();
long threadId = info.getThreadId();
long allocatedBytes = 0;

try {
Method method = threadBean.getClass().getMethod("getThreadAllocatedBytes");
method.setAccessible(true);
allocatedBytes = (Long) method.invoke(threadBean, threadId);
} catch (Exception ignore) {
}

String[] row = {threadName, Long.toString(allocatedBytes), Float.toString(threadBean.getThreadCpuTime(threadId) / 1000000000f)};
csvWriter.writeRecord(row);
}
}
csvWriter.flush();
outputStream.flush();
outputStream.close();
} catch (IOException e) {
log.warn("Failed to export thread information", e);
}
return file;
}

private static void addTableToMap(HashMap<CatalogSchema, List<Table>> catalogSchemas, CatalogSchema catalogSchema, Table table) {
List<Table> tables = catalogSchemas.get(catalogSchema);
Expand Down

0 comments on commit 17ba32a

Please sign in to comment.