private void recordStackDump(final ThreadInfo[] stackDump) { final long id = ignore.getId(); for (ThreadInfo entry : stackDump) { StackTraceElement[] stackTrace = entry.getStackTrace(); if (stackTrace.length > 0 && (entry.getThreadId() != id)) { collector.collect(stackTrace); } } }
@Override public Map<String, SampleNode> getCollections() { SampleNode nodes = collector.get(); return nodes == null ? Collections.EMPTY_MAP : ImmutableMap.of("ALL", nodes); }
@Override public Map<String, SampleNode> getCollectionsAndReset() { SampleNode nodes = collector.getAndReset(); return nodes == null ? Collections.EMPTY_MAP : ImmutableMap.of("ALL", nodes); }
st1[1] = new StackTraceElement("C1", "m2", "C1.java", 11); st1[2] = new StackTraceElement("C1", "m3", "C1.java", 12); instance.collect(st1); LOG.debug("Collector = {}", instance); Assert.assertEquals(4, instance.get().getNrNodes()); instance.collect(st2); LOG.debug("Collector = {}", instance); Assert.assertEquals(5, instance.get().getNrNodes()); st3[1] = new StackTraceElement("C2", "m2", "C2.java", 11); st3[2] = new StackTraceElement("C2", "m3", "C2.java", 12); instance.collect(st3); LOG.debug("Collector = {}", instance); st4[1] = new StackTraceElement("C1", "m2", "C1.java", 11); st4[2] = new StackTraceElement("C1", "m4", "C1.java", 14); instance.collect(st4);
@Override public Map<String, SampleNode> getCollections() { SampleNode nodes = collector.get(); return nodes == null ? Collections.EMPTY_MAP : ImmutableMap.of("ALL", nodes); }
@Override public void sample() { Map<Thread, StackTraceElement[]> stackDump = Thread.getAllStackTraces(); stackDump.remove(ignore); for (Map.Entry<Thread, StackTraceElement[]> element : stackDump.entrySet()) { StackTraceElement[] stackTrace = element.getValue(); if (stackTrace.length > 0) { collector.collect(stackTrace); } else { collector.collect(new StackTraceElement[]{ new StackTraceElement("Thread", element.getKey().getName(), "", 0) }); } } }
@Override public Map<String, SampleNode> getCollectionsAndReset() { SampleNode nodes = collector.getAndReset(); return nodes == null ? Collections.EMPTY_MAP : ImmutableMap.of("ALL", nodes); }
@Override public Map<String, SampleNode> getCollections() { SampleNode nodes = collector.get(); return nodes == null ? Collections.EMPTY_MAP : ImmutableMap.of("ALL", nodes); }
@Override public void sample() { Iterable<Thread> currentThreads = threadSupplier.get(); int i = 0; for (Thread t : currentThreads) { requestFor[i++] = t; if (i >= requestFor.length) { break; } } Arrays.fill(requestFor, i, requestFor.length, null); StackTraceElement[][] stackTraces = Threads.getStackTraces(requestFor); for (int j = 0; j < i; j++) { StackTraceElement[] stackTrace = stackTraces[j]; if (stackTrace != null && stackTrace.length > 0) { collector.collect(stackTrace); } else { collector.collect(new StackTraceElement[]{ new StackTraceElement("Thread", requestFor[j].getName(), "", 0) }); } } }
@Override public Map<String, SampleNode> getCollectionsAndReset() { SampleNode nodes = collector.getAndReset(); return nodes == null ? Collections.EMPTY_MAP : ImmutableMap.of("ALL", nodes); }
@Override public Map<String, SampleNode> getCollections() { SampleNode nodes = collector.get(); return nodes == null ? Collections.EMPTY_MAP : ImmutableMap.of(threadSupplier.toString(), nodes); }
@Override @SuppressFBWarnings("EXS_EXCEPTION_SOFTENING_NO_CHECKED") public void sample() { Thread[] threads = Threads.getThreads(); final int nrThreads = Threads.randomFirst(maxNrSampledThreads, threads); if (requestFor.length < nrThreads) { requestFor = new Thread[nrThreads]; } int j = 0; for (int i = 0; i < nrThreads; i++) { Thread th = threads[i]; if (threadFilter.test(th)) { // not interested in these traces continue; } requestFor[j++] = th; } Arrays.fill(requestFor, j, requestFor.length, null); StackTraceElement[][] stackDump = Threads.getStackTraces(requestFor); for (int i = 0; i < j; i++) { StackTraceElement[] stackTrace = stackDump[i]; if (stackTrace != null && stackTrace.length > 0) { collector.collect(stackTrace); } else { collector.collect(new StackTraceElement[]{ new StackTraceElement("Thread", requestFor[i].getName(), "", 0) }); } } }
@Override public Map<String, SampleNode> getCollectionsAndReset() { SampleNode nodes = collector.getAndReset(); return nodes == null ? Collections.EMPTY_MAP : ImmutableMap.of(threadSupplier.toString(), nodes); }
@Override public Map<String, SampleNode> getCollections() { TMap<String, SampleNode> result = new THashMap<>(collections.size()); collections.forEachEntry((k, v) -> { result.put(k, v.get()); return true; }); return result; }
@Override public void sample() { Iterable<Map.Entry<Thread, ExecutionContext>> currentThreads = execCtxSupplier.get(); int i = 0; for (Map.Entry<Thread, ExecutionContext> entry : currentThreads) { requestFor[i] = entry.getKey(); contexts[i++] = entry.getValue(); if (i >= requestFor.length) { break; } } Arrays.fill(requestFor, i, requestFor.length, null); StackTraceElement[][] stackTraces = Threads.getStackTraces(requestFor); for (int j = 0; j < i; j++) { StackTraceElement[] stackTrace = stackTraces[j]; if (stackTrace != null && stackTrace.length > 0) { ExecutionContext context = contexts[j]; context.add(stackTrace); String name = ctxToCategory.apply(context); StackCollector c = collections.computeIfAbsent(name, (k) -> new StackCollectorImpl()); c.collect(stackTrace); } } }
@Override public Map<String, SampleNode> getCollectionsAndReset() { TMap<String, SampleNode> result = new THashMap<>(collections.size()); collections.forEachEntry((k, v) -> { result.put(k, v.getAndReset()); return true; }); return result; }